หลังจากการเปรียบเทียบกับ sysbench มากมายฉันมาถึงข้อสรุปนี้:
เพื่อความอยู่รอด (ประสิทธิภาพฉลาด) สถานการณ์ที่
- กระบวนการคัดลอกที่ชั่วร้ายทำให้หน้าสกปรก
- และฮาร์ดแวร์แคชการเขียนมีอยู่
- และการอ่านหรือเขียนต่อวินาที (IOPS) แบบซิงโครนัสเป็นสิ่งสำคัญ
เพียงทิ้งลิฟท์, คิวและหน้าแคชทั้งหมด ตำแหน่งที่ถูกต้องสำหรับเพจที่สกปรกอยู่ใน RAM ของฮาร์ดแวร์การเขียนแคช
ปรับ dirty_ratio (หรือ dirty_bytes ใหม่) ให้ต่ำที่สุดเท่าที่จะทำได้ แต่คอยดูปริมาณงานต่อเนื่อง ในกรณีของฉัน 15 MB นั้นเหมาะสมที่สุด ( echo 15000000 > dirty_bytes
)
นี่เป็นแฮ็คมากกว่าโซลูชันเนื่องจากมีหน่วยความจำกิกะไบต์ในขณะนี้ใช้สำหรับอ่านแคชเท่านั้นแทนที่จะใช้แคชที่สกปรก เพื่อให้แคชสกปรกทำงานได้ดีในสถานการณ์นี้เคอร์เนลพื้นหลังลินุกซ์จะต้องเฉลี่ยที่ความเร็วของอุปกรณ์ที่รองรับการร้องขอและปรับการล้างพื้นหลังตามลำดับ ไม่ใช่เรื่องง่าย.
ข้อมูลจำเพาะและมาตรฐานสำหรับการเปรียบเทียบ:
ผ่านการทดสอบในขณะที่dd
เรียกเลขศูนย์ไปยังดิสก์ sysbench พบว่าประสบความสำเร็จอย่างมากโดยเพิ่ม 10 เธรด fsync ให้เขียนที่ 16 kB จาก 33 เป็น 700 IOPS (จำกัด การใช้งาน: 1500 IOPS) และเธรดเดี่ยวตั้งแต่ 8 ถึง 400 IOPS
หากไม่มีโหลด IOPS จะไม่ได้รับผลกระทบ (~ 1500) และปริมาณงานจะลดลงเล็กน้อย (จาก 251 MB / s เป็น 216 MB / s)
dd
โทร:
dd if=/dev/zero of=dumpfile bs=1024 count=20485672
สำหรับ sysbench, test_file.0 ได้เตรียมที่จะไม่หยาบกับ:
dd if=/dev/zero of=test_file.0 bs=1024 count=10485672
sysbench เรียก 10 เธรด:
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 เรียกหนึ่งเธรด:
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
ขนาดบล็อกที่เล็กกว่าแสดงจำนวนที่มากขึ้น
--file-block-size = 4096 ที่มี 1 GB dirty_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 ที่มี 15 MB dirty_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 ที่มี 15 MB dirty_bytes บนระบบว่าง:
sysbench 0.4.12: มาตรฐานการประเมินผลระบบมัลติเธรด
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
การทดสอบระบบ:
- Adaptec 5405Z (นั่นคือ 512 MB เขียนแคชพร้อมการป้องกัน)
- Intel Xeon L5520
- 6 GiB RAM @ 1066 MHz
- เมนบอร์ด Supermicro X8DTN (ชิปเซ็ต 5520)
- 12 Seagate Barracuda ดิสก์ 1 TB
- 10 ในซอฟต์แวร์ Linux RAID 10
- เคอร์เนล 2.6.32
- ระบบไฟล์ xfs
- เดเบียนไม่เสถียร
โดยสรุปตอนนี้ฉันมั่นใจว่าการกำหนดค่านี้จะทำงานได้ดีในการใช้งานโหลดสูงและแม้กระทั่งสถานการณ์การโหลดเต็มสำหรับการรับส่งข้อมูลฐานข้อมูลที่อื่นจะได้รับการหิวโหยโดยลำดับการรับส่งข้อมูล ปริมาณงานต่อเนื่องนั้นสูงกว่าลิงก์กิกะบิตสองตัวที่สามารถให้บริการได้ดังนั้นจึงไม่มีปัญหาในการลดบิตลง