
커널의 I/O 스케줄러에 대한 최선의 선택이 무엇인지 알아내는 것은 나에게 어려운 일이었습니다. 처음에는 그것이 주관적이며 사용하는 파일 시스템에 따라 다르다는 것을 배웠습니다.
No-op
확실히 SSD(Solid Sate Drive)를 사용해야 한다는 것을 알고 있습니다 .
내가 알고 싶은 것은 Ext4 및 NTFS 파일 시스템(MBR 스타일)을 포함하는 일반(회전) HDD에 대한 최선의 선택입니다.
그리고 GPT나 MBR이 내가 선택하는 데 영향을 미치나요?
답변1
솔리드 스테이트 드라이브나 SSD에는 확실히 No-op를 사용해야 한다는 것을 알고 있습니다.
반드시 그런 것은 아닙니다. 왜 사람들이 SSD를 다른 스케줄러의 이점이 필요하지 않은 특별한 경우로 계속 취급하는지 모르겠습니다. 회전하는 디스크가 있다는 것은 요청을 병합하는 것이 더 중요하다는 것을 의미합니다. 요청 병합은 스케줄러가 수행하는 작업 중 하나일 뿐입니다.
CFQ, 마감일 등은 모두 그 이상을 수행합니다. 예를 들어 CFQ를 사용하면 (을 통해 ionice
) 특정 프로세스에 다른 프로세스보다 우선순위를 부여할 수 있는 반면 Deadline은 대기 시간을 보장합니다. 이들 중 하나는 여전히 SSD와 관련이 있을 수 있습니다.
디스크 회전을 제거한다는 것은 스케줄러 결정이 단순히 요청을 병합하는 것이 아니라 디스크와의 대역폭을 분할하는 방법에 대해 더 많이 결정하게 될 것임을 의미합니다.
편집하다:또한 내 시스템에서는 튜너블을 사용하여 (스케줄러에 관계없이) 병합을 끌 수 있다는 점도 지적하겠습니다 /sys/block/sdXX/queue/nomerges
. Deadline은 전면 병합을 비활성화하기 위한 조정 기능도 제공합니다.
내가 알고 싶은 것은 ext4 및 NTFS 파일 시스템을 포함하는 일반(회전) HDD에 대한 최선의 선택입니다. (MBR 스타일).
스케줄러 선택은 사용 중인 파일 시스템에 크게 의존하지 않을 수 있습니다. 어쨌든 덴트리와 자주 사용되는 파일은 파일 시스템 캐시에 남게 됩니다. 어느 쪽이든 스케줄러 중 어느 것도 하나의 파일 시스템(XFS, ext3, ext4+extents, reiserfs 등)에 도움이 되는 기능을 갖고 있지 않은 것 같습니다.
NTFS는 심하게 조각화되는 경향이 있으므로 더 작은 것이 read_ahead_kb
유리할 수 있습니다(어떤 것이 적합한지 확인하려면 직접 사용해 보아야 합니다). 기본적으로 볼륨이 심하게 조각화되어 있는 경우 인접 데이터를 가져오는 것은 아마도 합법적인 요청에 사용될 수 있는 대역폭을 질식시킬 것입니다.
그리고 GPT/MBR은 이 결정에 전혀 영향을 미치지 않습니다.