web-dev-qa-db-ja.com

サーバーディスクのパフォーマンスを向上させる方法

Ubuntu 10.04 LTSを実行しているHP Microserverがあります。 5つの内部ドライブベイを備えた低電力サーバーです。ネットワーク経由でリモートサーバー、VPS、ローカルラップトップをバックアップするために使用します。ディスクから最高のパフォーマンスを取得したいのですが、最適にセットアップされているかどうかわからないので、アドバイスを探しています。

私のサーバーは、リモートホストをバックアップするために1日に複数回rsnapshotを実行します。実際の増分バックアップの部分には、ほとんど時間がかかりません。次のようなことをするのにかなりの時間が費やされます。

/bin/cp -al /srv/rsnapshot/hourly.0 /srv/rsnapshot/hourly.1

約2時間かかります。私はそこに膨大な数の小さなファイルがあることに気付きます。

$ Sudo du -hs hourly.1
659G    hourly.1

また、rsnapshotが古いバックアップを削除する場合、これには長い時間がかかる場合があります-

/bin/rm -rf /srv/rsnapshot/daily.6/

約30分かかります。

私の質問は次のとおりです。サーバーの構成といくつかのIO統計の詳細を以下に示します。もちろん、必要に応じてより多くのデバッグ情報を提供できます。

ボトルネックの場所を特定するにはどうすればよいですか

このボックスで何ができるか(IOの観点から)の限界に達しているでしょうか?

実行可能なパフォーマンスの調整はありますか?

別のRAIDレベルを使用する必要がありますか?

2つの内部RAIDディスク(各ミラーの半分)を外部アレイ上の2つの「他のミラーの他の半分」と交換するのは理にかなっていますか?

注:私は自分のカーネルをコンパイルするようなことをやる気はありません。理想的には、10.04 LTSに固執したいと思いますが、後のバージョンでこれがすべてより速く動作するようにするいくつかの魔法がない限り。

内部的にサーバーには1x160GB SATAブートディスクと4x2TBディスクがあります:

Disk /dev/sde: 160.0 GB, 160041885696 bytes
Disk /dev/sdf: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdh: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdi: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdg: 2000.4 GB, 2000398934016 bytes

4つの内部2TBディスクは、ソフトウェアMD RAID10セットアップにあります。

md0 : active raid10 sdg1[3] sdh1[0] sdi1[2] sdf1[1]
      3907023872 blocks 64K chunks 2 near-copies [4/4] [UUUU]

さらに、PCI-E eSATAカードを介して接続され、500GBの4つのドライブを含む外部Edge10ドライブエンクロージャーがあります。

Disk /dev/sda: 500.1 GB, 500107862016 bytes
Disk /dev/sdb: 500.1 GB, 500107862016 bytes
Disk /dev/sdc: 500.1 GB, 500107862016 bytes
Disk /dev/sdd: 500.1 GB, 500107862016 bytes

これもMD RAID10アレイとしてセットアップされます

md1 : active raid10 sdb1[1] sda1[0] sdd1[3] sdc1[2]
      976767872 blocks 64K chunks 2 near-copies [4/4] [UUUU]

md0とmd1を組み合わせて、1つの大きなLVMを作成します。注:私は最近、外部配列を追加したばかりなので、ほとんど空です。現在、その上にブロックはないと思います。

これはLVMボリュームとして提示されます:

--- Logical volume ---
LV Name                /dev/data/data
VG Name                data
LV UUID                amZCgU-sQLi-R363-dUFx-Bcdf-iwlt-ZNnDp8
LV Write Access        read/write
LV Status              available
# open                 1
LV Size                4.54 TiB
Current LE             1190134
Segments               2
Allocation             inherit
Read ahead sectors     auto
- currently set to     512
Block device           251:0

EXT4としてフォーマットされ、/ srvとしてマウントされます:

/dev/mapper/data-data on /srv type ext4 (rw)

十分な空きスペースがあります。

/dev/mapper/data-data
                      4.5T  2.2T  2.1T  51% /srv

役に立つかもしれないその他の情報:-

$ uname -a
Linux ubuntuserver 2.6.32-32-server #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011 x86_64 GNU/Linux

00:11.0 SATA controller: ATI Technologies Inc SB700/SB800 SATA Controller [AHCI mode] (rev 40)
02:00.0 RAID bus controller: Silicon Image, Inc. SiI 3132 Serial ATA Raid II Controller (rev 01)

Rsnapshot中にcpコマンドを実行すると、iostatに次のように表示されます。

avg-cpu:  %user   %Nice %system %iowait  %steal   %idle
           0.55    0.00    5.47   66.14    0.00   27.85

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00     0.00    0.10    0.00     0.80     0.00     8.00     0.00    0.00   0.00   0.00
sdf               0.00   407.50    0.00   66.80     0.00  3790.40    56.74   124.86 1524.88  13.55  90.50
sdh               0.00   406.90    0.00   66.90     0.00  3790.40    56.66    92.89 1230.52  13.21  88.40
sdi               0.00   407.80    5.50   70.20    44.00  3824.00    51.10   113.83 1333.84  12.34  93.40
sdg               0.00   406.80    6.10   71.60    48.80  3827.20    49.88    64.32  787.68  11.69  90.80
md0               0.00     0.00   11.50 1484.60    92.00 11876.80     8.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00   11.50 1484.70    92.00 11877.60     8.00  5331.18  471.91   0.63  94.70
md1               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

したがって、基本的に大量の書き込み、大量のIO待機。

だから、今は箱がアイドル状態です、私はすべての仕事を中断しました。

avg-cpu:  %user   %Nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdf               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdh               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdi               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdg               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
md0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
md1               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

桃色に見える!

$ Sudo hdparm -T -t /dev/sd[a-i]

/dev/sda:
 Timing cached reads:   2532 MB in  2.00 seconds = 1265.95 MB/sec
 Timing buffered disk reads:  270 MB in  3.02 seconds =  89.53 MB/sec

/dev/sdb:
 Timing cached reads:   2516 MB in  2.00 seconds = 1258.07 MB/sec
 Timing buffered disk reads:  264 MB in  3.02 seconds =  87.37 MB/sec

/dev/sdc:
 Timing cached reads:   2442 MB in  2.00 seconds = 1220.80 MB/sec
 Timing buffered disk reads:  272 MB in  3.00 seconds =  90.60 MB/sec

/dev/sdd:
 Timing cached reads:   2520 MB in  2.00 seconds = 1259.64 MB/sec
 Timing buffered disk reads:  272 MB in  3.02 seconds =  90.07 MB/sec

/dev/sde:
 Timing cached reads:   2524 MB in  2.00 seconds = 1261.48 MB/sec
 Timing buffered disk reads:  306 MB in  3.01 seconds = 101.56 MB/sec

/dev/sdf:
 Timing cached reads:   2366 MB in  2.00 seconds = 1183.28 MB/sec
 Timing buffered disk reads:  388 MB in  3.01 seconds = 128.88 MB/sec

/dev/sdg:
 Timing cached reads:   2536 MB in  2.00 seconds = 1267.52 MB/sec
 Timing buffered disk reads:  400 MB in  3.00 seconds = 133.12 MB/sec

/dev/sdh:
 Timing cached reads:   2538 MB in  2.00 seconds = 1269.08 MB/sec
 Timing buffered disk reads:  426 MB in  3.00 seconds = 141.90 MB/sec

/dev/sdi:
 Timing cached reads:   2538 MB in  2.00 seconds = 1268.57 MB/sec
 Timing buffered disk reads:  402 MB in  3.01 seconds = 133.69 MB/sec
10
popey

残念ながら、ストライプキャッシュはRAID5と6にのみ適用されます-RAID 0/1/10に相当するものはありません。

個々のドライブ(hdparmによる)のパフォーマンスは良好に見えます。それらはすべて、そのクラスのドライブで期待どおりに機能しています。

私の提案:

  1. BIOSでAHCIが有効になっていること、および内部にインストールされたドライブがレガシーIDEモードを使用していないことを確認します。 MicroServerのハッキングされたBIOSがあり、eSATAポートのAHCIも有効にします(詳細は this link を参照)-外部エンクロージャーのドライブを調査する価値があるかもしれませんが、ポートマルチプライヤの背後にあるため、依然として制限されます。
  2. すべてのドライブでNCQを有効にし、それが違いを生むかどうかを確認します(そうでない場合もあります)。
  3. ファイルシステムの設定が最適化されていることを確認してください(noatime、nodiratimeのマウント)。 書き込みバリアを無効にする を使用することもできますが、リスクが高すぎる可能性があります。
  4. I/Oスケジューラを切り替えることで何らかの利点があるかどうかを確認します(noopはここで役立つ場合があります)。
  5. MdデバイスとLVMデバイスの両方の先読みバッファーを調整します。たとえば、blockdev --setra <size> /dev/md1(ここで、<size>は512バイトのセクターです)。ただし、これは読み取りのみに役立ちます。

パフォーマンスに影響を与える可能性のある他の2つの要素は、パーティションのアライメントとファイルシステムの作成パラメーター(ストライドなど)ですが、最新のツールを使用している場合、これは問題になりません。

3
mjturner