U Linux kernelu optimizirana je implementacija algoritma CRC32C.

Kako bi se uključio u buduću granu Linux jezgre 6.13, predložen je zakrpa s revidiranom implementacijom algoritma za izračunavanje kontrolnog zbroja CRC32C. Kod implementacije CRC32C smanjen je otprilike 10 puta (sa 4546 na 418 bajtova). Kada je zaštita retpoline isključena od Spectre napada, porast performansi korištenjem nove implementacije doseže 11,8% na AMD Zen 2 procesorima, 6,4% — Intel Emerald Rapids i 4,8% — Intel Haswell. Kada je retpoline uključen, porast performansi je očitiji i doseže 66,8% na sustavima s Intel Emerald Rapids procesorima, 35,0% — Intel Haswell i 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%

Izvorna verzija CRC32C uključivala je 128 razrađenih ciklusa (unroll), što je dovodilo do prilično velikog koda. Budući da moderni procesori s podrškom za izvršenje instrukcija izvan reda (out of order) mogu izvoditi naredbe paralelno, takva optimizacija naredbi skakanja u ciklusima postala je suvišna i dovela je samo do prekomjernog koda. Umjesto 128 iteracija, u novoj verziji ostavljeno je samo 4, što nije samo značajno smanjilo volumen koda, nego je i ubrzalo izvođenje operacije.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster