GNU/Linux >> Znalost Linux >  >> Linux

jak se určuje velikost stránky ve virtuálním adresovém prostoru?

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 a CONFIG_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.


Linux
  1. Jak seřadit výstup Du podle velikosti?

  2. Kolik swapového prostoru přidat pro Oracle Database v Linuxu

  3. Jak přenosný je mmap?

  1. malloc vrací paměť nebo virtuální adresový prostor

  2. Jak získat přístup k fyzickým adresám z uživatelského prostoru v Linuxu?

  3. Jak přidělit paměť, která je zarovnána podle velikosti stránky?

  1. Jak zkontrolovat místo na disku v Linuxu

  2. Jak nainstalovat RHEL 8 na virtuální počítač

  3. Jak velká velikost je potřeba při kompilaci linuxového jádra?