Как стать автором
Обновить
2890.21
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

Почему Windows настолько медленнее Linux. Расползание фич

Время на прочтение8 мин
Количество просмотров59K

Время выполнения общих команд Git в Ubuntu и Windows 11 (в секундах, чем меньше — тем лучше), источник: OpenBenchmarking.org

В далёком 2013 году один из разработчиков Microsoft детально объяснил, в чём главные технические проблемы при разработке ядра Windows NT. Спустя десять лет Windows 10/11 работает на том же ядре, а многие старые проблемы так и остались нерешёнными.

Хотя в ряде задач Windows превосходит Linux, но в большинстве тестов она действительно медленнее. По словам разработчика, это отставание усугубляется, а причина «социальная». Суть в том, как организован процесс разработки, внесения изменений в ОС. Если в мире опенсорса это открытый процесс, который несёт пользу и улучшает систему, то в мире корпоративного ПО зачастую изменения вносятся по причинам эгоизма, желания продвижения по карьерной лестнице, славы и т. д. Всё это ведёт к деградации продукта.

▍ Проблемы ядра Windows NT


Дело в том, что в Microsoft отдельные группы разработки «владеют» отдельными компонентами системы, и обычно они открыто враждебны к внешним патчам. Даже если вы как разработчик компонента принимаете внешний патч, это злит вашего менеджера (из-за необходимости поддерживать этот патч и оправдывать незапланированное изменение дизайна), злит отдел тестирования (они должны убедиться, что изменение ничего не сломает, а вы только накинули им работы), а также злит менеджера проекта (из-за изменения графика разработки вследствие принятия патча). В итоге нет никаких стимулов принимать изменения, внесённые извне.


Производительность игры Starfileld под Linux и Windows 11 (FPS), источник: Computer Base

Также нет стимула и самому вносить изменения. В разработке ядра Linux, если вы улучшаете производительность обхода каталога на 5%, вас хвалят, все благодарны. В Windows даже если ваш код пройдёт через владельцев компонента и попадёт в дерево, руководству наплевать. Конечно, масштабные улучшения могут заметить наверху, и это поможет в карьере. Но это если оптимизация действительно масштабная. Что касается рядовых улучшений, они просто всех раздражают и никак не отразятся на карьере (если не сделают хуже). Через некоторое время разработчики понимают, что лучше не делать незапланированную работу.

Google и другие конкуренты постоянно переманивают самых умных и талантливых сотрудников. Происходит отток талантливых кадров. Microsoft вынуждена нанимать на их место студентов прямо из колледжа. В итоге ребята уровня SDE и SDE II поддерживают огромные системы с кучей кода. Они хотят сделать как лучше и достаточно умны, но не понимают, почему в своё время раньше были приняты те или иные решения. Не разбираются в тонкостях работы своих систем и самое главное, не хотят менять то, что уже работает. Эти юные разработчики также склонны улучшать систему, внедряя совершенно новые функции вместо того, чтобы улучшать старые. Если посмотреть на последние релизы, то Microsoft не исправляет старые функции, а добавляет новые (далее — цитата):

Новые функции гораздо больше помогают для продвижения по карьерной лестнице, чем оптимизация старых. Именно так появился PowerShell. Многие хотели улучшить cmd.exe, но не смогли.

Вот некоторые примеры, как происходит процесс разработки в Microsoft, со слов сотрудника (ещё одна цитата):

  • Поскольку именованные каналы трогать нельзя, давайте добавим %INTERNAL_NOTIFICATION_SYSTEM%! И сделаем её несовместимым практически со всеми другими именованными примитивами ядра.
  • Мы не можем показать миру %INTERNAL_NOTIFICATION_SYSTEM%, потому что не хотим заполнять бумажки. И продажи не падают из-за факта, что публично доступны только древние Win32 API из 90-х.
  • Нельзя трогать DCOM. Поэтому создаём ещё один %C#_REMOTING_FLAVOR_OF_THE_WEEK%!
  • XNA. Что тут добавить?
  • Зачем кому-то формат архива с поддержкой файлов более 2 ГБ? Это никому не нужно.
  • Давайте поддержим симлинки, но чтобы никто не мог их использовать и нас не обвинили в уязвимостях. (Отлично! Теперь мы выглядим мудрыми и ответственными!).
  • Нельзя трогать Source Depot (проприетарная система контроля версий в Microsoft — прим. пер.), поэтому давайте взломаем SDX!
  • Нельзя трогать SDX, так что давайте на четыре релиза притворимся, что переходим на TFS, но на самом деле ничего не изменим!
  • Код NTFS — ужастик викторианской эпохи, в котором используются глобальные рекурсивные блокировки и SEH для управления потоком. Давайте вместо этого напишем ReFS. (И начнём с того, что скопируем и вставим исходный код NTFS и удалим половину функций! Затем добавим контрольные суммы, потому что контрольные суммы — это же круто, и теперь с контрольными суммами мы не хуже ZFS, так ведь? И кому вообще нужны квоты?).

    Примечание: файловая система NTFS очень надёжна и хорошо протестирована, а поддержкой занимаются одни из самых талантливых и опытных разработчиков. Но это не отменяет уродства кода, хотя за уродливым кодом могут стоять хорошие и надёжные компоненты, а уродство по своей сути субъективно). То же самое можно сказать и о других основных компонентах ядра Windows NT.

Пост от разработчика Microsoft написан десять лет назад, но не потерял актуальности. Судя по всему, в процессе разработки мало что изменилось.

Врождённая неповоротливость Windows даёт о себе знать и в последнем апдейте Windows 11 24H2, который вообще не устанавливается на старые ПК, даже на такие конфигурации, куда ещё недавно Windows 11 можно было с грехом пополам поставить.



По предварительной информации, этот билд не совместим с процессорами, которые не поддерживают инструкцию POPCNT. Малоизвестная инструкция, известная как инструкция АНБ, подсчитывает количество бит в машинном слове, а в современных CPU входит в набор инструкций SSE4 (процессоры Intel и AMD начиная с 2008 и 2007 годов, соответственно). Хотя вполне возможно, что энтузиасты найдут способ обойти это ограничение.

Ранее также сообщалось, что полнодисковое шифрование BitLocker в Windows на 45% замедляет работу системного SSD. В качестве обходной меры предлагалось отключить встроенную функцию Windows (переустановить ОС с отключённым BitLocker), а вместо этого использовать аппаратное шифрование диска.

При долгой работе с ОС от Microsoft известно даже такое явление как «усталость от Windows». Давние пользователи Windows с ностальгией вспоминают времена выхода Windows XP и Windows 7, которая была лучшей ОС своего времени. К сожалению, последние версии Windows 11 не вызывают таких положительных эмоций. Например, в тестах OpenBenchmarking.org версия Windows 11 22000.51 почти по всем тестам проигрывает Windows 10 21H1, то есть новая версия работает медленнее, чем старая.


Бенчмарк DaCapo, тест Java: Tradesoap (в секундах, чем меньше — тем лучше), источник: OpenBemchmarking.org

Возможно, часть проблем с деградацией системы связаны с необходимостью поддерживать старые функции и старые версии ОС. Кодовая база растёт, количество функций постоянно увеличивается — и в результате софт замедляется быстрее, чем ускоряется железо (правило известно как закон Вирта). Это связано с непрерывным расползанием фич (feature-creep), которые стали буквально «валютой» в корпоративной разработке.

Многочисленные исследования показывают, что при выборе продукта пользователи положительно оценивают количество его функций:



И только после начала использования продукта излишняя функциональность и тормознутость системы начинает раздражать людей:



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

▍ Поддержка старых версий


Интересно, что даже самые старые версии Windows до сих пор используются в продакшне. Например, одно из крупных кадровых агентств Германии GULP Experts United недавно опубликовало вакансию системного администратора Windows 3.11.



От соискателя требуется знание Windows 3.11 и MS-DOS, желателен опыт работы в железнодорожной индустрии.

Так что легаси живёт очень долго…

▍ Как создавалось ядро Linux


Один из студенческих товарищей Линуса Торвальдса вспоминает ранние дни Linux, как всё начиналось. С исторической точки зрения в воспоминаниях Ларса Вирцениуса (Lars Wirzenius) много интересных фактов. Они дают понять, под влиянием каких концепций создавалось ядро Linux. Сообщество Open Source — это абсолютно другой мир, который кардинально отличается от корпоративной разработки.

Ларс познакомился с Линусом Торвальдсом на первом курсе в университете Хельсинки (оба говорили по-шведски, что их и сблизило), тогда же они получили доступ к серверу Unix и случайно обнаружили на нём Usenet, когда по ошибке ввели команду rn вместо rm. После службы в армии в 1990 году ребята взяли курс обучения по C и программированию Unix, что включало в себя изучение архитектуры ядра Unix. Ларс и Линус также заинтересовались и изучили устройства ядра других ОС, таких как QNX и Plan 9.


Легендарная операционная система Plan 9 первой реализовала концепцию служб через файловую систему и распределённый дизайн вычислений, где любой компьютер может использовать любые ресурсы с любого другого компьютера как свои собственные (файлы, процессы, диски, сеть, графику, клавиатуру, мышь), источник

В январе 1991 года Линус купил свой первый ПК (с продвинутым CPU 386 с 4 МБ RAM) и сутками зависал в Prince of Persia, а позже приобрёл ОС MINIX, потому что с университета привык к Unix и хотел установить на домашнем компьютере похожую систему.

Когда Линус наконец прошёл игру, он начал изучать ассемблер Intel и в качестве эксперимента реализовал программу с многозадачностью. Затем начал понемногу писать ядро, добавляя функцию за функцией. Например, однажды он случайно запустил HDD вместо модема, так что в загрузочный сектор записалась инструкция ATDT с номером университетской BBS — после этого Линус прописал в ядре права доступа к файлам. Так и шёл процесс. Постепенно появлялась и другая функциональность. Во время рождественских каникул 1991 года после сессии Линус реализовал виртуальную память, и т. д.

Ядро Linux было написано студентами под сильным влиянием Unix. В августе 1991 года Линус впервые упомянул о своём проекте в эхоконференции comp.os.minix. Первоначально система называлась Freax. В 1992 году вышел первый дистрибутив Softlanding Linux System (SLS), а также под Linux была портирована система X11, что сильно повлияло на популярность Linux.

Когда Линус программировал на рабочем ПК, его раздражала медлительность машины — и он потратил целый день, чтобы переписать на ассемблере парсер командной строки в ядре (потом его переписали обратно на С). А потом Линус несколько дней играл в Quake, выдавая это за стресс-тест управления памятью ядра.

Так или иначе, но разработчики Linux изначально ориентировались на производительность, они писали на С и ассемблере, и в общем это была цельная, мощная концепция. Наверное, в этом одно из отличий с ядром Windows NT, над которым работают тысячи программистов в корпорации Microsoft, не имея единого видения.

Весной 1994 года работа над ядром Linux была в основном закончена, так что Ларс организовал торжественную презентацию Linux 1.0 с приглашением прессы.

На презентации 30 марта 1994 года Линус Торвальдс пошутил, что коммерческая лицензия на Unix стоит так дорого, что проще написать собственную операционную систему

▍ Превосходство Linux


Превосходство Linux можно демонстрировать по-разному. Например, недавно 16-летний хакер NSG650 представил специальный Windows-драйвер BugCheck2Linux, который запускает Linux на компьютере сразу после того, как Windows зависла с синим экраном смерти (BSOD), причём перезагрузка не требуется.

Из других хороших новостей — новый драйвер /dev/ntsync для синхронизации с Windows NT, который сильно увеличит производительность Wine/Proton в режиме эмуляции Windows API.

Выигрыш в производительности сильно зависит от конкретного приложения и аппаратного обеспечения. Для некоторых игр синхронизация NT не является узким местом, так что ускорения не произойдёт. Но для других прирост FPS составляет 50−150%. В таблице приведены показатели FPS различных игр на различном оборудовании от нескольких пользователей (это Дмитрий Скворцов, FuzzyQuills, OnMars и Элизабет Фигура, автор драйвера):
Игра Текущий апстрим, FPS ntsync, FPS Улучшение
Anger Foot 69 99 43%
Call of Juarez 99,8 224,1 125%
Dirt 3 110,6 860,7 678%
Forza Horizon 5 108 160 48%
Lara Croft: Temple of Osiris 141 326 131%
Metro 2033 164,4 199,2 21%
Resident Evil 2 26 77 196%
The Crew 26 51 96%
Tiny Tina's Wonderlands 130 360 177%
Total War Saga: Troy 109 146 34%
Нужно заметить, что автор работает в компании CodeWeavers, а это главный контрибутор в кодовую базу Wine.

Сейчас *nix является самой популярной ОС в мире, работая на миллиардах устройств и занимая доминирующее положение на серверах и мобильных устройствах.


Доля веб-сайтов под разными ОС, статистика W3Tech за февраль 2024 года

Ядро Linux стало основой для ОС Android и других систем. Можно выдвигать разные предположения, почему написанная студентами система захватила мир. Но одна из причин — грамотная и лаконичная архитектура ядра, изначально ориентированного на производительность по примеру Unix, QNX и Plan 9.

Сотрудник Microsoft говорит, что у них в компании тоже есть люди, которые пытаются сделать мир лучше и оптимизировать производительность. Но они почти всегда терпят неудачу. В Microsoft нет никакой формальной или неформальной программы системного улучшения производительности. Начиная с Windows XP SP3 компания начала заботиться о безопасности, потому что она стала представлять собой экзистенциальную угрозу для бизнеса. Но низкая производительность не является такой угрозой. Этой проблеме не уделяется приоритет.

P. S. К сожалению, расползание фич, деградация производительности и дерьмофикация софта — не эксклюзивная проблема ядра Windows, а повсеместное явление.

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻
Теги:
Хабы:
Всего голосов 120: ↑85 и ↓35+81
Комментарии218

Публикации

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds