Tại sao truy cập đọc RAID1 của tôi chậm hơn truy cập ghi?


10

Tôi đã thực hiện một số thử nghiệm hiệu năng đơn giản và có vẻ như việc đọc từ RAID1 của tôi chậm hơn so với viết:

root@dss0:~# for i in 1 2 3; do dd if=/dev/zero of=/dev/sda bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 192.349 s, 715 MB/s
137438953472 bytes (137 GB) copied, 192.851 s, 713 MB/s
137438953472 bytes (137 GB) copied, 193.026 s, 712 MB/s
root@dss0:~# for i in 1 2 3; do dd if=/dev/sda of=/dev/null bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 257.201 s, 534 MB/s
137438953472 bytes (137 GB) copied, 255.522 s, 538 MB/s
137438953472 bytes (137 GB) copied, 259.945 s, 529 MB/s

Tôi hiểu rằng dd không phải là một công cụ kiểm tra hiệu suất, nhưng kết quả này vẫn là một bất ngờ.

Hệ thống được xây dựng bởi nhà cung cấp và có bo mạch chính Supermicro với RAM 16 GByte. Bộ điều khiển RAID là MegaRAID 9271-8i với bộ nhớ cache 1 GB. Có 8 đĩa 2 TByte trên bảng nối đa năng SAS-933EL1. Tôi không chắc chắn về hệ thống cáp, một đầu nối của bộ điều khiển đi đến bảng nối đa năng của SAS, đầu còn lại đi đến hai đĩa SATA chứa HĐH.

RAID1 đã được thiết lập với lệnh này:

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r1 [8:0,8:1,8:2,8:3,8:4,8:5,8:6,8:7] WB NORA Direct -a0
Adapter 0: Created VD 0
Adapter 0: Configured the Adapter!!
Exit Code: 0x00

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aALL
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
Size                : 7.275 TB
Sector Size         : 512
Is VD emulated      : No
Mirror Data         : 7.275 TB
State               : Optimal
Strip Size          : 256 KB
Number Of Drives    : 8
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
PI type: No PI
Is VD Cached: No
Exit Code: 0x00

Tôi hy vọng rằng việc truy cập đọc ít nhất cũng nhanh như truy cập ghi, thậm chí có thể nhanh hơn. Tốc độ ghi 715 MByte / giây dường như gần giới hạn 6 GBit của một đầu nối SAS / SATA. Đây có thể là một vấn đề cấu hình hoặc cáp với bảng nối đa năng của SAS? Cấu hình bảng nối đa năng của SAS có thể được truy vấn bằng lệnh MegaRAID không? Xin tư vấn.

Cập nhật

Như đã được trình bày bởi poige và Peter, hiệu suất đọc chậm hơn dự kiến ​​có thể là do bộ nhớ đệm của hệ thống con I / O của Linux.

Khi sử dụng cờ trực tiếp trong lệnh dd tôi nhận được

root@dss0:~# dd if=/dev/sda of=/dev/null bs=1048576 count=131072 iflag=direct
137438953472 bytes (137 GB) copied, 199.862 s, 688 MB/s

cái này tốt hơn nhiều nhưng tốc độ ghi vẫn chậm hơn 10%. Sử dụng oflag = direct không ảnh hưởng đến tốc độ ghi.


Câu trả lời đơn giản: Đọc yêu cầu chờ kết quả, viết không.
David Schwartz

Câu trả lời:


8

poige hoàn toàn chính xác về bộ đệm ghi, nhưng dưới đây là chi tiết hơn.

dd với số không và sử dụng bộ đệm ghi không phải là cách đúng để so sánh (trừ khi bạn muốn kiểm tra bộ đệm ghi tất nhiên, điều này có lẽ chỉ hữu ích cho một hệ thống tệp, để xem nó đồng bộ hóa siêu dữ liệu, tạo tệp mới, v.v. ) (và có thể dd luôn là loại điểm chuẩn sai, nhưng nó hoạt động cho một bài kiểm tra rất cơ bản)

Tôi đề nghị bạn sử dụng dd với ít nhất một trong các tùy chọn sau:

conv=fdatasync -> this will make it flush to disk before finishing and calculating speed
oflag=direct   -> this will make it skip the OS cache but not the disk cache
conv=sync      -> more like skipping the disk cache too, but not really ... just flushing it every block or something like that.

Và đừng sử dụng số không. Một số phần cứng / phần mềm / phần mềm thông minh có thể sử dụng một số phím tắt nếu dữ liệu được dự đoán là số không. Điều này đặc biệt đúng nếu có nén mà tôi đoán bạn không sử dụng. Thay vào đó, sử dụng một tệp ngẫu nhiên trong bộ nhớ (chẳng hạn như / dev / shm). urandom chậm, vì vậy bạn cần viết nó ở đâu đó tạm thời để đọc lại. Tạo một tệp ngẫu nhiên 50 MB:

dd if=/dev/urandom of=/dev/shm/randfile bs=1M count=50

Đọc tệp nhiều lần để viết nó (ở đây tôi sử dụng con mèo để đọc nó 6 lần):

dd if=<(cat /dev/shm/randfile{,,,,,}) of= ... conv=fdatasync

rm /dev/shm/randfile

Ngoài ra, hãy nhớ rằng đọc raid1 là nhanh nhất với các hoạt động song song, vì vậy các đĩa có thể được sử dụng độc lập. Có lẽ không đủ thông minh để phối hợp các đĩa để đọc các phần khác nhau của cùng một hoạt động với các đĩa khác nhau.


10

Chìa khóa cho câu trả lời cho câu hỏi của bạn là đọc trước . Ngày xửa ngày xưa, tôi cũng có vấn đề đó .

IOW, để hiệu suất đọc tuần tự tối ưu, tất cả các đĩa phải được tham gia vĩnh viễn vào Đầu vào.

Khi bạn sử dụng ddw / o directio(xem man dd), thao tác ghi không được thực hiện ngay lập tức mà chuyển qua bộ đệm của hệ điều hành, do đó, nó có nhiều cơ hội hơn để liên quan đến tất cả các đĩa liên tục và đạt được hiệu suất tối đa có thể.

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.