Linux는 동일한 파일에 대해 동시 읽기를 수행할 때 미리 읽습니다.

Linux는 동일한 파일에 대해 동시 읽기를 수행할 때 미리 읽습니다.

파일을 순차적으로 읽을 때 Linux는 미리 읽기를 수행합니다(/sys/block//queue/read_ahead_kb에 지정됨).

관심 있는 운영 체제: 레드햇 리눅스 관심 있는 파일 시스템:xfs, ext4

순차 읽기가 완료되었는지 여부를 결정하는 기준은 무엇입니까?준비 사용을 고려하십시오(https://man7.org/linux/man-pages/man2/pwrite.2.html) 동일하거나 다른 FD를 사용합니다.

예를 들어

같은 FD. 읽기 위치 10-20-30-78-89 (seq 읽기 이상) - 40-50-60-70 - 23-34 (seq 읽기 이상) - 80-90-100...

이 경우 위의 미묘한 순서가 잘못된 읽기로 인해 미리 읽기가 방지됩니까?

그렇다면 두 개의 서로 다른 FD를 사용하면 이 문제가 해결됩니까(즉, 별도의 FD를 사용하여 78-89-23-34를 읽음)? (즉, 미리 읽기는 평소처럼 10-20-30-40-50 읽기를 수행합니다)

답변1

이 경우 위의 미묘한 순서가 잘못된 읽기로 인해 미리 읽기가 방지됩니까?

예, 동일한 파일 설명자에서 순서가 잘못된 읽기는 미리 읽기에 영향을 미칠 수 있지만 커널은 이를 고려하려고 합니다. 적어도 순차 읽기와 병렬로 진행되는 작은 "무작위" 읽기의 경우입니다. 바라보다주문형 미리 읽기 설계에 대한 설명, 특히:

인터리빙된 순차 읽기에서는 동일한 fd의 동시 스트림이 서로의 미리 읽기 상태를 무효화할 수 있습니다. 따라서 PG_readahead를 사용하여 (start+size-async_size)의 새 미리 읽기 페이지를 표시하고 이를 미리 읽기 표시기로 사용합니다. 무의미한 미리 읽기를 피하기 위해 이미 캐시된 페이지에는 이 플래그가 설정되지 않으므로 무의미한 페이지 캐시 조회가 저장됩니다.

다음을 보면 얼마나 적용 가능한지 알 수 있습니다.ondemand_readahead, 특히그 매력try_context_readahead그리고 주변 댓글들.

항상 그렇듯이, 성능 병목 현상을 제거하려고 할 때 힌트를 제외하고 잠재적인 병목 현상을 고려해서는 안 됩니다. 자신만의 벤치마크를 설계하고 특정 시나리오의 성능 특성을 분석해야 합니다. 예를 들어 순차 읽기의 미리 읽기로 인해 잘못된 순서의 읽기가 이미 페이지 캐시에 있는 페이지에만 적중하는 경우가 있을 수 있습니다.

관련 정보