Linux에서 소프트웨어 RAID 및 LVM을 사용할 때 어떤 IO 스케줄러 및 미리 읽기 설정이 적용됩니까?


28

여러 계층 (실제 드라이브-> md-> dm-> lvm)의 경우 스케줄러, 미리 읽기 설정 및 기타 디스크 설정은 어떻게 상호 작용합니까?

mdadm으로 만든 소프트웨어 RAID 장치 (/ dev / md0)의 모든 부분에 여러 디스크 (/ dev / sda-/ dev / sdd)가 있다고 가정합니다. 각 장치 (물리 디스크 및 / dev / md0 포함)에는 IO 스케줄러 ( 이렇게 변경됨 ) 및 미리 읽기 ( blockdev를 사용하여 변경됨 )에 대한 자체 설정이 있습니다. dm (crypto) 및 LVM과 같은 것을 던지면 자체 설정으로 더 많은 레이어를 추가합니다.

예를 들어, 물리적 장치에 128 블록보다 먼저 읽기가 있고 RAID에 64 블록의 미리 읽기가있는 경우, / dev / md0? md 드라이버는 물리적 장치 드라이버가 128 블록 읽기로 변환되는 64 블록 읽기를 시도합니까? 아니면 RAID readahead가 기본 장치로 "통과"되어 64 개의 블록 읽기가 발생합니까?

스케줄러에 대해 같은 종류의 질문이 있습니까? 여러 계층의 IO 스케줄러와 이들이 상호 작용하는 방식에 대해 걱정해야합니까? 또는 / dev / md0이 기본 스케줄러를 효과적으로 재정의합니까?

이 질문에 대한 답을 찾기 위해 스케줄러와 도구에 대한 흥미로운 데이터를 찾았습니다.

답변:


7

md0에서 읽은 경우 md0에 대한 미리 읽기가 사용됩니다. md0의 구성 요소 인 sda에서 읽은 경우 sda 설정을 사용합니다. 장치 매퍼는 I / O를 여러 읽기로 나누고 RAID를 수행하기위한 쓰기를 수행하지만, 읽기 / 쓰기가 수행되는 블록 캐시 계층 아래에 ​​있습니다. 스토리지 스택은 다음과 같습니다.

파일 시스템-O_DIRECT로 열 때 캐시를 우회

캐시 캐시-미리 읽기, 쓰기 캐시, 스케줄러

장치 매퍼-dm, lvm, 소프트웨어 RAID, 스냅 샷 등

sd-디스크 드라이버

SCSI-오류 처리, 장치 라우팅

하드웨어 드라이버-scsi 카드, FC 카드, 이더넷

당신이 할 때 참고

dd if=/dev/sda of=foo

sda를 파일로 읽고 있으므로 블록 캐시를 겪고 있습니다. 디스크로 직접 이동하려면

dd if=/dev/sda of=foo iflag=direct

I / O 엘리베이터 스케줄러는 디스크 드라이버 (sd)에만 존재합니다. / sys / block / md 또는 / sys / block / dm에는 대기열 디렉토리가 없습니다. 디스크 엘리베이터 정렬은 한 번만 수행하십시오.


2
거기입니다 /sys/block/md0/queue/scheduler내 시스템,하지만 거기에있는 유일한 선택입니다 none.
피터 아이젠 트라우트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.