Линус Торвальдс выпустил обновление ядра Linux всего из 21 строки, которое улучшает результаты теста Intel «Per thread ops». Патч Торвальдса основан на более раннем патче разработчика Джоша Пуамбёфа (Josh Poimboeuf) из Red Hat, американской компании, специализирующейся на производстве программного обеспечения для ОС Linux. Исходный патч Пуамбёфа был представлен в конце октября 2024 года, он был ещё меньше — содержал всего 10 строк кода — и ускорял прохождение «Per thread ops» на 2,6 %.
Тестирование «Per thread ops» показывает количество операций, которые могут быть выполнены в одном потоке. Прирост в Вышло небольшое обновление ядра Linux, улучшающее производительность на 2,6 % на первый взгляд кажется небольшим и может быть не замечен обычным пользователем, но для высоконагруженных систем, производящих параллельные вычисления, это значительное ускорение. Ещё более редки события, когда такой прирост производительности можно получить, внеся настолько незначительные изменения.
Создатель Linux Линус Торвальдс дополнил предложенный Пуамбёфом патч и внёс оптимизированный код в ядро версии 6.12. Цель обновления состоит в том, чтобы избежать использования barrier_nospec() в 64-битной функции copy_from_user(). Этот патч объединён с Linux Git и станет частью релиза ядра Linux 6.12-rc6 3 ноября перед выпуском стабильной версии Linux 6.12 во второй половине ноября.
В конце октября также были предложены обновления для будущей ветки ядра Linux 6.13: патч будет содержать переработанную реализацию алгоритма нахождения контрольной суммы CRC32C. В результате оптимизации двоичный код CRC32C стал на 91 % меньше (418 байт против 4546 байт исходного кода), что приводит к росту производительности. С новым алгоритмом при настройках по умолчанию (активной защите от атак, использующих уязвимости Spectre) ускорение достигает 29,5 % на CPU AMD Zen 2, 35 % на Intel Haswell и 66,8 % на Intel Emerald Rapids. При отключении защиты retpoline увеличение производительности составляет 11,8 % на AMD Zen 2, 6,4 % на Intel Emerald Rapids и 4,8 % на Intel Haswell.
Исходная версия алгоритма CRC32C состояла из 128 развёрнутых циклов, что означает довольно объёмный код. Так как современные CPU поддерживают выполнение операций не по порядку (out of order) и могут выполнять более одной инструкции одновременно, подобное исполнение команд перехода в циклах стало необязательным и избыточным и приводило лишь к чрезмерному разрастанию кода. Вместо 128 циклов в оптимизированном варианте было оставлено только 4, что не только сильно сократило объём кода, но и увеличило производительность криптографии CRC32C.
Читайте в блоге: