U Linux kernelu je optimizovana implementacija CRC32C algoritma

Za vključitev v prihodnjo različico jedra Linux 6.13 je predlagan popravek s prenovljeno implementacijo algoritma za izračun CRC32C. Koda za implementacijo CRC32C je zmanjšana približno 10-krat (s 4546 na 418 bajtov). Pri izključeni zaščiti retpoline pred napadi vrste Spectre je povečanje zmogljivosti z novo implementacijo dosega 11,8 % na procesorjih AMD Zen 2, 6,4 % na Intel Emerald Rapids in 4,8 % na Intel Haswell. Pri vključeni zaščiti retpoline je povečanje zmogljivosti bolj opazno in dosega 66,8 % na sistemih s procesorji Intel Emerald Rapids, 35,0 % na Intel Haswell in 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%

Prvotna različica CRC32C je vključila 128 odvijajočih se zank (unroll), kar je pripeljalo do precej obsežne kode. Ker sodobni procesorji s podporo za izvrševanje ukazov zunaj zaporedja (out of order) lahko izvajajo ukaze hkrati, je bila takšna optimizacija prehodov v zankah odveč in je vodila le do pretirano velike kode. Namesto 128 ponovitev je v novi različici ostalo le 4, kar je ne le znatno skrajšalo količino kode, temveč tudi pospešilo izvajanje operacije.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster