Mam problem z maksymalną przepustowością i potrzebuję porady, w jaki sposób dostroić pokrętła. Korzystamy z serwera plików 10Gbit do dystrybucji kopii zapasowych. Jest to konfiguracja z dwoma dyskami S-ATA2 na kontrolerze LSI MegaRAID. Serwer otrzymał również 24 gigabajty pamięci.
Musimy wykonać kopię lustrzaną naszej ostatnio przesłanej kopii zapasowej z maksymalną przepustowością.
RAID0 dla naszych „gorących” kopii zapasowych daje nam około 260 MB / s zapisu i 275 MB / s odczytu. Testowane tmpfs o rozmiarze 20 GB daje nam około 1 GB / s. Tego rodzaju przepustowość jest nam potrzebna.
Teraz, jak dostroić podsystem pamięci wirtualnej systemu Linux, aby buforować ostatnio przesłane pliki tak długo, jak to możliwe w pamięci, bez zapisywania ich na dysku (a nawet lepiej: zapisywanie na dysku ORAZ przechowywanie ich w pamięci)?
Skonfigurowałem następujące sysctls, ale nie dają nam oczekiwanej przepustowości:
# VM pressure fixes
vm.swappiness = 20
vm.dirty_ratio = 70
vm.dirty_background_ratio = 30
vm.dirty_writeback_centisecs = 60000
To powinno teoretycznie daje nam 16GB do buforowania I / O i odczekać kilka minut, aż jego piśmie do dysku. Mimo to, gdy testuję serwer, nie widzę żadnego wpływu na pisanie, przepustowość nie wzrasta.
Potrzebna pomoc lub porada.
Odpowiedzi:
Patrząc na ustawione przez ciebie zmienne, wygląda na to, że zajmujesz się głównie wydajnością zapisu i nie przejmujesz się możliwymi stratami danych z powodu awarii zasilania.
Zawsze dostaniesz tylko opcję leniwego zapisu i użycie pamięci podręcznej zapisu z asynchronicznymi operacjami zapisu. Synchroniczne operacje zapisu wymagają zapisu na dysku i nigdy nie byłyby leniwe. Twój system plików może powodować częste opróżnianie stron i synchroniczne zapisy (zwykle z powodu dzienników, szczególnie z ext3 w trybie danych = dziennik). Ponadto nawet opróżnianie strony „w tle” będzie zakłócać niebuforowane odczyty i zapisy synchroniczne , spowalniając je.
Ogólnie rzecz biorąc, powinieneś wziąć kilka wskaźników, aby zobaczyć, co się dzieje - czy widzisz, że proces kopiowania przechodzi w stan „D” i czeka na wykonanie operacji we / wy przez pdflush? Czy widzisz intensywne synchroniczne operacje zapisu na dyskach?
Jeśli wszystko inne zawiedzie, możesz ustawić jawny system plików tmpfs, w którym kopiujesz kopie zapasowe i po prostu synchronizujesz dane z dyskami po fakcie - nawet automatycznie przy użyciu inotify
W przypadku buforowania odczytu rzeczy są znacznie prostsze - istnieje
fadvise
narzędzie fcoretools , które ma--willneed
parametr, który doradza jądru, aby załadowało zawartość pliku do bufora bufora.Edytować:
Nie miałoby to większego wpływu na scenariusz testowania, ale w twoim rozumieniu istnieje nieporozumienie. Parametr dirty_ratio nie jest procentem całkowitej pamięci systemu, ale wolną pamięcią systemu.
Istnieje artykuł na temat dostrajania obciążeń o dużej sile zapisu z bardziej szczegółowymi informacjami.
źródło
Lub po prostu zdobądź więcej dysków ... Konfiguracja macierzy napędów nie obsługuje przez cały czas. Jest to przypadek, w którym rozwiązanie należy przeprojektować, aby spełnić Twoje rzeczywiste potrzeby. Rozumiem, że jest to tylko kopia zapasowa, ale warto unikać kłopotliwej poprawki.
źródło
Korzystanie z pamięci podręcznej pamięci może oznaczać utratę danych, ponieważ jeśli coś pójdzie nie tak, dane znajdujące się w pamięci i nie zapisane na dyskach zostaną utracone.
To powiedziawszy, należy dokonać strojenia na poziomie systemu plików.
Na przykład, jeśli korzystasz z ext4, możesz wypróbować opcję montowania:
bariera = 0
To: „wyłącza stosowanie barier zapisu w kodzie jbd. Bariery zapisu wymuszają prawidłowe porządkowanie zapisów dziennika na dysku, czyniąc bezpiecznym korzystanie z pamięci podręcznych zapisywania na dyskach, z pewnym spadkiem wydajności. Jeśli dyski są zasilane bateryjnie w jeden sposób lub inny, wyłączenie barier może bezpiecznie poprawić wydajność. Opcje montowania „bariera” i „nobarrier” mogą być również używane do włączania lub wyłączania barier, aby zachować spójność z innymi opcjami montowania ext4 ”.
Więcej na: http://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt
źródło