Um Teil des zukĂŒnftigen Kernel-Zweigs von Linux 6.13 zu werden, wurde ein Patch mit einer ĂŒberarbeiteten Implementierung des CRC32C-Checksumme-Algorithmus vorgeschlagen. Der Code fĂŒr die CRC32C-Implementierung wurde um etwa das Zehnfache verkleinert (von 4546 auf 418 Byte). Bei deaktiviertem Retpoline-Schutz gegen Spectre-Angriffe betrĂ€gt der Leistungszuwachs bei Verwendung der neuen Implementierung 11,8 % auf AMD Zen 2-Prozessoren, 6,4 % auf Intel Emerald Rapids und 4,8 % auf Intel Haswell. Mit aktivem Retpoline wird der Leistungszuwachs deutlicher und erreicht 66,8 % auf Systemen mit Intel Emerald Rapids-Prozessoren, 35,0 % auf Intel Haswell und 29,5 % auf AMD Zen 2. retpoline aktiviert | 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 deaktiviert: | 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 %
Die ursprĂŒngliche Version von CRC32C umfasste 128 entrollte Schleifen (unroll), was zu einem ziemlich groĂen Code fĂŒhrte. Da moderne Prozessoren Mit UnterstĂŒtzung fĂŒr die AusfĂŒhrung von Befehlen nicht in der Reihenfolge (out of order) können Befehle parallel ausgefĂŒhrt werden. Eine solche Optimierung von Sprungbefehlen in Schleifen erwies sich als ĂŒberflĂŒssig und fĂŒhrte nur zu ĂŒbermĂ€Ăig umfangreichem Code. Anstelle von 128 Iterationen wurden im neuen Ansatz nur 4 beibehalten, was nicht nur das Codevolumen erheblich reduzierte, sondern auch die AusfĂŒhrung der Operation beschleunigte.
Quelle: opennet.ru
