A Sheaves a Linux kernel memóriakezelőjének per‑CPU, tömbalapú gyorsítótárazási rétege. Tavalyi bevezetésük óta rengeteg munka folyt rajtuk a kernel-ban, és még több optimalizálás érkezik a Linux 7.4-be.
Hao Li így magyarázta a memóriakezelésben történt változtatást, amely a barnból tölti újra az előre feltöltött sheafeket:
„Jelenleg, amikor a prefill API egy nem teljes sheafet tölt újra, az objektumokat csak a partial slabekből veszi, soha nem a barnben lévő teljes sheafekből. Emiatt ha a barn teljes listája egyszer megtelik, úgy is marad.
A kfree_rcu()-val felszabadított objektumoknál minden egyes RCU sheafet ki kell üríteni a slabekbe, mert a barn teljes listáján nincs hely.
Ennek megoldására először engedjük, hogy a sheaf a barnből töltődjön újra, és vezessünk be egy partial sheafet a barnben, amely a megmaradt objektumokat tárolja.
Partial sheafre csak a prefill útvonalnak van szüksége. Az általános allokációs útvonal (__pcs_replace_empty_main()) egy üres sheafet cserél ki egy barnből származó teljesre, így nem maradnak maradék objektumok. A prefill útvonal viszont olyan sheafet tölt újra, amely nem feltétlenül üres, ezért ha a barnből veszünk ki objektumokat, általában maradnak vissza, ezeket tartja a partial sheaf. A refill_sheaf() csak a partial slabekből vesz objektumokat, a partial sheafet nem érinti.
A sheaf úgy töltődik újra, hogy először a partial sheafből másolunk bele objektumokat, majd ha még mindig nem teljes, egy barnből kivett teljes sheafből folytatjuk. Az a sheaf, amelyből másoltunk, a barnben marad partial sheafként, ha még vannak benne objektumok, vagy az üres listára kerül, ha kiürült. A feltöltött sheafet soha nem cseréljük le.
A nyereség két irányból jön: minden egyes, a barnből kivett teljes sheaf helyet csinál a barn teljes listáján egy jövőbeli RCU sheafnek, és a barnből történő újratöltés olcsóbb, mint a partial slabekből való újratöltés a list_lock alatt.”
A javítócsomaggal végzett mérések összességében 24%-os fejlesztést mutatnak a will-it-scale mmap1 teszten. A barn_get teljesítménye +22 904 539,81%-kal nőtt, a barn_put +21 422 544,07%-kal, a többi mérőszám pedig jellemzően kétjegyű százalékos javulást hozott az alapértékhez képest.
Elég komoly hatás 81 sor új kódtól. A javítócsomag a Linux 7.4 október végére tervezett merge ablakába kerül be.

