Czy istnieje sposób, aby poinformować jądro Linuksa, aby używało tylko określonego procentu pamięci dla bufora pamięci podręcznej? Wiem, że /proc/sys/vm/drop_caches
można go użyć do tymczasowego wyczyszczenia pamięci podręcznej, ale czy jest jakieś stałe ustawienie, które zapobiega powiększeniu pamięci do ponad 50% pamięci głównej?
Powodem, dla którego chcę to zrobić, jest to, że mam serwer z systemem Ceph OSD, który stale obsługuje dane z dysku i w ciągu kilku godzin potrafi zużyć całą pamięć fizyczną jako bufor bufora. Jednocześnie muszę uruchomić aplikacje, które przydzielą dużą ilość (kilka 10 GB) pamięci fizycznej. Wbrew powszechnemu przekonaniu (patrz rada na prawie wszystkie pytania dotyczące bufora pamięci podręcznej), automatyczne zwolnienie pamięci przez usunięcie czystych wpisów pamięci podręcznej nie jest natychmiastowe: uruchomienie mojej aplikacji może zająć nawet minutę, gdy pamięć podręczna bufora jest pełna ( *), a po wyczyszczeniu pamięci podręcznej (przy użyciu echo 3 > /proc/sys/vm/drop_caches
) ta sama aplikacja uruchamia się niemal natychmiast.
(*) Podczas tej minuty uruchamiania aplikacja ma błąd w nowej pamięci, ale spędza 100% swojego czasu w jądrze, zgodnie z Vtune w funkcji o nazwie pageblock_pfn_to_page
. Ta funkcja wydaje się być związana z zagęszczaniem pamięci potrzebnym do znalezienia ogromnych stron, co prowadzi mnie do wniosku, że problemem jest fragmentacja.