I/O 스케줄링

Jongwon·2021년 12월 8일
0

Linux Programming

목록 보기
14/25

입출력 스케줄러

디스크의 Seek Time을 최소화 하기 위해 순서를 조작하여 탐색횟수와 서비스 시간을 최소화 하는 것.

주요 역할

  • 인접한 요청들을 하나의 요청으로 병합
  • 입출력 요청을 오름차순으로 정령

읽기는 요청 즉시 서비스되어야 하는 반면에, 쓰기는 버퍼 캐시에 데이터를 모아두고 처리할 수 있기 때문에 읽기가 쓰기보다 우선순위가 높다.

리눅스 스케줄러

  • 리눅스 엘리베이터(리눅스 2.4) : 헤드가 한 방향으로 가면서 순차적으로 서비스를 제공하고, 정해진 시간 이상 대기한 starving 상태는 삽입정렬을 멈추고 먼저 해결
  • 리눅스 2.6 스케줄러
    • 데드라인(Deadline)
    • 예측(Anticipatory) : 성능이 좋았던 프로세스에 대해 다른 요청이 와도 잠시 대기
    • CFQ : 공평하게 스케줄링 제공
    • NOOP : 스케줄링을 하지 않음
      Anticipatory나 CFQ는 HDD에서 사용하고, NOOP은 SSD에서 사용

최적화 방법

  • 같은 디렉토리에 속할수록 물리적으로 인접할 확률 높음
  • 아이노드 번호 순서대로 물리블록이 정렬될 가능성이 높음(fstat, lstat, stat)
  • 파일의 물리 디스크블록을 통해 입출력을 할 수 있음. (ret=icotl(fd, FIBMAP, &block)
    => 위 함수들은 다음 velog에서 나온다.
profile
Backend Engineer

0개의 댓글