LINUX.ORG.RU

Быстрый linux vs медленный windows

 , , ,


0

5

Дано - одна и та же программа для трейдеров с постройкой графиков и чтением мега-гигабайтных xml и бинарных файлов с данными.

Чтение файлов под linux через boost::serialization происходит в 10 раз быстрее, чем под виндой.

Сортировка таблиц, отрисовка графиков через QCustomPlot также работает значительно быстрее.

Я точных замеров не проводил, т.к. винда в данном случае вторичная платформа и заказчику пока что насрать на оптимизацию. Но все же интересно, с чем это связано? Я грешу на хреновую оптимизацию msvc, но может есть другие причины? Медленная ФС в случае сериализации, например


агрессивное кеширование файловой системы?

dimon555 ★★★★★
()

У меня, если что, таже тема, только с явой. Под вендой создание директорий/файлов, да и вообще любая работа с фс заметно тормозит. Видимо, особенность вендовозки.

unt1tled ★★★★
()

Где-то в соседнем топике в отношении производительности веб-серверов под вендой это обсуждалось, лет 5 назад. Я не найду. Типа, это by design.

anonymous
()

если линукс такой быстрый, то почему я тогда жду старта хрома порядка 10-15 сек на сильной машине? Примерно столько же, сколько на слабой вендовой? Загадка века.

И кстати, трейдерских платформ под линукс раз два и обчелся. Если бы там действительно был бы большой выигрыш, соотношение было бы другим, учитывая то, что половина трейдеров сами программисты, и им насрать на какой системе работать и на дружественность UI

filequest
()
Ответ на: комментарий от anonymous

производительность веб-серверов вообще от скорости обработки данных не зависит, максимальная производительность достигается асинхронностью и масштабированием.

filequest
()

Может те кто делал виндовс версию буста сделал её плохо ? Недостаточно разбирается в апи виндовс ?

stalkerhouse
()
Ответ на: комментарий от filequest

Клиенты трейдерских систем (собственно, те, кто оплачивает банкет) отнюдь не программисты. Да и как мне кажется виндовс программистов тупо больше и их проще найти.

anonymous
()

с чем это связано?

Наиболее вероятным вариантом мне видится тормознутость NTFS, которой уже лет 16

IceWindDale
()

Я грешу на хреновую оптимизацию msvc

Зря. MSVC обычно всегда предпочтительнее MinGW-w64, под MS Windows он быстрее.

А вот с сетью/сокетами/файловыми IO у винды какие-то вечные затупы.

EXL ★★★★★
()

Зато под виндой mmap быстрый :) Юзай его, не помню как он там называется, но в том же бусте должна быть абстракция.

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

Если бы только ФС - но ведь работа с графиками/таблицами также быстрее на порядок. А это чистой воды оперативная память + проц. Это как объяснить? Только компилятор, по идее

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

Зря. MSVC обычно всегда предпочтительнее MinGW-w64, под MS Windows он быстрее.

Хмм, а каким образом? От того, на винде или линуксе выполняется программа, набор инструкций процессора не меняется. Или по-вашему MSVC генерирует лучший машинный код?

SZT ★★★★★
()

vtune натрави или что-то похожее

dimon555 ★★★★★
()

Просто сначала все показывается у АНБ, а потом уже у тебя на экране, чтобы они успели проверить, нет ли там терроризма.

impowski
()
Ответ на: комментарий от SZT

набор инструкций процессора не меняется

Набор этих инструкций генерирует компилятор, не так ли? И наборы инструкций, которые генерируют MSVC/ICC/GCC (MinGW)/Clang->LLVM различаются, ибо оптимизируют они по-разному.

Или по-вашему MSVC генерирует лучший машинный код?

Лучший/худший, у меня нет общего суждения на этот счёт. Я предпочитаю использовать на Windows именно MinGW, хотя бы потому, что бинари собранные им будут тупо работать на всех MS Windows, начиная с 98.

Но когда-то видел бенчмарки, которые показывали, что бинари под MS Windows лучше всего собирать именно студийным компилятором.

Так поступают те же открытые кросс-платформенные проекты: Qt Creator (под винду распространяется только MSVC-версия), qBittorent, FileZilla и иже с ними.

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

но ведь работа с графиками/таблицами также быстрее на порядок.

Лично я у себя не вижу особых различий в работе GUI-программ с графиками, как на GNU/Linux, так и на MS Windows.

Только компилятор, по идее

Да что ты. А про всякие там прослойки в виде Xorg и GDM (в винде) ты забыл? Может быть эти графики рисуются с помощью OpenGL, поддержка которого в винде всегда была хреновенькой?

Ты можешь приложение это показать?

Ну и да, если ты думаешь что это компилятор — собери приложение в винде тем же MinGW'ом. Не думаю, что оно станет отзывчивее, скорее наоборот.

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

Зря. MSVC обычно всегда предпочтительнее MinGW-w64, под MS Windows он быстрее.

Я лично msvc не пользуюсь, но им пользуются некоторые мои коллеги и они иногда делают сравнительные тесты для чего-либо на разных компиляторах (последние версии gcc, clang и msvc). Так msvc обычно показывает худшие результаты для офтопика, иногда с ним происходят вообще невообразимые странности. Ещё стоит учесть лаг в реализации новых стандартов, т.е. clang и gcc быстрее их осиливают.

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

будут тупо работать на всех

ну это уж как соберёшь, как соберёшь

только MSVC-версия

ну это спорный вопрос, можно хоть с cygwin взять бинари

anonymous
()

Первое, о чём подумал: на типичной винде присутствует антивирус. Отсюда логично ожидать тормозов с ФС, а хитрые, может, и память постоянно мучают.

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

внутри boost и Qt вызов апи платформы

anonymous
()
Ответ на: комментарий от filequest

10-15 сек на сильной машине

у меня стартует примерно за секунду

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

если линукс такой быстрый, то почему я тогда жду старта хрома порядка 10-15 сек на сильной машине? Примерно столько же, сколько на слабой вендовой? Загадка века.

Видимо у всех та же фигня. Вероятно пытается отослать твои координаты и ищет gps которого может и нет.

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

Набор этих инструкций генерирует компилятор, не так ли? И наборы инструкций, которые генерируют MSVC/ICC/GCC (MinGW)/Clang->LLVM различаются, ибо оптимизируют они по-разному.

Оптимизируют-то по разному, не спорю. Меня тут смутила фраза «под MS Windows он быстрее». Будто бы вы намекаете что использование GCC в среде Windows может каким-то образом дать код более медленный, чем при использовании того же GCC в среде Linux (это кстати действительно может быть так, например это может быть связано с плюсовым рантаймом, например mingw-gcc попросту не поддерживает механизм обработки исключений SEH (см. https://gcc.gnu.org/wiki/WindowsGCCImprovements ).

Если же имеется ввиду что сам MSVC генерирует лучший машинный код, чем это делает GCC(безотносительно целевой ОС), то тут я категорически не соглашусь с этим бездоказательным утверждением. Я например делал небольшие сравнения сгенерированного машинного кода (для Си, не для плюсов) и каких-либо существенных преимуществ у студии в плане оптимизаций я не нашел.

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 2)
Ответ на: комментарий от EXL

А вот с сетью/сокетами/файловыми IO у винды какие-то вечные затупы.

Потому-что эта область закакана левыми велосипедами и костылями чуть более чем полностью

Reedych ★☆
()

Компилируй кросс-компиляцией с помощью mingw.

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

лучше всего под вантузом работает icc. он даёт иногда раза в полтора прибавку по скорости работы. причём даже на AMD.
что касается GCC, то давно, когда я имела дела с вантузом, GCC иногда давал лучшую производительность, если дело не касалось дёрганья вендозных API. и msvc сильно отставал в поддержке стандартов и имел суровые баги в стандартной библиотеке.

Iron_Bug ★★★★★
()

скорее всего, тормозит NTFS (если венда на ней стоит). сделай профайлинг - увидишь, где тормоза. так гадать достаточно сложно. код буста обычно оптимизируют, но не всегда достаточно хорошо. если файлы большие, лучше использовать маппинг.

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

А хороший ведь совет - профайлинг на всё ответит!

Наверняка в винде есть нечто вроде perf, а в Linux-е оно показывает внутрянки ядра где что выполнялось...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Reedych

Я помню как некоторые виндузятники кичились что виндоядро гибридное, типа ФС там вне режима ядра - может это и есть причина тормозявости? Типа FUSE, может я не так понял их.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от EXL

Приложение показать не могу, проприетарщина.

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

ncuxer
() автор топика

Чтение файлов под linux через boost::serialization происходит в 10 раз быстрее, чем под виндой.

ну не в 10 положим. у меня процентов 10-15 разница была.

Во-первых если пользуешь буст, то пользуй последний. недавно сильно оптимизировали как раз венду (были там какие-то старые грабли)

Во-Вторых венда, которая неСервер сама по себе странно ведет себя на IOCP. с серверами таких проблем нет. + у нее менее точный таймер, если где-то ты его пользуешь.

В-третьих Qt после нокии вообще отвратно работает.

anonymous
()
Ответ на: комментарий от Iron_Bug

Я тоже думаю, что проблема с ntfs. Попробую прогнать профайлер рали интереса, когда в слудующий раз буду работать под виндой.

Что за маппинг? Хотя код уже написан и вряд ли будем переписывать ради винды.

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

Десериализация под линуксом работает около 0.5 секунды, глаз даже не успевает увидеть задержку. Под виндой - 17 секунд (sic)

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

*станиславский.жпг*

давай минимальный пример. у меня crc считалось и на той и на другой системе (файлы от пустых до DVD образов). разница - 15% максимум. И это не «на глаз».

anonymous
()
Ответ на: комментарий от ncuxer

Еще может быть файловая система сильно фрагментирована. Тогда на дисковых операциях будут большие тормоза. Насколько знаю, NTFS тоже фрагментируется как и FAT. Обе нужно в ручную дефрагментировать с помощью специальных утилит.

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

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

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

Iron_Bug ★★★★★
()
  1. Как ни странно, но действительно, огромное количество Open Source библиотек, программ, и просто кода - банально не умеют работать с Windows, и в частности с Windows API, из-за чего грешат костылями, граблями и тормозами.
  2. Антивирус. В 10й винде(по крайней мере, в версиях для дома и офиса), да и по-моему уже в 8й, он встроенный, и неотключаемый(можно только на время выключать). В серверной версии этот пункт снимается.
  3. NTFS медленнее ext*(потому как более фичастая, на самом деле). Но тут, опять же, смотри пункт 1. Т.е. вместо того чтобы принять факт, и использовать ФС только для сторажда того чего надо, и желательно в одном месте, т.н. «кроссплатформенные» программы плодят файлы направо и налево.
  4. «Юникс-вей» в виде форка процессов направо и налево на Windows работает плохо, т.к. там процесс это совершенно другая вещь, достаточно тяжеловесная. Это опять к пункту 1.

Само же исполнения кода скомпилированного MSVC++ местами даже лучше G++, особенно в области исключений и RAII(потому как SEH, VEH итд.).

Исключительно виндовые программы(офис, или там, написанные в том числе мной, на .NET например) у меня как правило, работают достаточно хорошо и быстро, не в пример десктопным программам для линукса.

Но даже с самыми кривыми программами, разницы в 30 раз нет нигде.

lovesan ★★
()
Последнее исправление: lovesan (всего исправлений: 1)
Ответ на: комментарий от ncuxer

Что за маппинг?

обычный маппинг файла в память. чтобы не тащить целиком большой файл. конечно, если ты знаешь специфику работы со своими файлами.
а тормозить ещё могут стандартные контейнеры. в последней студии запилили по умолчанию проверки валидности обращений (https://msdn.microsoft.com/en-us/library/aa985965.aspx) и их лучше явно отключать. и ещё поставить NDEBUG, чтобы точно убить всякую лишнюю хрень. конечно, если вы этой хренью сами не пользуетесь.

Iron_Bug ★★★★★
()

Какая винда? Попробуйте 8 или 10: ходят слухи, что сеть, таймеры и IO там поддопилили. У меня такая же проблема с моим поделием на GLib/GTK: на xp и семерке тормозит. Проверить на восьмерке/десятке никак руки не дойдут.

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

тупой вопрос: в MSVC Realease выбран? или Debug? у них разница в скорости порядки.

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

А ещё на конкретной машине может быть изношенный винт с битыми секторами. А ещё может быть много чего.

IceWindDale
()
Ответ на: комментарий от SZT

для Си, не для плюсов

Так MS же забила на C в студии. Видимо поэтому и криво.

Меня больше вымораживают сообщения об ошибках в MSVS. Другое дело clang.

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

Исключительно виндовые программы(офис, или там, написанные в том числе мной, на .NET например) у меня как правило, работают достаточно хорошо и быстро, не в пример десктопным программам для линукса.

А что там с работой десктопных программ для линукса в встроенной в виндовс убунте? Там они вроде линуксовые системные вызовы реализовали, так что должно все четко работать

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

Так MS же забила на C в студии. Видимо поэтому и криво.

Всмысле забила? Не думаю что у них там какие-то оптимизации есть для C, которые для C++ не используются. Да в любом случае можно сишный код плюсами компилить после некоторых косметических исправлений

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

Да пусть забила, я к тому веду, что можно компилировать (почти) сишный код плюсовым компилятором, используя общее подмножество плюсов и Си. Не использовать С++ классы, шаблоны, всякие там constexpr, auto, new и прочее

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