Добавить в корзинуПозвонить
Найти в Дзене
Проект OpenNet

Улучшенная версия CRC32C: уменьшение кода и повышение производительности в Linux 6.13

В рамках подготовки к будущему выпуску ядра Linux 6.13 разработчики представили обновлённую версию алгоритма 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. Показатели прироста при включённой retpoline: При отключённой retpoline:
Эффективность также улучшается, хотя прирост менее значительный, особенно при обработке крупных данных. Изначальный алгоритм CRC32C был реализован через развёртку цикла на 128 итераций, что приводило к значительному увеличению объёма кода. С учётом возможнос

В рамках подготовки к будущему выпуску ядра Linux 6.13 разработчики представили обновлённую версию алгоритма 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.

Показатели прироста при включённой retpoline:

  • Intel Haswell: до 35,0% на 512-битных блоках, снижение до 4,4% на 4096-битных
  • Intel Emerald Rapids: до 66,8% на 512-битных блоках, 5,4% на больших объёмах данных
  • AMD Zen 2: максимум 29,5% при 512-битных блоках, с тенденцией к снижению на больших объёмах

При отключённой retpoline:
Эффективность также улучшается, хотя прирост менее значительный, особенно при обработке крупных данных.

Изначальный алгоритм CRC32C был реализован через развёртку цикла на 128 итераций, что приводило к значительному увеличению объёма кода. С учётом возможностей современных процессоров выполнять команды параллельно, большая развёртка не оправдывала себя и создавала излишнюю нагрузку. В обновлённой версии количество итераций сокращено до четырёх, что обеспечило как экономию памяти, так и заметное ускорение выполнения задач.

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