Re: Optymalizacja WindowsXP pod katem 4GB RAMu

Autor: Radosław Sokół <Radoslaw.Sokol_at_polsl.pl>
Data: Wed 31 Jan 2007 - 08:33:25 MET
Message-ID: <eppgo1$a7u$1@polsl.pl>
Content-Type: text/plain; charset=ISO-8859-2; format=flowed

Wiktor S. napisał(a):
> Możesz rozwinąć? Gdzie konkretnie i kiedy coś jest swapowane w inne
> miejsce.

Windows NT - jak jego daleki przodek VMS i jak wszystkie w
zasadzie nowoczesne systemy operacyjne - ma u podstaw działania
mechanizm odwzorowywania plików w pamięci wirtualnej. Przestrzeń
adresowa procesu jest podzielona na sekcje (segmenty (*) ), a te
-- na strony. Każda z sekcji odpowiada jakiemuś plikowi i jest
jego odwzorowaniem (anonimowe strony pamięci są odwzorowywane
z pliku wymiany -- nawet, jeżeli ten nie istnieje lub jest zbyt
mały).

W efekcie każda operacja na pliku jest operacją stronicowania,
a każda strona pamięci składająca się na plik podlega wymiataniu.
Na przykład jeżeli uruchomisz EXEca, to sam plik EXE, zależne
pliki DLL, pliki z danymi oraz obszar stosu i sterty zostaną
odwzorowane w pamięci. Strony pamięci z plików będą ładowane
(jak ze swapa!) w miarę zapotrzebowania. Teraz jeżeli np. pamięci
zacznie być mało, strony pamięci składające się na EXEca dzy DLLe
mogą zostać usunięte z RAMu (bez zapisywania gdziekolwiek).
Gdy będą potrzebne znów -- zostaną załadowane (znów jak ze swapa!)
z odpowiadających im plików.

Jeszcze bliżej idei działania swapa są zwykłe pliki z danymi.
Gdy bowiem jest taka potrzeba, system zapisuje do nich zmienione
dane obecne w pamięci i usuwa te strony z pamięci. Gdy strona
znów będzie potrzebna, zostanie załadowana na nowo. A więc o
ile w przypadku plików wykonywalnych dane są tylko swapowane
*do* pamięci (page-in), w przypadku plików danych następuje
swapowanie w obu kierunkach (page-in i page-out).

Jak już pisałem, plik wymiany obsługuje jedynie anonimowe strony
pamięci, a więc strony, za którymi nie stoi żaden plik fizyczny.
Są to stos, sterta i dynamicznie alokowane bloki pamięci. Plik
wymiany stanowi zatem nie tak duży element systemu pamięci
wirtualnej i nie decydujące źródło swapowania -- poza sytuacjami,
gdy używane oprogramowanie alokuje naprawdę dużo danych.

Przyspieszenie wynikające z usunięcia pliku wymiany wynika
tak naprawdę z ograniczenia ruchów głowicy, system bowiem
zamiast swapowania do kilku plików *i* do pliku wymiany
musi swapować tylko do kilki plików. Podobny zysk wydajnoś-
ciowy daje np. przeniesienie swapa na osobny dysk twardy,
bez konieczności rezygnowania z niego.

Co do przyczyn nadmiernego swapowania, wymienić należy dwie
najważniejsze: zbyt duże rozmiary programów i nieumiejętność
programistów. Pierwsze nie wymaga komentarza. Drugie skutkuje:

  a) brakiem informacji zwrotnej dla systemu jak duży powinien
     być zestaw roboczy aplikacji, co ograniczyłoby swapowanie
     dużych programów,

  b) otwieranie plików z niewłaściwymi flagami, co powoduje
     rozrost bufora cache odwzorowującego pliki czytane
     w sposób klasyczny i w efekcie wymusza wyswapowywanie
     innych plików odwzorowanych w pamięci oraz stron anoni-
     mowych.

Polecam dodatkowo moje artykuły na powyższe tematy:

  http://www.grush.one.pl/article.php?id=ram
  http://www.grush.one.pl/article.php?id=gigabajty
  http://www.grush.one.pl/article.php?id=fileflags

PS. Fajny post mi wyszedł, chyba wrzucę go po drobnych zmianach
     na bloga ;)

(*) Segmenty w sensie logicznym. Mechanizm segmentacji procesora,
     nawet jeżeli obecny, jest blokowany i nie jest używany.

-- 
|""""""""""""""""""""""""""""""""""""""""""""""""""""""""""|
| Radosław Sokół  |  http://www.grush.one.pl/              |
|                 |  Administrator, Politechnika Śląska    |
\................... Microsoft MVP ......................../
Received on Wed Jan 31 08:35:07 2007

To archiwum zostało wygenerowane przez hypermail 2.1.8 : Wed 31 Jan 2007 - 08:42:05 MET