Výchozí velikost stránky systému můžete zjistit dotazem na jeho konfiguraci pomocí getconf
příkaz:
$ getconf PAGE_SIZE
4096
nebo
$ getconf PAGESIZE
4096
POZNÁMKA: Výše uvedené jednotky jsou obvykle v bytech, takže 4096 odpovídá 4096 bytům nebo 4 kB.
Toto je pevně zapojené ve zdrojovém kódu linuxového jádra zde:
Příklad
$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#ifdef __ASSEMBLY__
#define PAGE_SIZE (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK (~(PAGE_SIZE-1))
Jak vám řazení dává 4096?
Když posouváte bity, provádíte binární násobení 2. Takže ve skutečnosti dochází k posunu bitů doleva (1 << PAGE_SHIFT
) provádí násobení 2^12 =4096.
$ echo "2^12" | bc
4096
Hardware (konkrétně MMU, který je součástí CPU) určuje, jaké velikosti stránek jsou možné. Neexistuje žádný vztah k velikosti registru procesoru a pouze nepřímý vztah k velikosti adresního prostoru (v tom, že MMU určuje obojí).
Téměř všechny architektury podporují velikost stránky 4 kB. Některé architektury podporují větší stránky (a některé také menší stránky), ale 4kB je velmi rozšířená výchozí hodnota.
Linux podporuje dvě velikosti stránek:
- Stránky normální velikosti, o kterých se domnívám, že mají standardně 4 kB na všech architekturách, i když některé architektury umožňují jiné hodnoty, např. 16 kB na ARM64 nebo 8 kB, 16 kB nebo 64 kB na IA64. Ty odpovídají nejhlubší úrovni deskriptorů na MMU (což Linux nazývá PTE).
- Obrovské stránky, pokud jsou kompilovány (
CONFIG_HUGETLB_PAGE
aCONFIG_HUGETLBFS
také pro většinu použití). To odpovídá druhé nejhlubší úrovni deskriptorů MMU (což Linux nazývá PMD) (nebo to alespoň obvykle dělá, nevím, jestli to platí na všech architekturách).
Velikost stránky je kompromisem mezi využitím paměti, využitím paměti a rychlostí.
- Větší velikost stránky znamená více odpadu, když je stránka částečně využívána, takže systému dojde dříve paměť.
- Hlubší úroveň deskriptoru MMU znamená více paměti jádra pro tabulky stránek.
- Hlubší úroveň deskriptoru MMU znamená více času stráveného procházením tabulky stránek.
Přínosy větších velikostí stránek jsou pro většinu aplikací nepatrné, zatímco náklady jsou značné. To je důvod, proč většina systémů používá pouze stránky normální velikosti.
Na (normální) velikost stránky ve vašem systému se můžete dotázat pomocí getconf
nástroj nebo funkce C sysconf
.
$ getconf PAGE_SIZE
4096
Použití velkých stránek vyžaduje připojení hugetlbfs
souborový systém a mmap
ping soubory tam.