В ядро Linux 6.13 планируется включить обновление алгоритма для вычисления контрольной суммы файла CRC32C, значительно сокращающее объём кода и ускоряющее выполнение операций. Предложенная оптимизация особенно важна для серверных многопоточных систем.
Обновление предложил инженер Google Эрик Биггерс, ранее работавший над некоторыми перспективными оптимизациями производительности для криптографического кода в ядре Linux, такими как более быстрое шифрование AES-GCM для процессоров Intel и AMD, ускорение шифрования файлов в режиме AES-XTS с современными процессорами и многими другими оптимизациями на протяжении многих лет. В последнее время его работа посвящена повышению производительности криптографии CRC32C для процессоров x86/x86_64.
Биггерс внёс исправления для устранения таблицы переходов и чрезмерной развёртки, обнаруженных в ассемблерном коде CRC32C, который использовался на современных процессорах Intel и AMD. Он обосновал внесённые изменения в своей ветке на git.kernel.org:
crc32c-pcl-intel-asm_64.S имеет полностью развёрнутый цикл от 1 по 127 итераций и использует таблицу переходов для перехода в правильное место. Эта оптимизация ошибочна, так как она раздувает размер двоичного кода и вводит косвенный вызов. Процессоры x86_64 могут хорошо предсказывать циклы, поэтому вместо этого можно просто использовать цикл. Инструкции по учёту циклов могут конкурировать с инструкциями crc для ALU, но это легко обойти путём развёртывания меньшего цикла, например, уменьшив его в 4 раза.
Поэтому сверните цикл и внесите соответствующие изменения в код.
Это уменьшает размер двоичного кода crc_pclmul() с 4546 байт до 418 байт, что составляет сокращение на 91 %. В целом это также делает код быстрее, с некоторыми значительными улучшениями, наблюдаемыми при включении retpoline.
В состоянии по умолчанию, когда retpoline, защита от атак класса Spectre, включена, для процессоров Intel и AMD наблюдается прирост пропускной способности. Из трёх протестированных процессоров максимальное увеличение на 66 % показал Intel Emerald Rapids, прирост пропускной способности на Intel Haswell достиг 35 %, а AMD Zen 2 показал + 29 %. При отключении защиты retpoline производительность также увеличивается, но не настолько: на Intel Emerald Rapids до 7,5 %, на Intel Haswell до 4,8 %, на AMD Zen 2 до 11,8 %.
Хотите, чтобы ваши сайты работали безотказно? Серверы от компании AdminVPS — это современные, мощные машины для вашего бизнеса. На свои серверы мы ставим только NVMe диски, чтобы ваши проекты работали очень быстро. Оцените сами доступность цен и гибкость конфигурации.
Разработчики Linux надеются, что этот новый код будет полностью готов к выходу ветки Linux v6.13 и производительность криптографического ядра CRC32C для современных процессоров Intel и AMD станет выше уже в ближайшее время.
Читайте в блоге: