web-dev-qa-db-ja.com

コピーは大きなiowaitを引き起こします

3台のHDDを備えた専用サーバーがあります。システムディスク、バックアップディスク(システムディスクと同じ)およびデータディスク。 cpを使用して(たとえば、バックアップディスクとデータディスクの間で)大量のデータをコピーすると、負荷の平均が非常に高くなります。

たとえば、現時点での平均負荷は約0.57ですが、データをコピーすると、50を超える可能性があります。

rsync and with --bwlimit=10000でコピーしても問題ありません。値が大きいほど、負荷が高くなります。

ファイルシステムはext3です。

sda-システムディスク:

% hdparm -Tt /dev/sda

/dev/sda:
 Timing cached reads:   13444 MB in  2.00 seconds = 6730.82 MB/sec
 Timing buffered disk reads:  232 MB in  3.02 seconds =  76.73 MB/sec

sdb-データディスク:

% hdparm -Tt /dev/sdb

/dev/sdb:
 Timing cached reads:   13740 MB in  2.00 seconds = 6879.30 MB/sec
 Timing buffered disk reads:  430 MB in  3.00 seconds = 143.10 MB/sec

sdc-バックアップディスク:

% hdparm -Tt /dev/sdc

/dev/sdc:
 Timing cached reads:   13796 MB in  2.00 seconds = 6907.75 MB/sec
 Timing buffered disk reads:  336 MB in  3.01 seconds = 111.45 MB/sec

iostat -x 1(コピーしない場合): http://Pastebin.com/4WKU7YPa

iostat -x 1(コピー時:sdc> sdb): http://Pastebin.com/fHafRCa8

% cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]

他の2つのディスクは現在「期限」ですが、同様に「cfq」でした。違いがあるかどうかを確認しようとしました。ありません。

ディスクを集中的に使用する操作は、サーバーを強制終了します。一部のプロセスがより多くのメモリを使用し、スワッピングが必要な場合、負荷は非常に高くなります。負荷が下がるように、サービスを強制終了しなければならない場合があります。スワッピングにより負荷が500になる場合がありました。

サーバーには4GB RAMおよびXeonX3220 @ 2.40GHzがあります。十分なRAMがない場合はパフォーマンスの低下を受け入れることができますが、コピーするだけではサーバーが停止することはありません。これは正しく継ぎ目がありません。

何が問題になるのか考えてみませんか?他に何を確認する必要がありますか?それは悪いマザーボードコントローラーでしょうか?

追加:

%fdisk -l

ディスク/ dev/sda:500.1 GB、500107862016バイト
 255ヘッド、63セクター/トラック、60801シリンダー
ユニット= 16065のシリンダー* 512 = 8225280バイト
 
デバイスブート開始エンドブロックIDシステム
/dev/sda1 * 1 13 104391 83 Linux 
/dev/sda2 14 1318 10482412+ 83 Linux 
/dev/sda3 1319 2623 10482412+ 83 Linux 
/dev/sda4 2624 60801 4673147855拡張
/dev/sda5 2624 3928 10482381 83 Linux 
/dev/sda6 3929 4189 2096451 82 Linuxスワップ/Solaris
/dev/sda74190 60670 453683601 83 Linux 
/dev/sda8 60671 60801 1052226 83 Linux 
 
ディスク/ dev/sdb:2000.3 GB、 2000398934016バイト
 255ヘッド、63セクター/トラック、243201シリンダー
ユニット= 16065のシリンダー* 512 = 8225280バイト
 
デバイスブート開始エンドブロックIDシステム
/dev/sdb1 1 243201 1953512001 83 Linux 
 
ディスク/ dev/sdc:500.1 GB、500107862016バイト
 255ヘッド、63セクター/トラック、60801シリンダー
ユニット= 16065のシリンダー* 512 = 8225280バイト
 
デバイスブート開始エンドブロックIDシステム
/dev/sdc1 * 1 60801 488384001 83 Linux 

%cat/proc/scsi/scsi

接続デバイス:
ホスト:scsi0チャネル:00 ID:00 Lun:00 
ベンダー:ATAモデル:WDC WD5002ABYS-0 Rev:02.0 
タイプ:直接-ANSI SCSIリビジョンにアクセス:05 
ホスト:scsi0チャネル:00 Id:01 Lun:00 
ベンダー:ATAモデル:WDC WD2003FYYS-0リビジョン:01.0 
タイプ:直接-アクセスANSISCSIリビジョン:05 
ホスト:scsi1チャネル:00 ID:00 Lun:00 
ベンダー:ATAモデル:WDC WD5002ABYS-0リビジョン:02.0 
タイプ:直接アクセスANSI SCSIリビジョン:05 
1
Vald

あなたは私と同じケースだと思います ダーティページをたくさん生成すると同期書き込みがブロックされます

トッププロセスの中でkjournald。

ext3のようなジャーナリングファイルシステムを使用しているため、同期書き込みがブロックされているようです。

あなたが試すことができます

プロセスが作成できるダーティメモリの量を減らす:

echo 100000000 > /proc/sys/vm/dirty_background_bytes
echo 200000000 > /proc/sys/vm/dirty_bytes 

コピーを行うプロセスは、一度に多くを書き込むことができなくなります。データの一部を書き込み、次の部分を書き込む前にこのデータがディスクにフラッシュされることを確認します。これにより、ジャーナリングスレッドが処理する量が多すぎず、コピーの実行中に他のプロセスからの要求を処理できるようになります。

Ddを使用してコピーを実行し、同期して書き込みを行っていることを確認することもできます。

dd if=foo of=bar bs=4096 oflag=sync

これにより、ブロックが少しずつ書き込まれるようになります。

また、ユースケースに一致する場合は、リスクを理解していれば、宛先フォルダーのジャーナリングを削除できます。オプションを使用して(ext3と思いますか?)ファイルシステムを再マウントできます

data=writeback

これらは私が私のシステムで試したものです。この質問は2年前に開かれましたが、その間に解決策を見つけましたか?

1
freedge