Write동작은 버퍼에 밀어넣고 버퍼에서 Merge 및 Sort를 하여 일련의 연속된 Write동작으로 처리될수 있습니다. 하지만 이 과정에서 Read동작이 끼어들게 되면 I/O요청순서에 입각하여 처리되면서 연속적인 Read동작을 하지 않게 되고 자주 Seek하면서 성능이 극대화 되기 힘들게 됩니다. 이러한 I/O Scheduler의 동작에 의한 현상을 "Writes-starving-reads"라고 합니다.
Effects of High Read Latency
논리적으로 연속적인 커다란 Data를 Read하는 중에 작은 Data를 읽는 동작이 끼어들게 되면 작은 Data를 Read하는것에 대하여 어떤것에 성능의 초점을 맞춰야 하는지에 대한 갈등의 문제가 생깁니다. 이것을 "Effects of High Read Latency"라고 합니다.
논리적인 연속적인 Data A와 B가 있을때 한번의 Read요청으로 A를 Read하고 다음 요청이 B를 Read하고 그 다음 요청이 이전의 A Read위치의 다음에 위치한 부분인 경우를 위해서 처음 A의 Read요청이 완료된후 일정시간 Seek위치를 유지하는 방식으로 연속적인 Data Read에 대한 성능에 초점을 맞춘 방식입니다.
각 Process별로 Queue를 소유하고 주어진 Time Slice동안 Round robin방식으로 작업을 처리하도록 하는 방식인데 만약 Time Slice를 전부 소모하지 않은 상태에서 Queue를 모두 처리한 경우 일정시간을 기다리면서 다른 요청을 추가적으로 기다려주는 조건을 포함합니다. 동기적인 요청(Read)이 비동기적인 요청(Write)보다 우선순위가 높게 처리되는 특성을 가지고 있고 Writes-Starving-Reads 현상을 어느정도 개선하는 방식입니다.