http://people.redhat.com/mbehm/RHEL_Tuning_Guide.pdf

Chapter 2 System Tuning Tools for Linux Servers

디스크 i/o 벤치마킹 프로그램 bonnie

Block reads/writes : 한번에 8KB 블락을 읽어들이고 순차적으로 다음 블락을 읽음. OS에서 순차적인 디스크 읽기 성능을 측정함. 파일시스템을 통해 정규파일을 읽어들이는 테스팅으로 async i/o 나 raw disk i/o 테스팅이 아니라는 것을 생각해야한다. IOMeter 프로그램의 경우는 raw i/o와 async i/o 를 사용하여 속도를 측정하며 파일시스템 레이어를 제외하고 디스크과 컨트롤러의 속도를 측정한다.파일 시스템을 통해야 실제 환경과 비슷한 결과를 판단할 수 있다. 대부분의 애플리케이션은 async i/o, raw i/o를 사용하지 않기 때문에 IOMeter 에서 나타는 수치와 같을 수가 없다. (http://www.iometer.org/)

Character reads/writes : getc, putc 를 이용하여 파일에서 1바이트를 읽고 쓰는 테스팅을 함. libc 라이브러리 의 속도만을 테스팅하는 것이다. 이번 테스팅과는 관련이 없다.

rewrites : 8KB chunks of data를 읽고 1바이트를 변경한후 다시 파일을 쓰는 테스트. 파일시스템에 심한 부하를 주는 작업. 계속 디스크의 데이타 블록을 업데이트하거나 디스크의 블록을 재할당하는 작업. OS에서 데이타 캐쉬를 얼마나 잘하는지 테스팅을 한다. 작은 SQL DB에 update를 계속 주는 상황과 비슷.

random seeks : os에서 i/o 요청받은 것에 대해서 얼마나 잘 처리하는지 테스팅. 임의로 파일을 찾고 쓰며 작은 데이타 블락을 읽는 테스팅임. 초당 처리량. 하드디스크에서 발생하는 가장 큰 정체현상은 실제 디스크 처리량(throughput)이 아니라 디스크 탐색 시간이다.

기타 디스크 벤치마킹 프로그램 : dbench, IOzone, tiobench 등

Chapter 4.2 Disk Tuning

Chapter 5.2 Adding a Hardware RAID

주의할것이 있다. stripe width 는 chunk size * 디스크 갯수이다. 위에서 "stripe width size를 평균 데이타 요청 크기와 맞추어야 한다"고 했는데 현재 시스템을 모니터링하여 평균 데이타 요청 크기를 구하고 raid0 의 디스크 갯수로 나눈 값이 적절한 chunk size가 될 것이다.