회전하는 드라이브에 대한 Linux I/O 스케줄러를 올바르게 조정하는 데 도움이 필요합니다.
대용량(4~16TB) 메모리 매핑 파일에 데이터를 쓰고 SHED_FIFO를 사용하는 프로세스가 있습니다. 그런 다음 커널은 나에게 알려지지 않은 경험적 방법을 기반으로 더티 페이지를 파일로 자동 플러시합니다. 데이터 쓰기 프로세스는 실시간이며 업무상 중요하므로 일괄 디스크 쓰기가 읽기보다 우선해야 합니다.
업무상 중요하지 않은 메모리 매핑을 통해 파일에서 데이터를 읽는 여러 다른 프로세스가 있습니다. 디스크가 쓰기 및 읽기를 따라잡을 수 없는 경우 쓰기에 영향을 주지 않고 가능한 한 빨리 읽기를 수행하여 머신의 메모리가 부족해지지 않도록 해야 합니다.
이제 다양한 I/O 스케줄러를 살펴보면 다음과 같은 동작을 발견했습니다.
- 마감일: 읽기 우선순위가 쓰기보다 높습니다.
- cfq: 읽기 및 쓰기 우선순위가 동일합니다.
읽기보다 쓰기를 우선시하는 스케줄러는 존재하지 않는 것 같습니다.
이제 내 초기 생각은 "cfq" 스케줄러를 사용한 다음 읽기 프로세스에서 높은 값을 가진 "ionic"을 사용하는 것이었습니다. 이론적으로 커널이 항상 더티 페이지를 올바르게 지울 수 있도록 허용해야 한다고 생각했습니까?
이게 정말 효과가 있나요? 더 좋은 방법이 있나요?
편집하다:
보고 있다"Linux 페이지 캐싱 및 pdflush의 개념에 대해"마감일 스케줄러의 일부 설정을 사용하는 것이 가능한 것 같습니다.
우리는 다음을 시도하고 있습니다:
- writes_starved: 2 (기본값) => 1
- write_expire: 5000 (기본값) => 500
- read_expire: 500 (기본값) => 5000
이것이 합리적으로 들리나요?
답변1
이오아니스각 프로세스의 우선순위를 변경할 수 있습니다. 내가 이해하는 바에 따르면, 쓰는 프로세스와 읽는 프로세스가 있습니다.매뉴얼 페이지CFQ 스케줄러와 함께 작동한다고 말합니다.