Zauważyłem, że kiedy robię ciężkie aplikacje do pisania, cały system zwalnia. Aby to przetestować dalej, uruchomiłem to, aby wykonać (stosunkowo) niski procesor i wysoką aktywność dysku:
john -incremental > file_on_SSD
To wypompowuje dziesiątki tysięcy ciągów na sekundę do pliku na moim dysku systemowym.
Gdy tak się dzieje, myszy pozostają w tyle, TTY przestają reagować, aplikacje „znikają” i ogólnie cały komputer staje się bezużyteczny. Kiedy mogę w końcu Control + C john
, system wraca do pełnej siły po kilku sekundach.
Jest to skrajny przykład, ale mam podobne problemy z nieco mniej intensywnymi czynnościami zapisu, takimi jak kopiowanie dużych plików z szybkich źródeł lub transkodowanie.
Mój główny dysk systemu operacyjnego to dość szybki dysk SSD ( OCZ Agility 60 GB) ) z EXT4. Jeśli zapisuję john
dane wyjściowe na dysku mechanicznym za pomocą EXT4, nie odczuwam takich samych spowolnień, chociaż szybkość jest znacznie wolniejsza (SSD robi ~ 42 000 słów na sekundę, mechaniczny robi 8000 w / s). Przepustowość może być istotna. Dysk mechaniczny również nie ma nic wspólnego z systemem. To tylko dane.
I używam jądra 2.6.35-2, ale zauważyłem ten problem, ponieważ dostałem ten dysk SSD, kiedy prawdopodobnie używałem .31 lub czegoś w tym czasie.
Co powoduje spowolnienie? Problem z EXT4? Problem z jądrem? Problem z dyskiem SSD? Wszystkie powyższe? Coś innego?
Jeśli uważasz, że muszę przeprowadzić dodatkowy test, po prostu zostaw komentarz mówiący, co mam zrobić, a ja dołączę wynik do pytania.
źródło
Odpowiedzi:
Od pewnego czasu jest to znany problem. Używanie FS zestrojonego SSD, takiego jak Btrfs, może pomóc, ale może nie.
Ostatecznie jest to błąd w systemach planowania / zarządzania pamięcią IO. Ostatnio pojawiły się poprawki, które mają rozwiązać ten problem. Zobacz Naprawiono: problem z reakcją pulpitu w systemie Linux?
Te łaty mogą ostatecznie przedostać się do jądra głównego, ale na razie prawdopodobnie będziesz musiał skompilować własne jądro, jeśli chcesz rozwiązać ten problem.
źródło
Jest kilka rzeczy, które możesz sprawdzić, aby spróbować poprawić wydajność SSD pod Linuksem.
Ustaw punkt montowania na „noatime”. Dodatkowe czasy aktualizacji aktualizacji aktywności są zazwyczaj marnowane w większości przypadków użycia. Zwłaszcza w przypadku ciągłego pompowania pojedynczych linii do pliku wymuszasz wiele aktualizacji systemu plików dla każdego dostępu.
Sprawdź windę. Domyślna winda dla większości dystrybucji jest skonfigurowana dla wirujących talerzy o swobodnym dostępie. Dyski SSD nie wymagają dodatkowej logiki, więc ustawienie windy na noop może poprawić wydajność, umożliwiając sprzętowi zarządzanie zapisami.
Buforowanie zapisu i zapisu. Jest to nieco bardziej ezoteryczne, ale możesz sprawdzić metodę buforowania używaną
hdparm
dla urządzenia. Buforowanie z zapisem może mieć pozytywny wpływ na wydajność SSD w porównaniu z zapisem.źródło
Buforowanie plików jest prawdopodobnie nieprawidłowo dostrojone do obciążenia. Niestety jądro Linuksa jest na tyle głupie, aby nie poradzić sobie z tym automatycznie, a ustawienia domyślne są dość złe, jeśli masz dużo pamięci RAM i wystarczająco powolne urządzenia blokowe. Zobacz https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ w celu uzyskania szczegółowych informacji.
Proponuję spróbować zmodyfikować
/etc/sysctl.conf
jedno z nichw celu znacznego zmniejszenia obciążenia pamięci RAM spowodowanego buforowaniem zapisu, aby umożliwić jądrze lepszą obsługę innych zadań. Spowoduje to wymianę lepszych opóźnień na niższą przepustowość.
Inną możliwością jest zwiększenie buforowania, ale jeśli proces ciągle zapisuje nowe dane, przez cały czas napotykasz bardzo duże opóźnienia, jeśli pamięć podręczna się zapełni. Jeśli chcesz spróbować, możesz zrobić coś takiego
Pamiętaj, że
*_ratio
ustawienia odnoszą się do procentu dostępnej pamięci RAM. Jeśli chcesz mieć lepszą kontrolę, użyj*_bytes
ustawień. Osobiście używam następującej konfiguracji dla mojej stacji roboczej:Ogranicza to pamięć podręczną zapisu w tle do 50 MB i wymusza zapis synchroniczny, jeśli w pamięci podręcznej znajduje się 200 MB.
źródło