Tôi gặp sự cố khi lấy thông lượng tối đa ra khỏi thiết lập của mình. Phần cứng như sau:
- Bộ xử lý lõi kép AMD Opteron (tm) 2376
- RAM 16 GB DDR2 ECC
- bộ điều khiển RAID Adaptec 52245 kép
- 48 Ổ đĩa SATA 1 TB được thiết lập thành 2 mảng RAID-6 (sọc 256KB) + phụ tùng.
Phần mềm :
- Hạt nhân vanilla 2.6.32.25 đơn giản, được biên dịch cho AMD-64, được tối ưu hóa cho NUMA; Vùng người dùng Debian Lenny.
- điểm chuẩn chạy: Disktest, bonnie ++, dd, v.v ... Tất cả đều cho kết quả như nhau. Không có sự khác biệt ở đây.
- lập lịch io sử dụng: noop. Vâng, không có mẹo ở đây.
Cho đến bây giờ, về cơ bản tôi đã giả định rằng việc phân loại (RAID 0) một số thiết bị vật lý sẽ tăng hiệu năng một cách tuyến tính. Tuy nhiên đây không phải là trường hợp ở đây:
- mỗi mảng RAID đạt được khoảng 780 MB / s ghi, duy trì và đọc 1 GB / s, duy trì.
- ghi vào cả hai mảng RAID đồng thời với hai quy trình khác nhau sẽ cho 750 + 750 MB / s và đọc từ cả hai cho 1 + 1 GB / s.
- tuy nhiên khi tôi kết hợp cả hai mảng lại với nhau, sử dụng mdadm hoặc lvm, hiệu suất đạt khoảng 850 MB / s ghi và đọc 1,4 GB / s. ít hơn 30% so với dự kiến!
- chạy hai tiến trình đọc hoặc ghi song song với các mảng sọc không làm tăng số liệu, trên thực tế, nó làm giảm hiệu suất hơn nữa.
Vậy chuyện gì đang xảy ra ở đây? Về cơ bản tôi đã loại trừ sự tranh chấp giữa bus hoặc bộ nhớ, bởi vì khi tôi chạy dd trên cả hai ổ đĩa, tốc độ ghi tổng hợp thực sự đạt tới 1,5 GB / giây và tốc độ đọc lên tới 2 GB / s.
Vì vậy, nó không phải là xe buýt PCIe. Tôi cho rằng đó không phải là RAM. Đây không phải là hệ thống tập tin, bởi vì tôi nhận được chính xác số điểm chuẩn so với thiết bị thô hoặc sử dụng XFS. Và tôi cũng nhận được chính xác hiệu suất tương tự bằng cách sử dụng phân chia LVM và phân chia md.
Chuyện gì vậy? Điều gì ngăn cản một quá trình đi lên đến thông lượng tối đa có thể? Linux có bị lỗi không? Những bài kiểm tra khác tôi có thể chạy?
striping
chương trình không thể thực hiện thông qua thuật toán đa luồng. Vì bạn đang sử dụng RAID mềm từ đó mdadm
, tôi khuyên bạn nên xem qua nguồn.