sysbench로 많은 벤치마킹을 한 후 다음과 같은 결론을 얻었습니다.
다음과 같은 상황에서 (성능 측면에서) 생존하기 위해
- 악의적 인 복사 프로세스가 더러운 페이지를 넘치게합니다
- 하드웨어 쓰기 캐시가 있습니다 (아마도 없을 수도 있습니다)
- 동기 읽기 또는 초당 쓰기 (IOPS)가 중요합니다.
모든 엘리베이터, 대기열 및 더티 페이지 캐시를 덤프하십시오. 더티 페이지의 올바른 위치는 해당 하드웨어 쓰기 캐시의 RAM에 있습니다.
dirty_ratio (또는 새로운 dirty_bytes)를 가능한 한 낮게 조정하되 순차적 처리량을 주시하십시오. 필자의 경우 15MB가 최적이었습니다 ( echo 15000000 > dirty_bytes
).
기가 바이트의 RAM이 이제 더티 캐시 대신 읽기 캐싱에만 사용되기 때문에 이것은 솔루션보다 해킹입니다. 이 상황에서 더티 캐시가 제대로 작동하려면 Linux 커널 백그라운드 플러 셔는 기본 장치가 요청을 수락하는 속도를 평균화하고 그에 따라 백그라운드 플러싱을 조정해야합니다. 쉬운 일이 아닙니다.
비교를위한 사양 및 벤치 마크 :
dd
디스크에 0을 기록 하면서 테스트 한 sysbench는 33 kS 에서 700 IOPS (유휴 한계 : 1500 IOPS)에서 16 kB로 10 스레드 fsync 쓰기를, 8에서 400 IOPS로 단일 스레드를 향상 시켜 큰 성공을 거두었습니다 .
로드가 없으면 IOPS는 영향을받지 않았으며 (~ 1500) 처리량이 약간 감소했습니다 (251MB / s에서 216MB / 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
블록 크기가 작을수록 더 큰 숫자를 나타 냈습니다.
1GB dirty_bytes의 --file-block-size = 4096 :
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, 15MB 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
유휴 시스템에서 15MB dirty_bytes를 가진 --file-block-size = 4096 :
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 (보호 기능이있는 512MB 쓰기 캐시)
- 인텔 제온 L5520
- 6GiB RAM @ 1066MHz
- 마더 보드 Supermicro X8DTN (5520 칩셋)
- Seagate Barracuda 1TB 디스크 12 개
- 커널 2.6.32
- 파일 시스템 xfs
- 데비안 불안정
요약하면,이 구성이 순차 트래픽으로 인해 굶주린 데이터베이스 트래픽에 대해 유휴, 고부하 및 전체로드 상황에서 제대로 수행 될 것이라고 확신합니다. 순차 처리량은 어쨌든 2 기가비트 링크가 제공 할 수있는 것보다 높으므로 조금 줄어드는 데 아무런 문제가 없습니다.