LINUX.ORG.RU
ФорумTalks

Javascript vs C - скорость deflate. Удивительное рядом.

 


0

2

Дошли руки написать бенчмарки для проверки своего супер-пупер кода (делается порт zlib). Получилось забавно:

$ ./benchmark.js
Selected samples: (1 of 1)
> lorem_1mb

Sample: lorem_1mb.txt (1000205 bytes)
> deflate-gildas x 3.04 ops/sec ±1.77% (12 runs sampled)
> deflate-imaya x 2.27 ops/sec ±6.23% (9 runs sampled)
> deflate-zlib x 9.23 ops/sec ±2.95% (48 runs sampled)

В ноде вызовы zlib всего в 3 раза быстрее нативного кода. Правда есть нюансы:

1. Меряется latency. Возможно, zlib все-таки меньше грузит процессор, и потери на переключении тредов.
2. Какой бы быстрый код на С вы не сделали, данные обратно в v8 пропихиваются ДОЛГО.

Бенчмарк пока только по чужим библиотекам, есть шансы что своя будет пошустрее, когда допилим.

Сильно удивлён. Думал, что на идеальном коде разница будет в 5-10 раз. А тут всего 3, и на том, где деоптимизации могут приключиться. Хотя конечно яваскрипт в сишном стиле - не для детей с хрупкой психикой :)

Исходники тут https://github.com/nodeca/pako

★★★★★

Последнее исправление: Vit (всего исправлений: 1)

вызовы zlib всего в 3 раза быстрее нативного кода

Так не нативного, а JS, или так нодисты говорят?

Думал, что на идеальном коде разница будет в 5-10 раз. А тут всего 3, и на том, где деоптимизации могут приключиться.

Ну так в ЦК не дураки сидят...

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

Так не нативного, а JS, или так нодисты говорят?

Фик знает. По крайней мере я так говорю. Возможно ошибаюсь, но пока меня всегда понимали правильно и никого не разрывало.

Если увеличить тестовый файл в 10 раз, то скорость уменьшается пропорционально у всех вариантов. Меня смущает, что через zlib скорость упаковки deflate level 6 всего 10 мб/сек (на макмини и mb air), но но объяснений не нахожу. Возможно он действительно не такой быстрый как я думал.

PS. это на одном ядре, естессна.

Vit ★★★★★
() автор топика

нативный код

подразумевает жс

Вот за это я и не люблю нодерастов.

Deleted
()
Ответ на: комментарий от rikimaru

В курсе про жабу. Просто она мне не нравится.

Это у меня развлекуха такая, на яваскрипте скорость выжимать для тяжелых вычислений https://github.com/nodeca/js-yaml/wiki/Other-languages-and-implementations

Через пару-тройку недель постараюсь поделиться, удалось еще больше из deflate выжать или нет.

Vit ★★★★★
() автор топика

В ноде вызовы zlib всего в 3 раза быстрее нативного кода

Я получил когнитивный диссонанс. Возможно не быстрее, а медленнее?

alman ★★★
()
Ответ на: комментарий от vertexua

Ну суть в том, что яваскрипт крут, терминология нодеров корявая, а джава говно.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Просто я вынес из треда, что JS в три раза быстрее С, что не возможно, потому вероятнее всего замешано кеширование или есть разница в алгоритмах. Тогда может быть выполнение кода на JS быстрее

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Когда в ноде из пакетов выпиливают очередные сишные биндинги, то радостно рапортуют, что все переделали на «native js» (без потери скорости).

Ну вот так повелось. Там native - js. А я забыл на человеческий перевести.

Vit ★★★★★
() автор топика

Готов поспорить, что ты просто измерил погоду на марсе вместо того, что ты написал.

Deleted
()
Ответ на: комментарий от Vit

(без потери скорости).

aka «вусмерть оптимизированный JS с включенным JIT стал не сильно медленнее кривенького кода на С»

devl547 ★★★★★
()
Ответ на: комментарий от devl547

Да нет, там не лохи сидят, сравнивают с нормальным сишным кодом. И в тех местах, где скорость действительно важна.

Например, редисовский драйвер полностью на яваскрипт переехал - пишут что с hiredis разница будет только для очень больших пакетов команд. В драйвере монги из бинарного остался только парсер BSON.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Не вопрос. На сколько спорим :) ?

Да просто так. Берём десяток гигабайт данных и смотрим какая реализация из быстрее прожуёт.

Deleted
()
Ответ на: комментарий от Vit

пишут что с hiredis разница будет только для очень больших пакетов команд.

Оверхед по cpu и памяти какой?
Или опять - нам на это чхать, главное быстрей в продакшен.

devl547 ★★★★★
()

Почему бы просто не использовать asm.js? zlib на asm.js даже входит в состав octane v2, т.е. v8 против него должны оптимизировать.

trycatch ★★★
()
Ответ на: комментарий от Deleted

На просто так - сами пишите, если хочется. Я проверял на 10 мб, цифры изменились пропорционально. Поэтому оставил 1мб семплы - работает быстро и достаточно для оценки. Окно всё равно не больше 32к

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

На просто так - сами пишите, если хочется. Я проверял на 10 мб, цифры изменились пропорционально. Поэтому оставил 1мб семплы - работает быстро и достаточно для оценки. Окно всё равно не больше 32к

Будет время - попробую.

Deleted
()
Ответ на: комментарий от devl547

Нету там оверхеда, над которым было бы смысл заморачиваться. А очевидный плюс в том, что код работает сразу на всех платформах.

Vit ★★★★★
() автор топика
Ответ на: комментарий от trycatch

Потому что нет смысла. У меня задача сделать модульную и быструю библиотеку, которую можно засовывать в браузер как целиком так и по частям. asm.js тут ни каким местом. Это как спрашивать «почему бы вам не заменить пробелы на табы»

Vit ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Больше 100м в какой-то момент понадобится делать поточную обработку и отфильтровывать из бенчмарков чтение/запись файлов. У v8 предел heap 1 гигабайт.

Технически это всё возможно, но практически будет только гимор и ничего полезного для бенчмарков.

Vit ★★★★★
() автор топика

И правда deflate не быстрый. Подкрутил код, вызывающий zlib, чтобы можно было параметры сжатия менять.

level 0 -> 50мб / сек
level 6 -> 9мб / сек

То есть притормаживает действительно компрессор, а не нодовская обёртка.

Vit ★★★★★
() автор топика
Ответ на: комментарий от tides

Тут речь о скорости быдлоязычка. По 1 ядру и там и там - корректное условие.

Vit ★★★★★
() автор топика

У нас пока промежуточный greate success. Сделан Deflate Store (level 0), по скорости оказался примерно такой же как ZLIB. Ну и раз в 5-10 быстрее альтернативных JS имплементаций.

Вангую, что на deflate level 6 будет прорыв. Принимаю ставки :)

Vit ★★★★★
() автор топика
Ответ на: комментарий от swwwfactory

Я глядел его. Если вкратце - он мне не интересен, т.к не вижу практических применений (на js). Для zlib (а точнее, для deflate/inflate) применения есть.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

я только встречал упоминания и лестные отзывы о нем на HN.

Но zlib это классика конечно, есть кстати реализации Хаффмана, но там все дело в словарях. Но по идее можно замутить на связки клиент-сервер очень эффектную схему, если по обоим концам известны словари... И тем не менее - молодцы! Респект!

swwwfactory ★★
()
Ответ на: комментарий от swwwfactory

Можно много чего. Но у меня есть принцип - пока нет конкретных примеров, где применить на практике «прямо сейчас», код не делается.

А от zlib есть куча дополнительных лулзов - можно будет потроллить тех, кто юзает старые пакеты, а также авторов ноды на предмет поддержки мультитредовости.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

А от zlib есть куча дополнительных лулзов - можно будет потроллить тех, кто юзает старые пакеты, а также авторов ноды на предмет поддержки мультитредовости.

O, да. Законно...

swwwfactory ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.