Linux

IO scheduler

exponee 2022. 8. 29. 12:34

I/O Scheduler는 Block Layer에 해당하며, file system으로부터 bio structure에 대한 request submit을 받아 Block I/O에 대한 동작 요청을 I/O Request queue로 효율적으로 전달하는 역할을 한다.

 

여기서 효율적으로 라는 말에 집중을 해보자.

왜 효율적으로 해야할까? 갑자기 효율적이라는 말이 왜 나온 것일까?

그러기 위해서는 우선 Block I/O에 대해서 알아보아야 한다.

Block device는 개별 byte 단위가 아닌 일정 크기 (block) 단위로 접근하는 장치를 말한다.

그 예로 하드디스크와 같은 대용량 저장 장치를 들 수 있다.

전통적으로 이런 Block device는 Character device와는 다르게 파일 시스템이라고 하는 추상화 계층을 통해 간접적으로 접근하게 되며 따라서 프로그래머는 해당 저장 장치가 어떠한 종류의 장치인지와는 무관하게 일관된 방식으로 장치를 이용할 수 있는 것이다.

 

이런 하드디스크의 특징 중 하나는 읽고자하는 영역(LBA)의 순서를 어떻게 설정하느냐에 따라 성능이 크게 차이날 수 있다는 것이다.

따라서 다양한 알고리즘을 가진 I/O scheduler가 등장하게 되었다.

 

그럼 몇가지 스케쥴러에 대해 알아보도록 하자.

 

1. NOOP scheduler

No Operation scheduler. 즉 아무것도 하지 않는 scheduler이다.

SSD나 반도체 디스크 등 성능 좋은 디스크를 사용할 경우 굳이 scheduler가 아무것도 하지 않아도 SSD가 내부 scheduling 정책을 이용하여 I/O를 빠르게 서비스 해 줄 수 있기 때문에 선택하곤 한다.

커널은 아무것도 하지 않으므로 부하를 더욱 줄일 수 있다는 생각이 기저에 있다.

 

2. Deadline scheduler

I/O 대기시간의 deadline을 정해놓고, 그것이 가까운 lba부터 먼저 처리한다.

처리량보다는 지연에 최적화 된 스케줄링을 한다.

읽기 및 쓰기를 모두 균형있게 처리한다.

몇몇 프로세스가 많은 수의 I/O를 발생시키는 환경에 적합하다.

데이터 베이스의 파일 시스템에 많이 사용된다.

 

 3. CFQ (Completely Fair Queueing) scheduler

프로세스마다 I/O queue를 가지고 최대한 균등하게 서비스하도록 예약한다.

많은 프로세스들이 세세한 I/O 를 많이 발생시킬 때 사용하면 좋다.

'Linux' 카테고리의 다른 글

Tmux 입문하기  (0) 2022.06.21