Velké stránky paměti
Transparent Hugepages: measuring the performance impact
Praktická demonstrace toho jaký dopad může mít povolení velkých stránek paměti.
Mapování z virtuální na fyzickou adresu je spravováno na úrovni stránek. Ty na x86 můžou mít několik velikostí: 4 kB, 2 MB nebo 1 GB. Operační systém udržuje toto mapování v paměti jako stromy (přesněji řečeno trie). Aby procesor nemusel při každém přístupu do paměti procházet tímto stromem, který je taky v paměti (nebo v lepším případě v cache), obsahuje malou cache nazývanou TLB (translation lookaside buffer) pro mapování několika naposledy použitých stránek. To vede ke stavu, že pokud chci číst ze stránky, která je v TLB, je to rychlé, ale pokud chci číst z té, která tam není, OS musí provést page table walk, najít příslušné mapování, přeložit adresu a to celou operaci značně zpomalí. Velké stránky byly zavedeny z pochopitelných důvodů: Je jimi možné pokrýt větší část virtuální paměti a snížit tak počet drahých TLB miss.
Odkazovaný článek uvádí případ Java aplikace s 200 GB haldou, na které povolení velkých stránek vede k nezanedbatelnému zrychlení. Program před změnou trávil 10% taktů jen překladem virtuální adresy na fyzickou a page table walk namísto užitečné práce.
Relevantní čtení:
- L1I cache a iTLB – když ani spekulace nepomůžou
- JVM Anatomy Park #2: Transparent Huge Pages (ze série JVM Anatomy Park)
- How Bad Can 1GB Pages Be? (někdy můžou velké stránky uškodit, všechno závisí na kontextu)