Linux I / O 스케줄러 선택



Answers

udev 규칙을 사용하여 hw의 일부 특성을 기반으로 시스템이 스케줄러를 결정하도록 할 수 있습니다.
SSD 및 기타 비 회전식 드라이브의 예제 udev 규칙은 다음과 같습니다.

# set noop scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"

새로운 udev rules 파일 (예 : /etc/udev/rules.d/60-ssd-scheduler.rules ) 내에 있습니다. 이 답변은 wiki.debian.org/SSDOptimization#Low-Latency_IO-Scheduler 기반으로합니다.

ssd 디스크가 규칙을 사용하는지 여부를 확인하려면 미리 트리거 속성을 확인할 수 있습니다.

for f in /sys/block/sd?/queue/rotational; do printf "$f "; cat $f; done
Question

/ sys / block / [disk] / queue / scheduler에 쓰면 실행중인 커널의 특정 장치에 대한 I / O 스케줄러를 변경할 수 있다고 읽었습니다. 예를 들어 내 시스템에서 볼 수 있습니다.

anon@anon:~$ cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq] 

기본값은 완전히 공정한 대기열 스케줄러입니다. 내가 궁금해하는 점은 커스텀 커널에 4 개의 스케쥴러를 모두 포함시켜야한다는 것이다. 커널이 정확한 하드웨어, 특히 플래시 기반 드라이브를위한 'noop'스케줄러와 전통을위한 다른 스케줄러 중 하나를위한 올바른 스케줄러를 선택하기에 충분히 똑똑하지 않은 한, 하나 이상의 스케줄러가 컴파일되는 데 많은 포인트가 없다. 하드 드라이브.

이 경우인가요?




Linux 커널은 런타임에 IO 스케줄러를 자동으로 변경하지 않습니다. 즉, 현재의 리눅스 커널은 보조 기억 장치의 유형에 따라 "최적의"스케줄러를 자동으로 선택할 수 없습니다. 시동시 또는 런타임 중에 IO 스케줄러를 수동으로 변경할 수 있습니다 .

기본 스케줄러는 /linux-2.6/block/Kconfig.iosched에있는 파일의 내용에 따라 시작시 선택됩니다. 그러나 실행 스케줄러는 / sys / block / [DEV] / queue / scheduler에있는 파일에 유효한 스케줄러 이름을 echo 하여 변경할 수 있습니다. 예를 들어, echo deadline > /sys/block/hda/queue/scheduler




Links