Jak mogę zapobiec wyczerpaniu mojej pamięci ZFS ARC przy użyciu ntfs-3g?


Mam uruchomiony mikroserwer HP

OpenMediaVault
http://www.openmediavault.org/
2.1.18 (Stone Burner) oparty na Debianie GNU/Linux 7 (wheezy).
Kilka dni temu musiałem skopiować dużą liczbę plików w formacie NTFS z pamięci USB. Podłączono, zamontowałem, uruchomiłem kopię i pozostawiono do zakończenia.
Dzień później stwierdziłem, że ledwie cokolwiek skopiował, a wydajność mojego NAS spadła. Podczas mojego dochodzenia odkryłem, że pamięci podręczne stron i buforów zajmują teraz więcej niż 3/4 pamięci systemowej (razem zwykle zajmują mniej niż 10%), a ZFS ARC jest teraz kompresowany do pozostałej pamięci (mniej niż 1/4 normalnego rozmiaru).
Kiedy zdałem sobie sprawę, co jest nie tak, zatrzymałem kopię, odmontowałem i odmontowałem dysk, i bardzo szybko pamięci podręczne wróciły do ​​normalnego rozmiaru, a następnie ARC zaczęło się zapełniać do normalnego poziomu.
Tak więc, jeśli w przyszłości będę potrzebować więcej bezpośrednich kopii, jak zapobiec montowaniu dysków ntfs, które pochłaniały dużo pamięci i pozbawiły mój ZFS ARC pamięci, której potrzebuje?
Uwaga: próbowałem biegać
       echo 3 >/proc/sys/vm/drop_caches
(za „darmową pamięć podręczną stron, dentrów i i-węzłów” zgodnie z
       man 5 proc
), dlatego

shodanshok
https://serverfault.com/users/ ... owany
https://serverfault.com/a/734645/25092
ale to również wyczyściło moje ARC (z wyjątkiem pamięci potrzebnej do buforowania nagłówka L2ARC). Więc mój system miał dużo wolnej pamięci, ale ponieważ wszystko jest buforowane tylko w ARC lub L2ARC, mój system spędził całe wieki na ładowaniu dysków w celu uzupełnienia ARC, co było niepożądanym stanem rzeczy.
Na tym obrazku widać głód ZFS na początku piątego, kiedy uruchamiam moją kopię ntfs, wszystko wraca do normy, gdy dysk ntfs jest odmontowany na początku szóstego, a następnie w końcu ARC jest opróżniany ( i odbudowano) po użyciu drop_caches 7 po południu.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najprostszym rozwiązaniem jest okresowe opróżnianie bufora i pamięci podręcznej stron. Możesz to łatwo zrobić, uruchamiając podobną linię basha w tle (lub na innym tty):
         while true; do echo 1 >/proc/sys/vm/drop_caches; sleep 5; done
Alternatywnie możesz spróbować innego sposobu, aby uniknąć zanieczyszczenia bufora/pamięci podręcznej strony. Zasadniczo musisz skopiować każdy plik za pomocą DIRECT_IO, całkowicie pomijając pamięć podręczną strony. Możesz to zrobić za pomocą polecenia takiego jak:
         dd if=srcfile of=dstfile bs=1M iflag=direct
Powyższe polecenie otwiera plik src z opcją O_DIRECT, pomijając pamięć podręczną strony podczas czytania.

ale nie podczas nagrywania
... Jeśli chcesz ominąć nawet buforowanie zapisu, możesz dodać kolejny
         oflag=direct
opcja.
Prawdziwy problem z powyższym rozwiązaniem polega na tym, że musisz określać plik jeden po drugim, wykonując wiele (może tysiące). Oznacza to, że musiałeś napisać skrypt
         dd
abyś mógł skopiować cały katalog trzy.
Inne opcje obejmują:

Na koniec możesz spróbować uruchomić aplikację NTFS/skopiować przez
         systemd-run
i ustawianie pewnych limitów pamięci, co powinno również ograniczać buforowanie stron.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się