6.4.2. 데드라인 I/O 스케줄러
데드라인 I/O 스케줄러는 요청에 대해 약속된 대기 시간을 제공하려 합니다. 요청이 I/O 스케줄러에 도달해야만 대기 시간 측정이 시작됨에 유의합니다 (애플리케이션이 요구 디스크립터가 해제될 때 까지 대기하며 수면 상태로 될 수 있으므로 이는 중요한 차이입니다). 기본값으로 쓰기 보다 읽기가 우선합니다. 이는 애플리케이션이 읽기 I/O를 차단할 가능성이 더 높기 때문입니다.
데드라인은 배치로 I/O를 보냅니다. 배치는 LBA 오름 차순으로 (편도 엘리베이터) 증가하는 읽기 또는 쓰기 I/O의 연속적 순서입니다. 각 배치를 처리한 후 I/O 스케줄러는 쓰기 요청이 장시간 사용되지 않았는지를 확인하고 읽기 또는 쓰기의 새로운 배치를 시작할 지에 대한 여부를 결정합니다. 요청 FIFO 목록은 각 배치를 시작할 때 만료된 요청이 있는지를 확인하고 그 후에 배치의 데이터 방향만을 확인합니다. 따라서 쓰기 배치가 선택되고 만료된 요청이 있을 경우 해당 읽기 요청은 쓰기 배치가 완료될 때 까지 실행되지 않습니다.
조정 가능한 매개 변수
fifo_batch
- 이는 단일 배치에서 실행할 읽기 또는 쓰기 수를 지정합니다. 기본값은
16
입니다. 이를 높은 값으로 설정하면 처리량은 향상되지만 대기 시간은 길어질 수 있습니다. front_merges
- 워크로드가 전면 병합을 생성하지 않는 경우 이 매개 변수를
0
으로 설정할 수 있습니다. 이 체크의 오버헤드를 측정하지 않는 한 기본 설정 (1
) 그대로 두는 것이 좋습니다. read_expire
- 이 매개 변수로 읽기 요청이 실행되는 시간을 밀리초 단위로 설정할 수 있습니다. 기본값은
500
밀리초 (0.5초)로 설정되어 있습니다. write_expire
- 이 매개 변수로 쓰기 요청이 실행되는 시간을 밀리초 단위로 설정할 수 있습니다. 기본값은
5000
밀리초 (5초)로 설정되어 있습니다. writes_starved
- 이 매개 변수는 단일 쓰기 배치 처리 전 처리할 수 있는 읽기 배치 수를 제어합니다. 이 값을 높게 설정할 수록 읽기가 우선이 됩니다.