Sau rất nhiều điểm chuẩn với sysbench, tôi đi đến kết luận này:
Để tồn tại (hiệu suất-khôn ngoan) một tình huống trong đó
- một quá trình sao chép độc ác tràn ngập các trang bẩn
- và bộ đệm ghi phần cứng có mặt (có thể không có điều đó)
- và đọc hoặc ghi đồng bộ mỗi giây (IOPS) là rất quan trọng
chỉ cần đổ tất cả thang máy, hàng đợi và bộ đệm trang bẩn. Vị trí chính xác cho các trang bẩn là trong RAM của bộ đệm ghi phần cứng đó.
Điều chỉnh Dirt_ratio (hoặc Dirt_bytes mới) càng thấp càng tốt, nhưng hãy chú ý đến thông lượng tuần tự. Trong trường hợp cụ thể của tôi, 15 MB là tối ưu ( echo 15000000 > dirty_bytes
).
Đây là một hack hơn là một giải pháp vì hiện tại gigabyte RAM chỉ được sử dụng để đọc bộ nhớ đệm thay vì bộ nhớ cache bẩn. Để bộ đệm bẩn hoạt động tốt trong tình huống này, bộ tạo nền hạt nhân Linux sẽ cần trung bình ở tốc độ mà thiết bị bên dưới chấp nhận các yêu cầu và điều chỉnh xả nền phù hợp. Không dễ.
Thông số kỹ thuật và điểm chuẩn để so sánh:
Đã thử nghiệm trong khi nhập dd
số không vào đĩa, sysbench cho thấy thành công lớn , tăng 10 luồng fsync ghi ở 16 kB từ 33 lên 700 IOPS (giới hạn không tải: 1500 IOPS) và luồng đơn từ 8 đến 400 IOPS.
Không tải, IOPS không bị ảnh hưởng (~ 1500) và thông lượng giảm nhẹ (từ 251 MB / s xuống còn 216 MB / s).
dd
gọi điện:
dd if=/dev/zero of=dumpfile bs=1024 count=20485672
đối với sysbench, test_file.0 đã được chuẩn bị để không phổ biến với:
dd if=/dev/zero of=test_file.0 bs=1024 count=10485672
sysbench gọi cho 10 chủ đề:
sysbench --test=fileio --file-num=1 --num-threads=10 --file-total-size=10G --file-fsync-all=on --file-test-mode=rndwr --max-time=30 --file-block-size=16384 --max-requests=0 run
sysbench gọi cho một chủ đề:
sysbench --test=fileio --file-num=1 --num-threads=1 --file-total-size=10G --file-fsync-all=on --file-test-mode=rndwr --max-time=30 --file-block-size=16384 --max-requests=0 run
Kích thước khối nhỏ hơn cho thấy số lượng thậm chí còn quyết liệt hơn.
--file-block-size = 4096 với 1 GB Dirt_bytes:
sysbench 0.4.12: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Extra file open flags: 0
1 files, 10Gb each
10Gb total file size
Block size 4Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Calling fsync() after each write operation.
Using synchronous I/O mode
Doing random write test
Threads started!
Time limit exceeded, exiting...
Done.
Operations performed: 0 Read, 30 Write, 30 Other = 60 Total
Read 0b Written 120Kb Total transferred 120Kb (3.939Kb/sec)
0.98 Requests/sec executed
Test execution summary:
total time: 30.4642s
total number of events: 30
total time taken by event execution: 30.4639
per-request statistics:
min: 94.36ms
avg: 1015.46ms
max: 1591.95ms
approx. 95 percentile: 1591.30ms
Threads fairness:
events (avg/stddev): 30.0000/0.00
execution time (avg/stddev): 30.4639/0.00
--file-block-size = 4096 với 15 MB Dirt_bytes:
sysbench 0.4.12: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Extra file open flags: 0
1 files, 10Gb each
10Gb total file size
Block size 4Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Calling fsync() after each write operation.
Using synchronous I/O mode
Doing random write test
Threads started!
Time limit exceeded, exiting...
Done.
Operations performed: 0 Read, 13524 Write, 13524 Other = 27048 Total
Read 0b Written 52.828Mb Total transferred 52.828Mb (1.7608Mb/sec)
450.75 Requests/sec executed
Test execution summary:
total time: 30.0032s
total number of events: 13524
total time taken by event execution: 29.9921
per-request statistics:
min: 0.10ms
avg: 2.22ms
max: 145.75ms
approx. 95 percentile: 12.35ms
Threads fairness:
events (avg/stddev): 13524.0000/0.00
execution time (avg/stddev): 29.9921/0.00
--file-block-size = 4096 với 15 MB Dirt_bytes trên hệ thống nhàn rỗi:
sysbench 0.4.12: điểm chuẩn đánh giá hệ thống đa luồng
Running the test with following options:
Number of threads: 1
Extra file open flags: 0
1 files, 10Gb each
10Gb total file size
Block size 4Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Calling fsync() after each write operation.
Using synchronous I/O mode
Doing random write test
Threads started!
Time limit exceeded, exiting...
Done.
Operations performed: 0 Read, 43801 Write, 43801 Other = 87602 Total
Read 0b Written 171.1Mb Total transferred 171.1Mb (5.7032Mb/sec)
1460.02 Requests/sec executed
Test execution summary:
total time: 30.0004s
total number of events: 43801
total time taken by event execution: 29.9662
per-request statistics:
min: 0.10ms
avg: 0.68ms
max: 275.50ms
approx. 95 percentile: 3.28ms
Threads fairness:
events (avg/stddev): 43801.0000/0.00
execution time (avg/stddev): 29.9662/0.00
Hệ thống thử nghiệm:
- Adaptec 5405Z (đó là bộ nhớ cache ghi 512 MB có bảo vệ)
- Intel Xeon L5520
- RAM 6 GiB @ 1066 MHz
- Bo mạch chủ Supermicro X8DTN (chipset 5520)
- 12 đĩa Seagate Barracuda 1 TB
- 10 trong phần mềm Linux RAID 10
- Hạt nhân 2.6.32
- Hệ thống tập tin xfs
- Debian không ổn định
Tóm lại, bây giờ tôi chắc chắn rằng cấu hình này sẽ hoạt động tốt trong các tình huống nhàn rỗi, tải cao và thậm chí đầy tải cho lưu lượng cơ sở dữ liệu mà nếu không sẽ bị bỏ đói bởi lưu lượng tuần tự. Thông lượng tuần tự cao hơn hai liên kết gigabit có thể cung cấp dù sao, vì vậy không có vấn đề giảm nó một chút.