그 중에서 I/O Scheduler는 컴퓨터 성능에서 가장 느린 Disk에 대한 관리를 해주는 놈이다.
이 커널의 하위 시스템은 디스크의 탐색 시간을 최소화 시켜서 성능 향상을 목적이다. 실제로 하는 일은 Merge와 Sort이다. Merge는 여러 번의 요청을 한번의 요청으로 만드는 것이다. 이 방법은 여러번 발생하게 되는 탐색시간을 줄여주어서 성능을 향상시킨다. 그리고 Sort는 헤드의 운동 방향에 맞게 요청을 정렬하는 것이다.
2.4 버전에서는 Linux Elevator를 기본으로 하였다. 이것은 가까운 곳의 요청을 통합해서 한방향으로 이동을 하는 구성인데, 문제는 일부에서만 I/O가 과부하로 발생을 하게되면 그 외의 부분은 기아상태가 될 수 있는 원인이 된다.
이래서 2.6 에서는 4가의 I/O 스케줄러가 생겨나게 되었다.
1. Deadline I/O Scheduler (driver/block/deadline-iosched.c)
- Write : async I/O
- Read : sync I/O
--> Read가 느릴 경우에는 전체적인 성능이 떨어지게 된다. 따라서 Deadline은 각 요청에 대한 만료시간을 두는 방식으로 이런 문제를 해결을 하였다.
즉 Sorted Queue, Read Queue, Write Queue를 두고 각각에 대한 요청만료시간을 두고 그에 따라서 작업을 처리하는 방식이다.
2. Anticipation I/O Scheduler (driver/block/as-iosched.c)
Deadline과 유사하게 3개의 Queue를 사용하지만 Anticipation Heuristic을 추가한 것이다. 다른 점이다.읽기 요청을 처리하기 위해 즉시 탐색 방향을 변경하고 다시 다른 요청을 처리하지 않는다. 그 대신에 몇 밀리초동안 현재 사용중인 디스트 부분에 인접한 요청을 기다리다가 만약에 있으면 바로 처리를 하고 그렇지 않으면 일정 시간 후에 다른 작업을 하는 구조이다. 일반적으러 서버를 위한 좋은 방법이다. 단 검색만 있는 DB는 성능이 상당히 떨어진다.
3. Complete Fair Queuing I/O Scheduler(driver/block/cfq-iosched.c)
I/O를 요청하는 프로세스 마다 Queue를 생성하고 그것들은 Roundrobin으로 서비스를 하는 방식이다. 일반적으로 2.6에서 기본으로 사용함.
4. Noop(No operation) I/O Scheduler(driver/block/noop-iosched.c)
Random Access 가 가능한 SSD에 사용할 수 있는 방식으로 오직 Merge만 하여서 스케줄링을 한다.
I/O scheduler의 선택은 다음과 같이 한다.
#cat [as,cfq,deadline,noop] > /sys/block/
확인은
# cat /sys/block/
noop anticipatory deadline [cfq]
댓글 없음:
댓글 쓰기