Přesně, moje první (emocionální) reakce je spíš WTF :) Tak nějak na první dobrou mi přijde, že pokud do alokace a operace s pamětí ještě přidám další mechanismus, co řeší NUMA lokalitu, vzdálenost a vynutím prokládání na úrovni OS, které s sebou pak nutně nese další na adresace na modulech, tak by to mělo být pomalejší.
Za normálních okolností má LPDDR4 dva kanály (čtyři u větších modulů) a to prokládání si řeší paměťový řadič na SoC, transparentně pro OS. Ale nestudoval jsem, jak přesně je to udělané na BCM2721 resp. implementované na RPi5.
I kdybych předpokládal, že předběžné testy sedí, tak je mi stejně trochu divné, že když fikne spojitý paměťový prostor na čtvrtky a přidá další vrstvu prokládání, tak má téměř pětinu výkonu navíc.
Možná pro nějaký ucelenější přehled a srovnání by bylo zajímavé ozkoušet se stejnou verzí jádra jiná SoC (BCM na RPi 4, nějaké Exynosy třeba) a zahýbat i s dalšími věcmi, např. vypnout ASLR, otestovat větší množství procesů, workerů, co budou přistupovat do paměti atp.
A pak mě ještě napadá samozřejmě další aspekt. Pokud je to zrychlení vázané na vynucené prokládání.. nebylo by mnohem logičtější tedy tohle řešit u obsluhy konkrétního paměťového řadiče z jádra a směřovat případné optimalizace tam, než do toho tahat NUMU? Která má logicky spousty dalších jiných konsekvencí i na úrovni aplikací.
Na RPi4 to zrychluje multi-core o asi 8%, single-core se zlepšilo asi jen o 1.5%. Na RPi5 mi nové jádro tuhne, dělám něco blbě.