Представлен патч для новой версии ядра Linux 6.13 со значительной оптимизацией реализации алгоритма нахождения контрольной суммы CRC32C. Исходный код реализации CRC32C уменьшен примерно в 10 раз (с 4546 до 418 байт).
В состав будущей ветки ядра Linux 6.13 предложен патч с переработанной реализацией алгоритма нахождения контрольной суммы CRC32C. Код реализации CRC32C уменьшен примерно в 10 раз (с 4546 до 418 байт). При выключенной защите retpoline от атак класса Spectre прирост производительности при использовании новой реализации достигает 11.8% на процессорах AMD Zen 2, 6.4% - Intel Emerald Rapids и 4.8% Intel Haswell. При включении retpoline прирост производительности более заметен и достигает 66.8% на системах с процессорами Intel Emerald Rapids, 35.0% - Intel Haswell и 29.5% - AMD Zen 2.
Изначальный вариант CRC32C включал 128 развёрнутых циклов (unroll), что приводило к довольно большому коду. Так как современные процессоры c поддержкой выполнения инструкций не по порядку (out of order) могут выполнять команды параллельно, подобная оптимизация команд перехода в циклах получилась избыточной и приводила лишь к чрезмерно большому коду. Вместо 128 итераций в новом варианте было оставлено только 4, что не только сильно сократило объем кода, но и ускорило выполнение операции.
Мир Линукса
#новости
Post #27
3.39K

- 👍 8