본문 바로가기
3. 개발 관련/정리 :: issue 와 resovle

리눅스 2.6 커널 Disk I/O scheduling

by kyuho.choi 2010. 3. 9.
728x90
반응형
우리는 리눅스 커널의 Disk I/O scheduling을 흔히 elevator 라고 부르는데, 
noop,  deadline, CFQ, Anticipatory I/O Scheduler 들은 
이 elevator 가 사용할 수 있는 I/O Scheduling 방식들이다. 

Anticipatory I/O Scheduler의경우 read_expire, write_expire 등의 파라미터 등을 이용하여 I/O 작업 및 expire 조건을설정하는 방식으로 사용할 수 있으며, 설정 방법은 비교적 간단하며, 아래와 같다.

set Anticipatory I/O Scheduler

/*현재 설정 확인*/
]# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]

/*Anticipatory 로 변경*/
]# echo "anticipatory" > /sys/block/sda/queue/scheduler

/*변경 내용 확인*/
]# cat /sys/block/sda/queue/scheduler
noop [anticipatory] deadline cfq

/*Anticipatory 패라미터 확인*/
]# ls /sys/block/sda/queue/scheduler/iosched
antic_expire   est_time   read_batch_expire   read_expire   write_batch_expire   write_expire 

/*read_expire 확인*/
]# cat /sys/block/sda/queue/scheduler/iosched/read_expire
124

/*read_expire 변경 및 확인*/
]# echo "50 " > /sys/block/sda/queue/scheduler/iosched/read_expire
]# cat /sys/block/sda/queue/scheduler/iosched/read_expire
52

하지만 쉽지많은 않은법!!
위의 내용을 보면 read_expire 를 50으로 설정 했으나, 실제 set 된 read_expire 는 52 가 나온다!?
왜 이럴까잉?! 물론 오타는 아니다!!

실제 설정되는 단순 숫자 값을 적용 하는 것이라 나름의 연산을 거쳐 적용되며, 
해당 read_expire set 연산은 다음과 같다.

    100*((seek time / read_expire) + 1)

seek time 을 어떻게 확인하는 지는 정확히 모르겠으나 위와 같은 수식을 계산해보면 read_expire 에
50을 set 한경우 52가 나오는 것을 알수가 있다.

-----------------------------------------------------------------------------------------------------
* read_expire
    Controls how long until a request becomes "expired". It also controls the
    interval between which expired requests are served, so set to 50, a request
    might take anywhere < 100ms to be serviced _if_ it is the next on the
    expired list. Obviously it won't make the disk go faster. The result
    basically equates to the timeslice a single reader gets in the presence of
    other IO. 100*((seek time / read_expire) + 1) is very roughly the %
    streaming read efficiency your disk should get with multiple readers.

내가 잘못이해한건지 모르겠는데;;
수식은 계산해보면 
100((x+50)50) 이 되고, 이거슨 2(x+50) 이 되면 2x + 100 = 52 가 나와야 하는 데,
그럼 2x = -48 이 되고 x = -24, 근데 x == seek time ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


728x90
반응형

댓글