Điều chỉnh hành vi bộ đệm đĩa Linux cho thông lượng tối đa


12

Tôi đang gặp phải một vấn đề thông lượng tối đa ở đây và cần một số lời khuyên về cách điều chỉnh các nút của tôi. Chúng tôi đang chạy một máy chủ tệp 10Gbit để phân phối sao lưu. Đó là thiết lập hai đĩa S-ATA2 trên Bộ điều khiển LSI MegaRAID. Máy chủ cũng có 24gig bộ nhớ.

Chúng tôi có nhu cầu phản ánh bản sao lưu được tải lên cuối cùng của chúng tôi với thông lượng tối đa.

RAID0 cho các bản sao lưu "nóng" của chúng tôi cung cấp cho chúng tôi khoảng 260 MB / giây ghi và 275 MB / giây đọc. Một tmpfs được thử nghiệm với kích thước 20GB cho chúng ta khoảng 1GB / giây. Loại thông lượng này là những gì chúng ta cần.

Bây giờ làm thế nào tôi có thể điều chỉnh hệ thống con bộ nhớ ảo của Linux để lưu trữ các tệp được tải lên cuối cùng càng lâu càng tốt trong bộ nhớ mà không ghi chúng ra đĩa (hoặc thậm chí tốt hơn: ghi vào đĩa VÀ giữ chúng trong bộ nhớ)?

Tôi thiết lập các sysctls sau, nhưng chúng không cung cấp cho chúng tôi thông lượng mà chúng tôi mong đợi:

# VM pressure fixes
vm.swappiness = 20
vm.dirty_ratio = 70
vm.dirty_background_ratio = 30
vm.dirty_writeback_centisecs = 60000

Về lý thuyết, điều này sẽ cung cấp cho chúng tôi 16GB để lưu vào I / O và chờ vài phút cho đến khi ghi vào đĩa. Tuy nhiên, khi tôi điểm chuẩn máy chủ, tôi thấy không có tác dụng gì trong việc viết, thông lượng không tăng.

Giúp đỡ hoặc lời khuyên cần thiết.


Nó sẽ không có ý nghĩa hơn để bắt đầu viết càng sớm càng tốt? Nếu không, nó đạt đến kích thước bộ đệm tối đa và đột nhiên dừng lại. Nếu nó được viết tất cả cùng nó sẽ cho bạn nhiều thời gian hơn.
Zan Lynx

Tôi có bộ nhớ 20GB chỉ dành cho bộ đệm, vì các ứng dụng của tôi (linux linux + vsftpd) sử dụng dưới 4GB (tổng cộng 24GB). Bản sao lưu của tôi là 20GB. Nếu tôi có thể ghi chúng vào bộ đệm và sau đó ghi vào đĩa sau khi chạy sao lưu, điều này sẽ giảm đáng kể thời gian chết của nguồn sao lưu (máy chủ ảo) của tôi. PS: Máy chủ có thể dừng lại sau đó, không vấn đề gì. Nó có 30 phút để phục hồi :)
Peter Meyer

Có vẻ như bất kỳ ứng dụng nào bạn đang sử dụng để truyền dữ liệu qua mạng đang đồng bộ hóa nó vào đĩa. Bạn sẽ muốn làm cho nó không làm điều đó để dữ liệu chỉ có thể nằm trong bộ đệm, mặc dù tôi hỏi tại sao bạn muốn có thể tạo ra nhiều dữ liệu như vậy nhanh hơn các đĩa có thể theo kịp. Điều đó chỉ ra một lỗ hổng thiết kế ở đâu đó.
psusi

Nghe có vẻ như lỗ hổng: giải pháp sao lưu của bạn không cần phải tắt máy chủ toàn bộ thời gian.
psusi

1
@PeterMeyer: Ngay cả khi bạn có nhiều RAM, vẫn là một sai lầm khi chờ ghi để bắt đầu. Thời gian duy nhất có ý nghĩa nào đó là nếu bạn sẽ chỉnh sửa hoặc xóa các tệp (như tệp tạm thời) trước khi vào đĩa. Một bản sao lưu không làm điều đó. Bạn muốn bắt đầu viết nền càng sớm càng tốt. Đặt nền_ratio của bạn thành 1 hoặc 2.
Zan Lynx

Câu trả lời:


6

Nhìn vào các biến bạn đã đặt, có vẻ như bạn chủ yếu quan tâm đến hiệu suất ghi và không quan tâm đến việc mất dữ liệu có thể do mất điện.

Bạn sẽ chỉ nhận được tùy chọn cho việc ghi lười biếng và sử dụng bộ đệm ghi lại với các hoạt động ghi không đồng bộ. Các thao tác ghi đồng bộ yêu cầu cam kết vào đĩa và sẽ không được viết lười biếng - bao giờ hết. Hệ thống tập tin của bạn có thể gây ra tình trạng lộn xộn trang thường xuyên và ghi đồng bộ (thường là do nhật ký, đặc biệt là với ext3 trong chế độ dữ liệu = tạp chí). Ngoài ra, ngay cả các lần xóa trang "nền" sẽ cản trở việc đọc không được đọc và ghi đồng bộ , do đó làm chậm chúng.

Nói chung, bạn nên lấy một số số liệu để xem điều gì đang xảy ra - bạn có thấy quy trình sao chép của mình được đặt ở trạng thái "D" đang chờ công việc I / O được thực hiện bởi pdflush không? Bạn có thấy hoạt động ghi đồng bộ nặng trên đĩa của bạn không?

Nếu vẫn thất bại, bạn có thể chọn thiết lập hệ thống tệp tmpfs rõ ràng nơi bạn sao chép các bản sao lưu của mình vào và chỉ đồng bộ hóa dữ liệu với các đĩa của bạn sau khi thực tế - thậm chí tự động sử dụng inotify

Để đọc bộ nhớ đệm mọi thứ đơn giản hơn đáng kể - có fadvisetiện ích fcoretools có --willneedtham số để khuyên kernel tải nội dung của tệp vào bộ đệm bộ đệm.

Biên tập:

vm.denty_ratio = 70

Về lý thuyết, điều này sẽ cung cấp cho chúng tôi 16GB để lưu vào I / O và chờ vài phút cho đến khi ghi vào đĩa.

Điều này sẽ không ảnh hưởng lớn đến kịch bản thử nghiệm của bạn, nhưng có một quan niệm sai lầm trong cách hiểu của bạn. Tham số dirty_ratio không phải là một tỷ lệ phần trăm của tổng số bộ nhớ của hệ thống của bạn mà là của hệ thống của bạn miễn phí bộ nhớ.

Có một bài viết về Điều chỉnh tải trọng nặng với thông tin sâu hơn.


Vâng, tôi sau khi viết hiệu suất. Thời gian để quạt ra bản sao lưu cho nô lệ sao lưu không phải là mối quan tâm của tôi. Tôi cũng có một kịch bản để truyền lại, nếu máy chủ sao lưu chính bị lỗi và các bản sao lưu không được chuyển qua các nô lệ sao lưu. PS Tôi đã đọc các liên kết và điều chỉnh cho phù hợp. Xin lỗi vì sai lầm về miễn phí so với đệm so với tổng.
Peter Meyer

3

Hoặc chỉ nhận thêm đĩa ... Cấu hình mảng ổ đĩa bạn không hỗ trợ trong suốt thời gian bạn yêu cầu. Đây là một trường hợp mà giải pháp nên được tổ chức lại để đáp ứng nhu cầu thực sự của bạn. Tôi hiểu rằng đây chỉ là bản sao lưu, nhưng nó có ý nghĩa để tránh một bản sửa lỗi.


Đã đồng ý. Không có cách nào một vài ổ đĩa SATA ( SATA ? Nghiêm túc?) Sẽ duy trì được tốc độ 275MB / giây và chúng tôi thậm chí không nói về các IOP đáng sợ mà bạn sẽ nhận được từ chúng.
thích nghi

1
Tôi có thể thấy nơi anh ấy đang hướng tới - vì đây chỉ là đích sao lưu dữ liệu, anh ấy không quan tâm đến khả năng mất dữ liệu thường xuyên do mất điện. Và anh ấy muốn giảm thiểu thời gian cần thiết cho một cửa sổ sao lưu bằng cách cung cấp thông lượng tối đa có sẵn - 20 GB dữ liệu có thể được ghi trong vòng dưới 30 giây theo cách này. Nếu sao lưu liên quan đến thời gian chết hoặc tác động dịch vụ vì một số lý do, 30 giây chắc chắn dễ dàng hơn hơn 20 phút.
the-wợi

HOÀN TOÀN đúng. Tôi đang đồng bộ hình ảnh máy ảo (những cái rất nhỏ để tính toán các nút) bị hỏng trong khi đồng bộ hóa. Ứng dụng này hoạt động như tar | ssh nhưng sử dụng ftp. Và tốt, các mô phỏng cần phải chạy ... :)
Peter Meyer

1
Không quan trọng chúng là giống chó SATA nào. Các đĩa phi doanh nghiệp 7200RPM đơn giản là không thể đảm bảo thông lượng hoặc độ trễ.
thích nghi

1
@adaptr, một bản sao lưu sẽ được viết tuần tự.
psusi

1

Sử dụng bộ nhớ cache có thể ám chỉ việc mất dữ liệu vì nếu có sự cố xảy ra, dữ liệu trong bộ nhớ và không được lưu vào đĩa sẽ bị mất.

Điều đó nói rằng, có điều chỉnh được thực hiện ở cấp hệ thống tập tin.

Ví dụ: Nếu bạn đang sử dụng ext4, bạn có thể thử tùy chọn gắn kết:

rào cản = 0

Rằng: "vô hiệu hóa việc sử dụng các rào cản ghi trong mã jbd. hoặc cách khác, vô hiệu hóa các rào cản có thể cải thiện hiệu suất một cách an toàn. Các tùy chọn gắn kết "rào cản" và "nobarrier" cũng có thể được sử dụng để bật hoặc tắt các rào cản, để thống nhất với các tùy chọn gắn kết ext4 khác. "

Xem thêm tại: http://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt


Tôi đang sử dụng một XFS được điều chỉnh rất nhiều . Thông tin thêm về vấn đề được điều chỉnh trong phần bình luận ở trên :)
Peter Meyer

Hệ thống tập tin được tạo với mkfs.xfs -l lazy-Count = 1, version = 2, size = 256m -i attr = 2 -d sunit = 512, swidth = 1024 và được gắn với: rw, noatime, logbufs = 8, logbsize = 256k, osyncisdsync, delaylog, attr2, nobarrier, allocsize = 256k
Peter Meyer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.