Same program faster on Linux than Windows — why?
The solution to this was found in the question Executable runs faster on Wine than Windows — why? Glibc’s floor() is probably implemented in terms of system libraries.
I have a very small C++ program (
100 lines) for a physics simulation. I have compiled it with gcc 4.6.1 on both Ubuntu Oneiric and Windows XP on the same computer. I used precisely the same command line options (same makefile).
Strangely, on Ubuntu, the program finishes much faster than on Windows (
7.5 s vs 13.5 s). At this point I thought it’s a compiler difference (despite using the same version).
But even more strangely, if I run the Windows executable under wine, it’s still faster than on Windows (I get 11 s «real» and 7.7 s «user» time — and this includes wine startup.)
I’m confused. Surely if the same code is run on the same CPU, there shouldn’t be a difference in the timing.
What can be the reason for this? What could I be doing wrong?
The program does minimal I/O (outputs a single line), and only uses a fixed-length vector from the STL (i.e. no system libraries should be involved). On Ubuntu I used the default gcc and on Windows the Nuwen distribution. I verified that the CPU usage is close to zero when doing the benchmarking (I closed most programs). On Linux I used time for timing. On Windows I used timethis.exe .
UPDATE
I did some more precise timings, comparing the running time for different inputs (run-time must be proportional to the input) of the gcc and msvc-compiled programs on Windows XP, Wine and Linux. All numbers are in seconds and are the minimum of at least 3 runs.
On Windows I used timethis.exe (wall time), on Linux and Wine I used time (CPU time). (timethis.exe is broken on Wine) I made sure no other programs were using the CPU and disabled the virus scanner.
The command line options to gcc were -march=pentium-m -Wall -O3 -fno-exceptions -fno-rtti (i.e. exceptions were disabled).
What we see from this data:
the difference is not due to process startup time, as run-times are proportional to the input
Windows vs Linux. Сравниваем производительность систем при помощи бенчмарков
Сегодня мы протестируем операционные системы Windows 10 и Arch Linux c графической оболочкой Gnome 3 на одинаковом железе в играх и бенчмарках и посмотрим, что из этого выйдет. Все системы полностью оригинальные. Тесты проходили по 3 прогона.
Тестовый пк
- Процессор: Intel Pentium G4560 2/4 3.5 Гигагерц
- Видеокарта: Nvidia Geforce 1050 2Gb
- Оперативная память: 2×4 2400
- Материнская плата: H110M-DGS R3.0 Bios 7.50
Windows 10, версия 2004 (сборка ОС 19041.450)
Arch Linux
Сравнение систем по потреблению при старте
Windows — 115-146 процессов при пустом старте, 1.5 Гигабайта потребления, система и драйверы обновлены.
Archlinux — 56 процессов при пустом старте, 500 мегабайт потребления, система и драйверы обновлены.
Для более честного сравнения для системы на основе Linux было выбрано тяжёлое графическое окружение (DE) Gnome 3, известное своими костылями. Но не стоит забывать о существовании оболочек, потребляющих менее 100 мегабайт оперативной памяти. Оптимизаций никаких не производилось кроме установки для Linux lqx ядра и фоновых служб zramswap и anonicy.
Средства записи и мониторинга
Для записи игр и тестов в Windows использовалась программа Bandicam с быстрым кодеком nvenc и контейнером mp4, что минимально (5-10%) влияют на потери, а такжеMSI Autoberner для мониторинга загруженности ресурсов.
Для записи игр и тестов в Linux использовалась программа SimpleScreenRecorder c аналогичным кодеком и контейнером для минимизации влияния средства записи и разницы, а также Mangohud для мониторинга загруженности ресурсов.
Программы простые и не требуют глубокого понимания или настройки. Игры выбирались с учётом встроенного бенчмарка и являются лицензиями.
Выводы делаю, напрямую сравнивая результаты бенчмарков на минимальных и максимальных параметрах графики с выводом графика времени кадра.
Синтетический тест
Синтетический тест Geekbench 5 оценивает производительность ЦП с работой в разных задачах — сжатие, распаковка, обработка, серф и прочее веселье.
Windows 10: 936 баллов в однопоточном и 2 138 баллов в мультипоточном режимах. Результаты теста по ссылке на сайте geekbench.com
Linux: 951 балл в однопоточном и 2 148 баллов в мультипоточном режимах. Результаты теста по ссылке на сайте geekbench.com
Никакого открытия для себя я не сделал. Давно известно, что планировщик работы с центральным процессором в системах на базе Linux реализован лучше.
Тестирование в играх
Открывает наше игровое противостояние прибежище всех раков и причина попадания в армию — Dota 2.
Тест для меня не показывает что-то новое. Отчётливо видно излишнее потребление оперативной и видеопамяти фоновыми процессами системы Windows. Преимущество Linux составляет от 5 до 20 кадров в зависимости от сцены, что нельзя свести на погрешность теста.
Тестирование на максимальных настройках успешно показывает, что разницы в FPS нет, но система Windows больше просаживается во время ожесточённых моментов до 22 FPS, а потребление оперативной памяти значительно возросло. Archlinux обеспечил плавность и играбельность в любых моментах.
Вторым героем теста становится улица моего детства — Counter-Strike: Source.
Сравнение не совсем честное, потому что тестирование идет на уровне разных графических API. Встроенный графический бенчмарк показывает преимущество DX9 над OpenGL, но на самой карте разница ровно противоположная — OpenGL рисует больше кадров.
Максимальные настройки графики показывают уверенное преимущество DX9 в плане максимального FPS, но странные подёргивания и ослепляющая желтизна на карте вызывают недоумение.
Третьей игрой для теста станет симулятор подростковых фантазий — Tomb Raider 2013.
Максимальные и минимальные настройки, а также сравнение с DXVK.
Интересные выводы можно сделать по данному ролику. Например, что OpenGL почти мёртв в плане соревновательной части с DX9-12, где идёт упор на максимальный FPS, а не удобство программирования или платформы.
Часть теста с упором в GPU подтверждает предыдущие тесты о преимуществе Dx11 в сравнении с OpenGL и проигрыше Windows-платформы по сравнению с Linux в плане работы с процессором. На это указывает преимущество в минимальном FPS и проигрыш в максимальном.
C OpenGL разобрались. А что, если противопоставить две Windows-версии игры, но одна из них будет запущена под Linux через обёртку DXVK? Результаты почти одинаковы! Мне удалось запустить Windows-версию игры под Linux. Она показывает схожую игровую производительность, а потребляет мой ПК при этом меньше ресурсов.
P.S. Опять этот странный эффект желтизны у DX — проблема DX?
Выводы
Современный Archlinux — это система, потребляющая меньше ресурсов ПК по сравнению с нынешней Windows. Это способствует лучшей производительности в играх с поддержкой Vulkan и равную производительность в проектах, запускающихся через обёртку DXVK. Если вы хотите считать, что ваш ПК — это только ваш ПК, не париться по поводу вечной слежки и всегда иметь всё самое свежее, то Linux — это ваш бро.
P.S. Автор знает и понимает, какие проблемы существуют c античитами, какие способы запуска игр и проблемы есть. Также автор напоминает, что тест производился без использования оптимизаторов и прочих ускоряющих вещей, что даёт надежду на ещё больший выигрыш в Linux.