동기화 작업의 진행 상황을 볼 수 있나요?

동기화 작업의 진행 상황을 볼 수 있나요?

저는 비동기 모드를 사용하여 Linux 시스템에 탑재된 USB 디스크에 대용량 파일을 복사했습니다. 이렇게 하면 비교적 빨리 명령 프롬프트로 돌아오지만 을 입력하면 sync물론 모든 것을 디스크에 기록해야 하므로 시간이 오래 걸립니다.

속도가 느리다는 것은 알지만 카운터가 0으로 떨어지는 것을 볼 수 있는 곳이 있나요? 지켜보는 것은 도움이 buffers되지 top않습니다.

답변1

모든 데이터가 흘러나오면서 시간이 지남에 따라 숫자가 줄어드는 /proc/meminfo것을 관찰하세요 . 일부 데이터는 오버플로될 수도 있습니다. 이는 모든 장치에 대한 요약이지만 시스템의 한 장치가 다른 장치보다 훨씬 느린 경우 대기열에 있는 모든 장치가 이와 관련되어 있는 경우가 많습니다. 이 숫자는 시작할 때 매우 크고 끝날 때 거의 동시에 0에 가까워지는 것을 알 수 있습니다. 대화형 디스플레이에 이것을 시도해 보십시오:DirtyWritebackDirtysync

watch -d grep -e Dirty: -e Writeback: /proc/meminfo

일반 디스크에서는 일반적으로 무시할 수 있지만 WritebackUSB 전송 경로에서 더 자주 나타나는지는 확실하지 않습니다. 뚜렷한 추세 없이 오르락내리락하는 경우라면 숫자만 봐도 알 수 있습니다 Dirty.

답변2

/sys/block/<device>/stat동기화하는 동안 장치의 파일을 볼 수 있습니다. 9 열에 는 기기에서 진행 중인 요청 수가 표시되며, 동기화가 완료되면 이 요청 수는 0으로 낮아집니다.
이것을 바이트 수로 변환하는 방법은 모르지만 처리 대기 중인 "작업"의 양이 얼마나 되는지 대략적으로 알 수 있습니다.

보다통계.txt자세한 내용은 커널 문서의 파일을 참조하세요. (내 시스템의 해당 디렉토리에는 읽기 및 쓰기 요청이 포함된 것처럼 보이는 파일도 있지만 inflight이에 대한 문서를 찾을 수 없습니다.)

답변3

Greg의 답변을 사용하면 sync메모리의 더티 블록 상태를 표시하면서 백그라운드에서 간단히 실행할 수 있습니다.

이를 달성하려면 다음 명령을 실행하십시오.

sync & watch -n 1 grep -e Dirty: /proc/meminfo

이는 전면에서 실행되는 sync동안 백그라운드에서 호출 됩니다 . 명령이 완료 watch되면 sync(대략 더티 블록 크기가 0에 도달할 때) 다음과 같은 출력을 얻게 됩니다.

1]  + 27260 done        sync

이는 명령이 완료되었으며 + 로 종료할 수 있음을 의미합니다 watch.CtrlC

답변4

다음 명령을 사용하여 현재 블록 장치 I/O 트래픽을 볼 수 있습니다.니몬,좋다:

NMON=ld nmon -s1

(이것은 로드 그래프와 디스크 그래프가 1초의 새로 고침 시간으로 표시되도록 미리 선택합니다. 이는 또한 , 를 누르는 nmon대신 매개 변수 없이 실행하여 그래프를 전환하고 새로 고침 시간을 기본 2초에서 단축하여 설정할 수도 있습니다. 물론 새로 고침 지연이 증가합니다.)ld-+

관련 정보