NFS 마운트에서 로컬 디스크로 200GB 파일을 복사하려고 합니다. 로컬 디스크는 RAID 5 시스템(하드웨어 RAID 컨트롤러) 위에 있는 LVM의 XFS 파일 시스템입니다.
rsync
전송 속도를 모니터링하는 데 사용하고 있습니다 . 처음에는 IO 속도가 약 200MB/s로 처음 18GB까지는 안정적입니다. 그러나 성능은 10~20배로 떨어지며 결코 초기 속도로 회복되지 않습니다. 때때로 속도가 약 50-100MB/s에 도달하지만 단지 몇 초 동안만 지속되다가 프로세스가 잠시 중단되는 것처럼 보입니다.
동시에 대상 파일 시스템의 모든 파일 상태 작업은 오랜 시간(분) 동안 차단됩니다. 또한 복사 프로세스를 중단하면 몇 분 동안 차단됩니다. 부분적으로 복사된 파일을 삭제하는 데에도 몇 분이 걸립니다.
이 문제의 원인은 무엇입니까?
답변1
jet 님의 댓글 덕분에 Linux에서 디스크 IO 캐싱에 대해 알아봤습니다. 시스템에 거의 무료인 RAM(48GB)이 많기 때문에 I/O 캐시에 많은 양이 사용되는 것으로 나타났습니다.
나는 /proc/meminfo를 모니터링하고 'Dirty'(더티 I/O 캐시 페이지) 및 'Writeback'(더티 페이지를 디스크에 기록) 필드를 찾았습니다.
watch -n1 -- "grep -E Dirty|Writeback /proc/meminfo"
Dirty가 약 18GB로 증가했다가 다시 감소하는 반면 Writeback은 증가하고 Dirty 페이지가 기록되면 다시 증가하는 등을 보여줍니다. iostat
하나를 사용하여 디스크 IO를 모니터링하면 디스크가 캐싱 중에 쓰지 않고 'Writeback' 동안에만 기록되는 것을 볼 수 있습니다. 데이터가 디스크에 기록되는 양이 줄어듭니다. 쓰기 속도는 약 15MB/s입니다.
따라서 처음 18GB는 빠르며 캐시에 기록되지만 실제 쓰기가 발생하면 속도가 느려지고 디스크 I/O를 쓰는 동안 모든 더티 페이지가 디스크에 전송될 때까지 차단됩니다.