Linux 6.13 tulevase tuuma haru koostisse on pakutud patch, mis sisaldab ümber tehtud CRC32C kontrollsummade leidmise algoritmi. CRC32C koodi maht on vähenenud umbes 10 korda (4546 baitilt 418 baidini). Retpoline kaitse mittetoimimise korral on uusi teostuse kasutamisega saavutatud jõudluse tõus, mis ulatub 11,8% -ni AMD Zen 2 protsessoritel, 6,4% -ni Intel Emerald Rapids'il ja 4,8% -ni Intel Haswell'il. Kui retpoline on sisse lülitatud, on jõudluse tõus märgatavam ja ulatub 66,8% -ni Intel Emerald Rapids'i süsteemides, 35,0% -ni Intel Haswell'il ja 29,5% -ni AMD Zen 2-l. retpoline lubatud | 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 keelatud: | 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 algne variant sisaldas 128 lahtist tsüklit (unroll), mis viis üsna suure koodini. Kuna kaasaegsed protsessorid väliste käskude täitmise toetusega (out of order) suudavad käske paralleelselt täita, osutus selline tsüklite hüppamise käsu optimeerimine liigseks ja viis vaid liialt suure koodini. Uues variandis on 128 korduse asemel jäetud sisse vaid 4, mis ei vähendanud mitte ainult koodi mahtu, vaid kiirendas ka toimingute täitmist.
Allikas: opennet.ru
