A Google fejlesztője, Eric Biggers az utóbbi években számos nagy hatású teljesítményjavítást végzett a Linux kernel kriptográfiai alrendszerén, különösen az Intel és AMD processzorokhoz igazított utasításkészletek, például az AVX-512 kiaknázásával. Most egy új, kimondottan a CRC32C ellenőrzőösszeg számításának gyorsítását célzó javítássorozattal jelentkezett, amely a modern processzorokon akár számottevő teljesítménynyereséget is hozhat. A szombaton közzétett patch-sorozat célja, hogy a 512 bájtnál hosszabb adatblokkok esetén optimalizálja a CRC32C algoritmust azáltal, hogy lecseréli a jelenleg használt crc32c_x86_3way() függvényt a crc32_lsb_vpclmul_avx512() megoldásra, amennyiben az adott CPU támogatja a VPCLMULQDQ utasítást, és megfelelő AVX-512 végrehajtással rendelkezik.
Tartalomjegyzék

A cél az új generációs CPU-k hatékonyabb kihasználása
Biggers kiemelte, hogy az újabb CPU-kban, mint az AMD Zen 4-től kezdődően és az Intel Sapphire Rapids generációtól felfelé, a VPCLMULQDQ teljesítménye már meghaladja az eddig használt módszerekét, így a generikus 32 bites CRC számításra tervezett crc32_lsb_vpclmul_avx512() implementáció gyorsabb lehet, mint az x86_64-re szabott utasításokat használó változat. Bár a megoldás nem használja az architektúraspecifikus dedikált CRC utasításokat, a sebességjavulás a gyakorlatban mégis jelentős.

A fejlesztő szerint ez különösen érvényes az AMD processzorokra, amelyeknél gyakorlatilag nincs ZMM regiszterekhez kapcsolódó bemelegedési idő, míg az Intel rendszerek esetében ez még mindig akár 2000 ns lehet, szemben az AMD alatti tipikus 60 ns-sel. Ennek ellenére a legtöbb esetben még az Intel processzorokon is gyorsulás figyelhető meg, hacsak nem kis számú, „hideg” regiszterekkel végzett, rövid üzenetű számításokról van szó.
További kernel optimalizálások a jövőben várhatók
Biggers megjegyezte, hogy az AMD Zen 3, Zen 4 és Zen 5 mikroarchitektúrák még további lehetőséget kínálnának arra, hogy a crc32q és a VPCLMULQDQ utasítások váltakozó alkalmazásával még tovább javuljon a CRC32C végrehajtás hatékonysága. Ezek az architektúrák azonban annyira eltérően működnek, hogy külön optimalizálásra lenne szükség mindegyikhez – ezt a fejlesztő a jövőbeni munka részének tekinti. A mostani javítássorozat elsősorban az implementációk kiválasztásának logikáját módosítja, a már meglévő algoritmusok felhasználásával. A cél az, hogy a kernel automatikusan a legmegfelelőbb megoldást válassza az adott CPU jellemzői alapján, különösen az AVX-512 képességek figyelembevételével. Ha a változtatás bekerül a Linux fővonalába, az minden bizonnyal tovább javítja majd a modern, AVX-512-kompatibilis x86_64 rendszerek adatfeldolgozási hatékonyságát.
