200 GB のファイルを NFS マウントからローカル ディスクにコピーしようとしています。ローカル ディスクは、RAID 5 システム (ハードウェア RAID コントローラ) 上の LVM 上の XFS ファイルシステムです。
転送速度を監視するために使用していますrsync
。最初は、IO 速度は約 200MB/秒で、最初の 18GB は安定しています。しかし、その後、パフォーマンスは 10 ~ 20 分の 1 に低下し、最初の速度に回復することはありません。時々、約 50 ~ 100MB/秒に達しますが、それはほんの数秒で、その後、プロセスがしばらくハングしているように見えます。
同時に、ターゲット ファイルシステム上のすべてのファイル統計操作が長時間 (数分間) ブロックされます。また、コピー プロセスの中断も数分間ブロックされます。部分的にコピーされたファイルのその後の削除にも数分間かかります。
この原因は何だと思いますか?
答え1
jet のコメントのおかげで、Linux でのディスク IO のキャッシュについて調べました。システムには大量の RAM (48GB) があり、ほとんど空いているため、I/O キャッシュに多くのメモリが使用されていることがわかりました。
/proc/meminfo を監視し、「Dirty」(ダーティ I/O キャッシュ ページ)フィールドと「Writeback」(ディスクに書き込まれたダーティ ページ)フィールドを探しました。
watch -n1 -- "grep -E Dirty|Writeback /proc/meminfo"
ダーティが約 18 GB まで増加し、その後再び減少し、ライトバックが増加し、ダーティ ページが書き込まれると再び増加するなどしていることiostat
がわかります。ディスク IO を監視すると、キャッシュ中はディスクへの書き込みが行われず、「ライトバック」が減少している間のみデータがディスクに書き込まれることがわかります。書き込み速度は約 15 MB/秒です。
したがって、最初の 18 GB は高速で、キャッシュに書き込まれますが、実際の書き込みが発生すると速度が低下し、書き込み中はディスク I/O が飽和状態になり、すべてのダーティ ページがディスクに送信されるまでブロックされます。