streszczenie
W jaki sposób można skonfigurować Linuksa zarówno do odczytu z lokalnego dysku / systemu plików, jak i zapisu do udziału sieciowego w tym samym czasie, w przeciwieństwie do odczytu, gdy żadne dane nie przechodzą przez sieć, a następnie wysyłania tych danych przez sieć, gdy dysk lokalny jest bezczynny?
Znacznie szybciej jest czytać i pisać jednocześnie, zamiast wykonywać tylko jedną operację, a następnie drugą na przemian.
Detale
Przenoszę dużą ilość danych z dysków lokalnych na komputerze z systemem Linux na urządzenie NAS.
Używam rsync
w zasadzie kopia /srv/data
do /mnt/nas
, który jest zamontowanie CIFS.
Zaczęło się dobrze, czytając z prędkością 100 MB / s i zapisując na serwerze NAS z prędkością 100 MB / s (limit sieci gigabitowej), przy jednoczesnym czytaniu i pisaniu.
Jednak teraz, kilka godzin później, odkrywam, że czyta z dysku lokalnego, a następnie zatrzymuję odczyt podczas zapisywania na NAS, a gdy nie ma już danych do zapisania na NAS, wznawia czytanie z dysku jeszcze raz. Sieć jest bezczynna podczas odczytywania dysku, a dysk jest bezczynny, gdy sieć jest używana.
Nie trzeba dodawać, że czytanie 200 MB, a następnie pisanie 200 MB zajmuje znacznie więcej czasu niż czytanie i pisanie 200 MB jednocześnie.
Jak mogę skonfigurować jądro tak, aby było zgodne z wcześniejszym zachowaniem czytania i pisania w tym samym czasie, zamiast przełączać się między czytaniem a pisaniem, wykonując tylko jedną operację na raz?
Kilka spostrzeżeń: gdy dysk lokalny odczytuje z prędkością 100 + MB / s, wszystko wydaje się przebiegać równolegle w porządku, ale kiedy dysk zwalnia (z jakiegoś powodu wydaje się, że z jakiegoś powodu idzie teraz z prędkością tylko 20 MB / s), to wtedy zapis wydaje się, że następuje zmiana.
Mogę również uruchomić sync
ręcznie co kilka sekund, aby uzyskać pisze dzieje się równolegle z odczytuje (choć oczywiście przy zredukowanych prędkościach) jednak umieszczenie sync
w while
pętli tak, że działa co pięć sekund nie wydaje się właściwym rozwiązaniem ...
Jądro wydaje się buforować około 1 GB danych, a następnie zapisywać je tak szybko, jak to możliwe w sieci - co jest w porządku - po prostu nie rozumiem, dlaczego powolny dysk musi przestać być odczytywany, gdy dane są wysyłane przez sieć.