В ядрото на Linux е оптимизирана реализация на алгоритъма CRC32C

За включване в бъдещия клон на ядрото 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. retpoline enabled | 512 | 833 | 1024 | 2000 | 3173 | 4096 | ———————+——-+——-+——-+—— +——-+——-+ Intel Haswell | 35.0% | 20.7% | 17.8% | 9.7% | -0.2% | 4.4% | Intel Emerald Rapids | 66.8% | 45.2% | 36.3% | 19.3% | 0.0% | 5.4% | AMD Zen 2 | 29.5% | 17.2% | 13.5% | 8.6% | -0.5% | 2.8% | retpoline disabled: | 512 | 833 | 1024 | 2000 | 3173 | 4096 | ———————+——-+——-+——-+—— +——-+——-+ Intel Haswell | 3.3% | 4.8% | 4.5% | 0.9% | -2.9% | 0.3% | Intel Emerald Rapids | 7.5% | 6.4% | 5.2% | 2.3% | -0.0% | 0.6% | AMD Zen 2 | 11.8% | 1.4% | 0.2% | 1.3% | -0.9% | -0.2% |

Първоначалната версия на CRC32C включваше 128 развъртани цикли (unroll), което водеше до доста голям код. Тъй като съвременните процесори с поддръжка на извършване на команди не по ред (out of order) могат да изпълняват команди паралелно, подобна оптимизация на преходните команди в цикли се оказа излишна и водеше само до прекомерно голям код. Вместо 128 итерации в новата версия бяха оставени само 4, което не само значително намали обема на кода, но и ускори изпълнението на операцията.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster