Właśnie przeczytałem tutaj :
- wirtualna przestrzeń adresowa do 128 TB na proces (zamiast 2GiB)
- Obsługa pamięci fizycznej 64TiB zamiast 4GiB (lub 64GiB z rozszerzeniem PAE)
Dlaczego? Mam na myśli, że obsługa pamięci fizycznej jest ograniczona przez jądro lub obecny sprzęt?
Dlaczego miałbyś potrzebować dwa razy więcej pamięci wirtualnej niż pamięć fizyczna, którą faktycznie możesz rozwiązać?
debian
linux-kernel
virtual-memory
gsi-frank
źródło
źródło
Odpowiedzi:
Te ograniczenia nie pochodzą z Debiana ani z Linuksa, lecz ze sprzętu. Różne architektury (procesor i magistrala pamięci) mają różne ograniczenia.
W obecnych procesorach x86-64 PC MMU pozwala na 48 bitów wirtualnej przestrzeni adresowej . Oznacza to, że przestrzeń adresowa jest ograniczona do 256 TB. Jeden bit odróżnia adresy jądra od adresów użytkowników, co pozostawia 128 TB na przestrzeń adresową procesu.
W obecnych procesorach x86-64 adresy fizyczne mogą wykorzystywać do 48 bitów , co oznacza, że możesz mieć do 256 TB. Limit stopniowo wzrastał od czasu wprowadzenia architektury amd64 (z 40 bitów, jeśli dobrze pamiętam). Każdy bit przestrzeni adresowej kosztuje pewną logikę okablowania i dekodowania (co sprawia, że procesor jest droższy, wolniejszy i cieplejszy), więc producenci sprzętu mają motywację do zmniejszenia jego rozmiaru.
Linux zezwala jedynie na zwiększenie adresów fizycznych do 2 ^ 46 (więc możesz mieć tylko do 64 TB), ponieważ pozwala na całkowite odwzorowanie pamięci fizycznej w przestrzeni jądra. Pamiętaj, że jest 48 bitów przestrzeni adresowej; jeden bit dla jądra / użytkownika pozostawia 47 bitów dla przestrzeni adresowej jądra. Połowa z nich co najwyżej odnosi się bezpośrednio do pamięci fizycznej, a druga połowa pozwala jądru mapować wszystko, czego potrzebuje. (Linux może poradzić sobie z pamięcią fizyczną, której nie można jednocześnie zmapować w całości, ale wprowadza to dodatkową złożoność, więc jest to wykonywane tylko na platformach, gdzie jest to wymagane, takich jak x86-32 z PAE i armv7 z LPAE.)
Przydatne jest, aby pamięć wirtualna była większa niż pamięć fizyczna z kilku powodów:
źródło
Nie wiem dlaczego, ale mogę wymyślić siedem powodów, dla których warto byłoby obsługiwać dwa razy więcej przestrzeni adresowej niż pamięć fizyczna.
źródło
Są to ograniczenia sprzętowe. Obecny sprzęt x86_64 / amd64 pozwala na 48-bitowe adresy wirtualne i różne rozmiary (w zależności od implementacji - np. Moja stacja robocza obsługuje tylko 36 bitów) adresów fizycznych. Jądro Linux dzieli wirtualną przestrzeń adresową na pół (wykorzystując połowę dla jądra, połowę dla przestrzeni użytkownika - tak jak robi to na x86).
Otrzymujesz:
2⁴⁸ bajtów ÷ 2 = 2⁴⁷ bajtów = 128 TiB
Rozmiar adresu fizycznego jest często mniejszy, ponieważ w rzeczywistości jest fizyczny. Zajmuje piny / pady, tranzystory, połączenia itp. Na / w CPU i linie śledzenia na płycie. Prawdopodobnie tak samo w chipsetach. Nie ma sensu obsługiwać pamięci RAM, która jest nie do pomyślenia w całym okresie użytkowania rdzenia procesora lub gniazda - wszystko to kosztuje. (Nawet z 32 gniazdami DIMM i 64GiB DIMM w każdym, nadal masz tylko 2 TB. Nawet jeśli pojemność DIMM podwaja się w ciągu roku, jesteśmy o 5 lat od 64 TB.
Jak zauważa Peter Cordes , ludzie podłączają teraz nieulotną pamięć masową, taką jak 3D XPoint, do szyny pamięci, co sprawia, że możliwe jest wyczerpanie się przestrzeni adresowej. Nowsze procesory rozszerzyły fizyczną przestrzeń adresową do 48 bitów; możliwe, że wiki Debiana po prostu nie została zaktualizowana.
źródło
clflush
iclflushopt
instrukcji.