Chciałbym skonfigurować system tak, aby używał większości pamięci RAM do buforowania metadanych systemu plików, ale tylko stosunkowo niewielką ilość do buforowania odczytu / zapisu i pobierania plików. Idealnie chciałbym móc przeglądać system plików (tyle ile mieści się w pamięci RAM) bez rozpinania dysków, dopóki nie otworzę pliku.
Oto szczegóły:
Mam domowy serwer plików. Ma pięć dysków w woluminie LVM około 9 TB, ale tylko 4 GB pamięci RAM. Ponieważ serwer nie robi nic więcej niż serwowanie plików, większość pamięci RAM jest używana do buforowania. („Bezpłatne” raporty 3,4G z 3,9G używane do pamięci podręcznej).
Serwer mieszka w mojej sypialni, a jeśli wszystkie dyski się obracają, robi wystarczająco dużo hałasu, aby być denerwującym, gdy jest cicho. (Nie mam na myśli szukania hałasu, po prostu wirującego hałasu. Dyski różnych marek i modeli, i myślę, że niewielkie różnice w prędkościach obrotowych powodują zakłócenia. Sam dysk nie jest głośny, ale jeśli niektóre z nich wirują razem, niewielki hałas z okresem poniżej Hertza.) Skonfigurowałem więc serwer, aby przez większość czasu wyłączał dyski.
Oczywiście, jeśli dyski zostaną odwrócone podczas otwierania folderu w menedżerze plików, nastąpi opóźnienie, w zależności od tego, który z dysków ma ten folder. To nie jest wielka sprawa. Ale w zależności od tego, gdzie patrzę, może się to zdarzyć kilka razy z rzędu, jeśli LVM rozłoży metadane dla każdego podfolderu na różnych dyskach.
Podejrzewam, że Linux najczęściej zapełnia swoją pamięć podręczną zawartością plików i prawdopodobnie wstępnie pobranymi danymi. Buforowanie nie jest zbyt przydatne poza kilkoma MB, aby zapewnić płynne odtwarzanie; gdybym tylko obejrzał film, prawdopodobnie nie zobaczę go w najbliższym czasie. Pobieranie wstępne, jeśli tak się stanie, jest również całkowicie bezużyteczne w moim przypadku , po kilku MB.
Ale można by pomyśleć, że 4 GB powinno być wystarczające, aby móc buforować większość metadanych systemu plików, przynajmniej tych części, które już były odwiedzane, abym mógł przeglądać pliki bez konieczności obracania dysków, jeśli okaże się, że są one spanie.
Podczas otwierania pliku nadal występowałoby opóźnienie, ale to w porządku. Porównaj „kliknij; czekaj ; Kliknij; czekaj ; Kliknij; czekaj ; grać; oglądać ”za pomocą„ kliknięcia; Kliknij; Kliknij; grać; czekaj ; zegarek". Ten pierwszy jest niezwykle frustrujący; ten ostatni jest prawie oczekiwany.
Uwagi:
Jeśli to ma znaczenie, jądro to 3.2, system operacyjny to Debian, wolumin to lvm2, a FS to ext4.
Jedynym powodem spowolnienia jest hałas w nocy; w przeciwnym razie serwer działa nieprzerwanie. (Uczyniłem to tak niskim poborem mocy, jak rozsądnym.) Opóźnienie rozłączania jest różne w zależności od pory dnia.
Dyski twarde przeznaczone są wyłącznie do multimediów. System operacyjny znajduje się na osobnym (małym) dysku flash. (Co oznacza, że wszelkie opóźnienia związane z rozpakowywaniem pochodzą z danych, nie tylko dlatego, że potrzebowały czegoś
/usr
lub czegoś innego. Mógłbym zaoszczędzić na tym kilka GB, jeśli to by pomogło w moim problemie.Rozsądny wpływ na wydajność nie jest wielkim problemem. Dyski i tak są szybsze niż moja sieć.
źródło
find / -ls > /dev/null
, to rozkręcę dyski, a następniefind
wszystkie pliki ponownie, dyski się nie rozkręcają.free
pokazuje przy tym zwiększenie buforów do około 202 MB. Ale, gdybym zrobićfind
, następniecat /file/bigger/than/ram > /dev/null
, potemfree
pokazujecached
rosnące wypełnić pustą przestrzeń, iz jakiegoś powodubuffers
spada do około 195MB. Potem, jeślifind
swappiness
: Domyślnie jest ustawiony60
, ale maszyna nie ma partycji wymiany, więc nie jestem pewien, czy robi dużo. Chyba mógłbym umieścić plik wymiany na dysku flash, ale nie mam pojęcia, jak to pomogłoby ani jak go zmienić.