En implementering av memchr-funktionen har föreslagits för Linux-kärnan, som går upp till 4 gånger snabbare

En uppsättning patchar med en optimerad implementering av memchr()-funktionen, som används för att söka efter en symbol i en array, har föreslagits för inkludering i Linux-kärnan. Till skillnad från den gamla versionen, som använde byte-för-byte-jämförelse, är den föreslagna implementeringen byggd med hänsyn till full användning av 64- och 32-bitars CPU-register. Istället för byte utförs jämförelsen med hjälp av maskinord, vilket gör att minst 4 byte kan jämföras åt gången.

Vid sökning i stora strängar visade sig det nya alternativet vara cirka 4 gånger snabbare än det gamla (till exempel för strängar på 1000 tecken). För små strängar är effektiviteten i den nya implementeringen inte så betydande, men är fortfarande högre jämfört med den ursprungliga versionen. I Linux-kärnan når storleken på strängar som bearbetas i memchr() 512 byte. Prestandavinsten för strängar på 512 byte, i en situation där det sökta tecknet är i slutet av strängen, är 20 %.

Att testa 5.18-kärnan med det nya alternativet "memchr()" för 32-bitars och 64-bitars arkitekturer avslöjade inga problem. Den totala prestandavinsten för kärndelsystem vid användning av den optimerade versionen av "memchr()" har ännu inte utvärderats, och inte heller har genomförbarheten att ersätta implementeringen analyserats (i kärnkoden förekommer anrop till memchr()-funktionen 129 gånger , inklusive i koden för drivrutiner och filsystem).

Källa: opennet.ru

Lägg en kommentar