Tóm lược
Làm thế nào bạn có thể cấu hình Linux để đọc cả từ đĩa / hệ thống tệp cục bộ và ghi vào chia sẻ mạng cùng một lúc, trái ngược với việc đọc trong khi không có dữ liệu nào đi qua mạng, sau đó gửi dữ liệu đó qua mạng trong khi đĩa cục bộ nhàn rỗi?
Nó nhanh hơn nhiều để đọc và viết cùng một lúc thay vì chỉ thực hiện một thao tác và sau đó là một thao tác xen kẽ.
Chi tiết
Tôi đang chuyển một lượng lớn dữ liệu từ các đĩa cục bộ trên máy Linux sang thiết bị NAS.
Tôi đang sử dụng rsync
để sao chép cơ bản /srv/data
vào /mnt/nas
, đó là một mount CIFS.
Nó khởi đầu tốt, đọc ở tốc độ 100MB / giây và ghi vào NAS với tốc độ 100MB / giây (giới hạn của mạng gigabit), với cả việc đọc và viết xảy ra đồng thời.
Tuy nhiên, bây giờ, vài giờ sau, tôi thấy rằng nó đang đọc từ đĩa cục bộ, sau đó dừng đọc trong khi ghi vào NAS, sau đó khi không còn dữ liệu để ghi vào NAS, nó tiếp tục đọc từ đĩa lần nữa. Mạng không hoạt động trong khi đĩa đang được đọc và đĩa không hoạt động trong khi mạng đang được sử dụng.
Không cần phải nói, đọc 200 MB sau đó viết 200 MB mất nhiều thời gian hơn đọc và viết 200 MB đó cùng một lúc.
Làm cách nào tôi có thể định cấu hình kernel sao cho nó dính vào hành vi đọc và viết trước đó cùng lúc, thay vì xen kẽ giữa đọc rồi viết, chỉ thực hiện một thao tác tại một thời điểm?
Một số quan sát: Khi đĩa cục bộ đọc ở tốc độ 100 + MB / giây, mọi thứ dường như xảy ra song song tốt, nhưng một khi đĩa chậm lại (dường như chỉ ở mức 20MB / giây vì một số lý do) đó là khi đọc / ghi chuyển đổi dường như xảy ra.
Tôi cũng có thể chạy sync
bằng tay mỗi vài giây để có được ghi xảy ra song song với việc đọc (mặc dù rõ ràng là ở tốc độ giảm) tuy nhiên đặt sync
trong một while
vòng lặp để nó chạy năm giây không có vẻ như là giải pháp đúng ...
Hạt nhân dường như lưu trữ khoảng 1GB dữ liệu và sau đó ghi nó ra mạng càng nhanh càng tốt - điều đó tốt - tôi không hiểu tại sao đĩa chậm cần dừng đọc trong khi dữ liệu được gửi qua mạng.