쓰기 디스크 캐시 플러시 알고리즘 조정

쓰기 디스크 캐시 플러시 알고리즘 조정

쓰기 캐시에 사용 가능한 메모리를 사용하고 싶습니다. Linux는 자동으로 이를 수행하지만 사용에 맞게 조정하고 싶은 이상한 플러시 알고리즘이 있습니다.

ddrescue최근에 디스크를 복사하는 데 사용했습니다 . 블록을 읽고 해당 블록을 디스크에 씁니다.

내가 원하는 것은 더 이상 여유 공간이 없을 때까지 읽기를 가능한 한 많이 읽은 다음 일부 공간이 비워질 때까지 차단하는 동시에 쓰기는 메모리를 확보하기 위해 가능한 한 빨리 쓰는 것입니다.

따라서 쓰기 디스크가 읽기 디스크보다 빠르면 메모리가 사용되지 않으며, 쓰기 디스크가 읽기 디스크보다 느리면 복사가 완료될 때까지 모든 메모리가 사용됩니다.

두 시나리오 모두에서 메모리 사용량은 일정하게 유지됩니다(다른 프로그램이 사용 가능한 메모리의 일부를 차지하지 않는 한).

그러나 내가 보는 것은 이것이다:

쓰기 캐시

읽기는 캐시를 채우고(쓰기가 거의 또는 전혀 수행되지 않는 동안) 캐시가 한계에 도달하면(또는 일정 시간이 지난 후) 읽기가 차단됩니다.모두캐시가 디스크에 기록됩니다. 그것은 마치 트롤이 가끔씩 '동기화'를 실행하는 것과 같습니다.

나는 /proc/sys/vm/dirty_*를 아무 소용이 없도록 변경해 보았습니다. 내가 유발할 수 있었던 유일한 변화는 상단의 높이입니다. 따라서 /proc/sys/vm/dirty_*를 언급하는 답변은 톱니 그래프를 측정 가능하게 평탄화하는 테스트된 값을 제공해야 합니다.

Linux에 최대한 빨리 쓰기를 시작하되 여유 공간이 있으면 읽기 또는 쓰기를 차단하지 않도록 조정하는 것이 내 목적에 가장 적합할 것입니다.

와 같은 도구를 알고 있습니다 mbuffer. 그래프를 평평하게 만들지만 동적이지 않고(예: 사용 가능한 메모리가 낮을 때 메모리 해제) 검색을 허용하지 않으므로 ddrescue(앞뒤로 검색해야 하는) 같은 프로그램에서는 작동하지 않습니다.

관련 정보