Jádro Linux obsahuje optimalizovanou implementaci algoritmu CRC32C.

Pro zařazení do budoucí verze jádra Linux 6.13 byl navržen patch s přepracovanou implementací algoritmu pro výpočet kontrolního součtu CRC32C. Kód implementace CRC32C byl zmenšen přibližně 10krát (z 4546 na 418 bajtů). Při vypnuté ochraně retpoline proti útokům třídy Spectre dosahuje zlepšení výkonu při použití nové implementace 11,8 % na procesorech AMD Zen 2, 6,4 % na Intel Emerald Rapids a 4,8 % na Intel Haswell. Při zapnutém retpoline je zlepšení výkonu výraznější a dosahuje 66,8 % na systémech s procesory Intel Emerald Rapids, 35,0 % na Intel Haswell a 29,5 % na 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%

Původní verze CRC32C zahrnovala 128 rozvinutých cyklů (unroll), což vedlo k poměrně velkému kódu. Jelikož moderní procesory s podporou vykonávání instrukcí mimo pořadí (out of order) mohou vykonávat příkazy paralelně, taková optimalizace příkazových skoků v cyklech se ukázala jako nadbytečná a vedla pouze k příliš velkému kódu. Místo 128 iterací bylo v nové verzi ponecháno pouze 4, což nejen výrazně zkrátilo objem kódu, ale také urychlilo provádění operace.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster