6.4.3. Noop

Noop I/O 스케줄러는 간단한 FIFO (first-in first-out) 스케줄링 알고리즘을 구현합니다. 요청 병합은 일반 블록 계층에서 발생하지만 이는 마지막 적중 항목 캐시입니다. 시스템이 CPU에 바인딩되어 있고 스토리지가 빠른 경우 이는 최상의 I/O 스케줄러가 됩니다.
블록 계층에서 사용할 수 있는 튜닝 가능한 매개 변수는 다음과 같습니다.

/sys/block/sdX/queue의 튜닝 가능한 매개 변수

add_random
일부 경우 /dev/random에 대한 엔트로피 풀에 기여하고 있는 I/O 이벤트의 오버헤드는 측정 가능합니다. 이러한 경우 이 값을 0로 설정하는 것이 좋습니다.
max_sectors_kb
기본값으로 디스크에 전송되는 최대 요청 크기는 512 KB입니다. 이 매개 변수는 값을 늘리거나 줄일 수 있습니다. 최소 값은 논리 블록 크기에 의해 제한되고 최대 값은 max_hw_sectors_kb에 의해 제한됩니다. I/O 크기가 내부 소거 블록 크기를 초과하면 성능이 악화되는 일부 SSD가 있습니다. 이러한 경우 max_hw_sectors_kb를 소거 블록 크기로 줄이는 것이 좋습니다. iozone 또는 aio-stress와 같은 I/O 생성기를 사용하여 레코드 크기를 512 바이트에서 1 MB로 변경하는 것과 같이 이를 테스트할 수 있습니다.
nomerges
이 매개 변수는 주로 디버깅에 도움이 됩니다. 대부분의 워크로드는 요청 병합 (SSD와 같은 고속 스토리지에서도)에서 혜택을 받을 수 있습니다. 하지만 일부 경우 미리 읽기 또는 임의 I/O를 수행하지 않고 스토리지 백엔드에서 처리할 수 있는 IOPS 수를 알고자 하는 경우와 같이 병합을 비활성화하는 것이 좋은 경우도 있습니다.
nr_requests
각 요청 큐에는 읽기 및 쓰기 I/O 마다 할당할 수 있는 총 요청 디스크립터 수에 제한이 있습니다. 기본값은 128이며 이는 프로세스를 수면 상태로 두기 전 한 번에 128 개의 읽기 및 128 개의 쓰기를 대기열에 둘 수 있음을 의미합니다. 수면 상태에 있는 프로세스는 요청 할당을 시도하는 다음 것으로 사용 가능한 모든 요청을 할당한 프로세스일 필요는 없습니다.
대기 시간에 민감한 애플리케이션이 있는 경우, 요청 큐에서 nr_requests의 값을 낮추고 스토리지의 명령큐 깊이를 낮은 (1 정도로 낮은) 수치로 제한하는 것이 좋습니다. 이렇게 하면 다시 쓰기 I/O는 사용 가능한 모든 요청 디스크립터를 할당할 수 없으며 쓰기 I/O로 장치 큐를 채울 수 없습니다. nr_requests가 할당되면 I/O를 실행하는 다른 모든 프로세스가 요청을 사용할 수 있을 때 까지 대기하기 위해 수면 상태로 됩니다. 이로 인해 요청을 (하나의 프로세스가 빠르게 순차적으로 모두 소비하는 것이 아니라) 라운드 로빈 방식으로 분배하기 때문에 공정성이 유지됩니다. 이는 기본 CFQ 설정이 이러한 상황에 대해 보호하려는 것으로 데드라인 또는 noop 스케줄러 사용시에만 문제가 되는 점에 유의합니다.
optimal_io_size
상황에 따라 기초적인 스토리지가 최적의 I/O 크기를 보고합니다. 이는 최적의 I/O 크기가 스트라이프 크기로 되는 하드웨어 및 소프트웨어 RAID에서 가장 일반적인 것입니다. 값이 보고되면 애플리케이션은 가능한 최적의 I/O 크기로 조정되어 그 배수의 I/O를 실행합니다.
read_ahead_kb
운영 체제는 애플리케이션이 파일 또는 디스크에서 데이터를 순차적으로 읽을 때 이를 감지할 수 있습니다. 이러한 경우는 지능형 미리 읽기 알고리즘을 실행하여 사용자가 요청한 데이터보다 더 많은 테이터를 디스크에서 읽습니다. 즉 사용자가 다음 데이터 블록을 읽으려고 할 때 해당 데이터가 이미 운영 체제의 페이지 캐시에 있는 것입니다. 이것의 가능한 단점은 운영 체제가 디스크에서 필요 이상의 데이터를 읽을 수 있다는 것입니다. 이로 인해 메모리 압력이 높아져 데이터가 삭제될 때 까지 데이터는 페이지 캐시의 공간을 차지하게 됩니다. 이러한 상황에서 여러 프로세스가 미리 읽기를 잘못 실행할 경우 메모리 압력이 높아질 수 있습니다.
장치 매퍼 장치의 경우 read_ahead_kb 값을 8192와 같이 큰 값으로 하는 것이 좋습니다. 이는 장치 매퍼 장치가 여러 기초적인 장치로 구성되어 있기 때문입니다. 이 값을 매핑하려는 장치의 수를 곱한 기본값 (128 KB)으로 설정하면 튜닝을 위한 좋은 출발점이 됩니다.
rotational
기존 하드 디스크는 회전 (회전 원반으로 구성)했었지만 SSD는 다릅니다. 대부분의 SSD는 이를 제대로 알리지만 이러한 플래그를 정확하게 알리지 않는 장치의 경우 회전을 0으로 수동 설정해야 합니다. 회전이 비활성화된 경우 비회전 미디어에서 검색 작업에 약간의 패널티가 있기 때문에 I/O 엘레베이터는 검색을 줄이기 위해 논리를 사용하지 않습니다.
rq_affinity
I/O 완료는 I/O를 실행한 CPU와 다른 CPU에서 처리할 수 있습니다. rq_affinity1로 설정하면 커널은 I/O가 실행된 CPU에 완료를 전달합니다. 이는 CPU 데이터 캐싱 효과를 개선할 수 있습니다.

Red Hat의 최신 제품 문서 번역을 신속하게 제공하기 위해 이 페이지에는 영어 원본을 한국어로 자동 번역한 내용이 포함되어 있을 수 있습니다. [자세한 내용보기]