Pamięć wirtualna a duże IO dysku
: 03 wrz 2011, 12:44
Mam laptopa z 2 GB pamięci. Swapa ustawiłem sobie 1GB żebym mógł od czasu do czasu korzystać z hibernacji. Od którejś tam wersji Ubuntu zauważyłem irytującą rzecz. Niektóre programy np. serwer dźwięku Jack podczas uruchamiania powoduje spore zajęcie swapa, pomimo że jeszcze jest ponad 1 GB wolnego RAMu. W rzeczywistości ten 1 GB wcale nie jest wolny bo tam jest cache, ale powinien być on zwalniany, jeśli jakiś program chce więcej pamięci. W momencie uruchamiania Jack'a następowało duże zużycie IO dysku do tego stopnia, że nie można było nic zrobić, mysz skakała, a inne programy przestawały odpowiadać. Z czasem to ustawało, ale to nie jest normalne więc mnie to irytuje. Postanowiłem zmniejszyć do zera parametr vm.swappiness w sysctl.conf. Nic to nie dało. Wyłączyłem montowania swapa w fstab całkowicie i zauważyłem, że bez pamięci wirtualnej komputer zachowuje się lepiej. Szybciej się uruchamia (co jest dziwne bo podczas startu i zaraz po uruchomieniu z włączonym swapem wykazywał jego zerowe użycie). Ale zauważyłem również że częściej dioda dysku mryga częściej niż przy włączonym swapie.
Postanowiłem sprawdzić co się stanie gdy się skończy pamięć. Uruchamiam po kolei Operę, Gimpa, Chrome, Firefox itd. W momencie gdy pozostało mi w pamięci mniej niż 500MB komputer zaczął się zachowywać jakby miał pamięć wirtualną, chociaż polecenia takie jak htop, vmstat nie wykazywały istnienie swapa. Za pomocą iotop sprawdzałem jakie programy używają odczyt i zapis dysku. Gdy pozostawało mniej niż 500 MB RAMu wszystkie uruchomione programy po kolei próbowały zapisywać i odczytywać coś na dysku, tak jak w pamięci wirtualnej (choć w tym przypadku jej nie było). Odczyt plasował się na wysokości 4 lub 5 MB/s a zapis ok. 300 kB/s. Największym obciążeniem dla dysku był proces kswapd0 odpowiadający za pamięć wirtualną.
I teraz moje pytanie: co robi kswapd0 i dlaczego miesza na dysku, skoro nie ma pamięci wirtualnej???
Postanowiłem sprawdzić co się stanie gdy się skończy pamięć. Uruchamiam po kolei Operę, Gimpa, Chrome, Firefox itd. W momencie gdy pozostało mi w pamięci mniej niż 500MB komputer zaczął się zachowywać jakby miał pamięć wirtualną, chociaż polecenia takie jak htop, vmstat nie wykazywały istnienie swapa. Za pomocą iotop sprawdzałem jakie programy używają odczyt i zapis dysku. Gdy pozostawało mniej niż 500 MB RAMu wszystkie uruchomione programy po kolei próbowały zapisywać i odczytywać coś na dysku, tak jak w pamięci wirtualnej (choć w tym przypadku jej nie było). Odczyt plasował się na wysokości 4 lub 5 MB/s a zapis ok. 300 kB/s. Największym obciążeniem dla dysku był proces kswapd0 odpowiadający za pamięć wirtualną.
I teraz moje pytanie: co robi kswapd0 i dlaczego miesza na dysku, skoro nie ma pamięci wirtualnej???