Dlaczego w architekturze x86 jest mniej bitów dla wirtualnej przestrzeni adresowej niż fizycznej?

11

Czytałem ten artykuł na temat komputerów 64-bitowych i wspomina:

Na przykład architektura AMD64 od 2011 roku dopuszczała 52 bity dla pamięci fizycznej i 48 bitów dla pamięci wirtualnej

Sądzę, że rozsądniej byłoby pozwolić na więcej pamięci wirtualnej niż pamięci fizycznej, więc dlaczego tak naprawdę jest odwrotnie?

Dodatkowe pytanie: co to znaczy „pozwolić” na 52 lub 48 bitów w architekturze 64-bitowej? Do czego służą inne bity?

dougvk
źródło
W przypadku x86 nieużywane bity VA muszą być rozszerzeniem znaku MSbit VA. (ARM AArch64 zapewnia opcję pozwalającą na ignorowanie 8 MSbitów przez sprzęt, dzięki czemu można je wygodnie wykorzystać w tagach. Procesor Azul Systems Vega - część urządzenia Java - zapewnił 16 bitów VA do użycia w tagach.) W tabeli stron zarezerwowane bity PA muszą wynosić zero (przede wszystkim po to, aby oprogramowanie nie próbowało ich użyć i nie zepsuło kompatybilności z późniejszym sprzętem).
Paul A. Clayton

Odpowiedzi:

11

Oto zdjęcie tabeli stron AMD64 (z AMD Architecture Programmer's Guide, Vol. 2, Rev 3.23, 2013, page 132).

Tabela stron Longmode AMD64

„Naturalny” rozmiar strony w architekturze AMD64 wynosi 2 12 = 4096 bajtów. (Istnieją tryby, w których możesz mieć 2 21 = 2 MB stron, ale na razie je zignorujemy).

Każdy wpis w tablicy strony (PTE) (lub, w zależności od poziomu zwanego PDE, PDPE lub PML4E), ma 64 bity = 2 3 bajty. Na stronie jest 2 9 wpisów. Zatem 4 poziomy tabeli stron dają 4x9 + 12 = 48 bitów adresu wirtualnego na proces. Spacerowanie po stronie stron jest kosztowne, więc nie zwiększą się do 5 lub 6 poziomów, chyba że / dopóki nie będzie popytu ze strony konsumentów.

Nie jestem pewien, dlaczego zdecydowali się na 52-bitowy limit adresu fizycznego. W przyszłości można to rozszerzyć do 63 bitów. Przy cenach z października 2013 r. (Około 1 USD / gigabit dla układów 4 Gb / s) zbudowanie pamięci 2 52 bajtów kosztowałoby ponad 32 000 000,00 USD , więc upłynie trochę czasu, zanim pojawi się jakiekolwiek znaczące zapotrzebowanie na zwiększenie limitu adresu fizycznego. Istnieje wiele powodów, dla których chcesz zachować adresy fizyczne tak małe, jak to możliwe: na przykład tagi TLB i pamięci podręcznej muszą przechowywać adresy fizyczne.

Niekoniecznie wstecz jest, że jest więcej pamięci fizycznej niż wirtualnej. Pamięć wirtualna jest na proces, podczas gdy pamięć fizyczna jest współdzielona przez wszystkie procesy. Tak więc serwer z 48-bitowymi adresami wirtualnymi i 2 52 bajtami pamięci może obsługiwać 16 jednoczesnych procesów i nadal gwarantuje, że nie będzie potrzeby wymiany.

Wędrująca logika
źródło
Warto zauważyć, że architekci komputerów nauczyli się wymagać, aby górne bity były używane przez sprzęt, zwykle przez rozszerzenie znaku, aby pasowały do ​​powszechnego użycia adresów ujemnych w systemie operacyjnym („Do czego służą inne bity?”). Ponadto, przy buforowaniu wpisów do katalogu Ln, 5-poziomowa tabela nie musi być w pełni chodzona przez większość czasu. Bity PTE 52:62 są zarezerwowane dla oprogramowania, więc nie można ich używać do adresów fizycznych bez naruszenia kompatybilności, ograniczając strony 4KiB do 52 bitów PA. Również Linus Torvalds słynie z gniewu przeciwko PAE (VA> PA wydaje się upraszczać „tradycyjny” projekt systemu operacyjnego).
Paul A. Clayton
„W przyszłości można to rozszerzyć do 63 bitów”. Cóż, nie, nie bez zmiany struktury tabeli stron. W tej chwili bity od 52 do 62 PxE są zarezerwowane do użytku w systemie operacyjnym. I systemy operacyjne ich używają (Windows używa tego pola do „działającego indeksu listy zestawów”), więc architekci procesorów nie mogą rozszerzać na nie pola PFN. Oczywiście w przyszłości byłoby możliwe posiadanie opcji podobnej do PAE, która zmieniłaby strukturę PT tak, aby pozwolić na więcej bitów PFN, ale byłaby to znacząca zmiana architektoniczna.
Jamie Hanrahan,
3

Kilka punktów do rozważenia, fizyczna pamięć RAM jest droga. Pewnie 16 GB jest tańsze teraz, gdy 4 GB było zaledwie kilka lat temu, ale 2 ^ 64 (16 eksabajtów) śmiesznie duże.

Tak więc rozszerzenia AMD x86 dla x64 „pozwoliły” do 2 ^ 52 poprzez ograniczenie rejestrów . Robi to dwie rzeczy, obniża koszt procesorów i poprawia wydajność. Więcej niewykorzystanych rejestrów oznacza, że ​​jest dużo pustej przestrzeni, którą należy wziąć pod uwagę podczas operacji.

A jeśli nie jesteś matematykiem ... Różnica między trzema rozmiarami jest ogromna! Nie jestem guru matematyki, ale po przecinku 52 bity to około 0,02% z 64 bitów. 48 bitów to 6% z 52. (ktoś sprawdza moją matematykę?)

Jeśli chodzi o to, dlaczego AMD zezwoliło na więcej fizycznej pamięci RAM niż na wirtualną, artykuł stwierdza, że ​​dzieje się tak, ponieważ AMD myślało o serwerach. Serwery potrzebują dużej ilości fizycznej pamięci RAM. Wirtualna pamięć RAM jest zbyt wolna, aby obsługiwać przeciętne aplikacje serwerowe dla setek lub tysięcy pracowników.

Moje własne myśli: Opuściliśmy czas, kiedy pamięć RAM była niewielka, a dyski twarde musiały obsługiwać pamięć RAM. Cena pamięci RAM spadła do punktu, w którym przeciętna osoba może włożyć więcej niż wystarczającą ilość pamięci RAM. Weź typowe aplikacje, takie jak Office, który wymaga 1-2 GB pamięci RAM. Mój komputer 7 lat temu mógł sobie z tym poradzić. Chociaż przy prędkości odczytu i zapisu na dysk, mam nadzieję, że nigdy nie będę musiał pobierać pliku 7 GB z pamięci wirtualnej (używając starej filozofii PM * 2.5).

Mogę również założyć, że AMD chciało zostawić miejsce dla rejestrów, które używają fizycznych rejestrów RAM, takich jak RAM na zintegrowanych GPU.

Austin T French
źródło