NFSとiSCSIのパフォーマンス比較

PCからSSH接続したVMware ESXiサーバから、別のサーバからNFSマウントした領域とiSCSIマウントした領域に
5GBファイルの1ファイルをコピーしてみて、速度を計測してみました。
VMware ESXiで利用する上での性能比較としては弱いですが、気休め程度にはなるのではないでしょうか。

■比較環境
VMware ESXiサーバ
型番:HP ML330G6
CPU:Xeon E5504@2.00GHz
メモリ:PC10600 ECC Registerd 24GB
HDD:HP純正SATA接続の240GB x2台(RAID1)

NFS/iSCSIサーバ
型番:自作
CPU:Athlon64 4400+
メモリ:2GB
HDD:HGST HDS5C3020ALA632 x4台(RAID5)

ネットワーク(両サーバ間のスイッチ)
アライドテレシス 9424T/SP-E


VMware ESXiサーバのローカルデータストアにて5GBの単一ファイルを生成

# dd if=/dev/zero of=dummy.dat bs=1024 count=5000000
#
# stat dummy.dat
  File: dummy.dat
  Size: 5120000000      Blocks: 10000384   IO Block: 131072 regular file
Device: b1060e3bd8cc9f4ah/12755898644776656714d Inode: 209721156   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-02-10 10:50:20.000000000
Modify: 2013-02-10 10:51:29.000000000
Change: 2013-02-10 10:51:29.000000000


ローカルデータストアからNFSマウントした領域へ5GBファイルをコピー
# date;cp dummy.dat /vmfs/volumes/NFS-DATESTORE/;date
Sun Feb 10 10:52:42 UTC 2013
Sun Feb 10 10:55:54 UTC 2013

コピーにかかった時間:192秒(約26.7MB/s)

ローカルデータストアからiSCSIマウントした領域へ5GBファイルをコピー
# date;cp dummy.dat /vmfs/volumes/iSCSI-DATESTORE/;date
Sun Feb 10 10:56:35 UTC 2013
Sun Feb 10 10:58:42 UTC 2013

コピーにかかった時間:127秒(約40.3MB/s)


参考に、ローカルデータストアからローカルデータストアへ5GBファイルをコピーした場合です。
読み込み/書き込みを同時にやってるせいで、iSCSIマウントした領域より遅くなってます
# date;cp dummy.dat dummy.dat.1;date
Sun Feb 10 10:59:22 UTC 2013
Sun Feb 10 11:01:37 UTC 2013

コピーにかかった時間:135秒(約37.9MB/s)

=====================================================================
ESXiホストのデータストアとしてNetAppを導入することになったんですが、なんとiSCSIマウントではなくNFSマウントになりそう。
プロジェクトリーダいはく「NFSの方が速いし安定してる」うんなわけねええ

上の文章とは関係ありませんが、NetAppが公開してる技術情報はかなり役に立ちます。例えば
1から学ぶVMware on NetApp
第八回:古いゲストOSを使用する場合の落とし穴― 「アライメントの重要性」についてご存じですか?

http://www.netapp.com/jp/communities/tech-ontap/tot-virtualization-entry8-1203.aspx

AMD FX-8300

秋葉原を散策してたら売ってたんで買ってみました。

OS:Windows7 SP1 x64
CPU:AMD FX-8300(8コア,TDP95W)
CPUクーラ:クーラーマスター Hyper 212 EVO RR-212E-20PK-J1
マザーボード:ASUS M5A99FX PRO R2.0(BIOSver 1413)
メモリ:キングストン DDR3 PC14900 4GBx2枚
SSD:INTEL SSDSC2MH120A2
ビデオカード:RADEON HD6850

AMD FX-8300とその他戦利品

AMD FX-8300とその他戦利品

AMD FX-8300とその他戦利品



FX-8300のラベル
FX-8300のラベル

FX-8300のラベル



FX-8300缶の中身
FX-8300缶の中身

FX-8300缶の中身



CPU-Z
CPU-Z(FX-8300)

CPU-Z(FX-8300)



Windowsの評価
WINDOWSの評価

WINDOWSの評価



Superπ
Superπ(FX-8300)

Superπ(FX-8300)




=============================================
色々と確かめてみましたが、予想通りの糞っぷりに涙。AMDは売る気あんのかなぁ。
とはいえ、ESXiサーバはHP製なんでXeonですが、それ以外(自作PC)ではIntel CPUなんて眼中にありませ~~ん。
ついでにSSDも買い換えようと思ったけど金が・・・・・。

リポジトリのミラーサーバ(CentOS)

数台程度ならデフォルトの設定(CentOSの公開サーバからダウンロード)の方が良いと思います。

定期的に理研やKDDIのミラーサーバと同期することになるんで、お互いのサーバに負荷が掛かるし
ローカルサーバにたくさんのRPMパッケージを保存することためにある程度のディスク容量が必要だし。
なお、当方の環境ではCentOS6 x64リポジトリで20GB、CentOS x85リポジトリで10GBのディスク容量を消費してます。


1. CentOSリポジトリのミラーサーバと同期(RPMパッケージをダウンロード)
2. apacheの設定変更(ディレクトリ構造の閲覧許可)
3. クライアント(yumコマンドを実行するサーバ)の設定


1. CentOSリポジトリのミラーサーバと同期(RPMパッケージをダウンロード)
1.1. RPMリポジトリの同期先ディレクトリを作成

#CentOS 6の場合
# mkdir -p /var/www/centos/6/updates/x86_64/ /var/www/centos/6/os/x86_64/

#CentOS 5の場合
# mkdir -p /var/www/centos/5/updates/x86_64/ /var/www/centos/5/os/x86_64/
1.2. ミラーサーバよりRPMパッケージをダウンロード
#CentOS 6 x64の場合
# rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/6/updates/x86_64/ /var/www/centos/6/updates/x86_64/
# rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/6/os/x86_64/ /var/www/centos/6/os/x86_64/

#CentOS 6 x86の場合
# rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/6/updates/i386/ /var/www/centos/6/updates/i386/
# rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/6/os/i386/ /var/www/centos/6/os/i386/

#CentOS 5 x64の場合
# rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/5/updates/x86_64/ /var/www/centos/5/updates/x86_64/
# rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/5/os/x86_64/ /var/www/centos/5/os/x86_64/

#CentOS 5 x86の場合
# rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/5/updates/i386/ /var/www/centos/5/updates/i386/
# rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/5/os/i386/ /var/www/centos/5/os/i386/


#firefoxパッケージをダウンロードもしくはアップデートすることはない場合
例:CentOS 6 x64の場合
# rsync -rptv --delete --exclude=*firefox* rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/6/updates/x86_64/ /var/www/centos/6/updates/x86_64/
# rsync -rptv --delete --exclude=*firefox* rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/6/os/x86_64/ /var/www/centos/6/os/x86_64/

1.3. 定期的(週1)に同期するようにcronを設定
# vi /etc/cron.weekly/yum-repo
#!/bin/bash

#CentOS 6 x64の場合
rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/6/updates/x86_64/ /var/www/centos/6/updates/x86_64/
rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/6/os/x86_64/ /var/www/centos/6/os/x86_64/

#CentOS 6 x86の場合
rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/6/updates/i386/ /var/www/centos/6/updates/i386/
rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/6/os/i386/ /var/www/centos/6/os/i386/

#CentOS 5 x64の場合
rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/5/updates/x86_64/ /var/www/centos/5/updates/x86_64/
rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/5/os/x86_64/ /var/www/centos/5/os/x86_64/

#CentOS 5 x86の場合
rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/5/updates/i386/ /var/www/centos/5/updates/i386/
rsync -rptv --delete rsync://ftp.nara.wide.ad.jp/pub/Linux/centos/5/os/i386/ /var/www/centos/5/os/i386/

exit 0


2. apacheの設定変更(ディレクトリ構造の閲覧許可)

2.1. apacheの設定を追加
# vi /etc/httpd/conf.d/yum-repo.conf
<directory "/var/www/centos">
  options +indexes
</directory>
2.2. 設定変更を反映
# /etc/rc.d/init.d/httpd reload


3. クライアント(yumコマンドを実行するサーバ)の設定

3.1. リポジトリの設定を変更
# vi /etc/yum.repos.d/CentOS-Base.repo
#CentOS6の場合
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os # コメントアウト
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://www.ys-network.info/centos/$releasever/os/$basearch/ # 追加
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
priority=1

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates # コメントアウト
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
baseurl=http://www.ys-network.info/centos/$releasever/updates/$basearch/ # 追加
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
priority=1

#CentOS5の場合
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os # コメントアウト
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://www.ys-network.info/centos/$releasever/os/$basearch/ # 追加
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates # コメントアウト
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
baseurl=http://www.ys-network.info/centos/$releasever/updates/$basearch/ # 追加
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

3.2. yumキャッシュをクリア
# yum clean all
Loaded plugins: fastestmirror, priorities
Cleaning up Everything
Cleaning up list of fastest mirrors

=====================================================

expectでのループ処理とVMware ESXiのバックアップ

expectは対話式で処理(ssh,telnet接続等)する場合は便利ですが、何故かループ処理の例がウェブに殆どないようなので
拙いながら、一応載せておきます。
とはいえ、条件式でループ処理等の場合は参考になるサイトがありますので
ここでは、リストの値をループ処理する場合になります。


リスト値・・・・・・AAA BBB CCC DDD
リストファイル・・・touch_list(内容はAAA BBB CCC DDD)


■リストした値を順次変数に代入してループ処理する場合

▲shの場合

#!/bin/bash

for i in AAA BBB CCC DDD; do
  touch /tmp/$i
done

▲expectの場合
#!/usr/bin/expect

foreach i {AAA BBB CCC DDD} {
	spawn touch /tmp/$i
	expect "root"
	}


■リストファイルの値を順次変数に代入してループ処理する場合

▲shの場合
#!/bin/bash

TOUCH_LIST=/root/touch_list

while read line; do
  touch /tmp/$line
done <$TOUCH_LIST

▲expectの場合
知らん。が、shと組み合わせると以下の通り
#!/bin/bash

TOUCH_LIST=/root/touch_list

while read line; do
  expect -c "
    spawn touch /tmp/$line
    expect "#"
  "
done <$TOUCH_LIST


■上記4つの実行結果(共通)
# ./test
# ls -l /tmp/
合計 4
-rw-r--r-- 1 root root    0 12月 10 19:39 AAA
-rw-r--r-- 1 root root    0 12月 10 19:39 BBB
-rw-r--r-- 1 root root    0 12月 10 19:39 CCC
-rw-r--r-- 1 root root    0 12月 10 19:39 DDD


======================================================
これだけだと手抜きなので、下記にVMware ESXiホストで動作しているゲストOSのバックアップスクリプトを載せておきます。
方法の解説については別サイトで詳しく解説されておりますので、そちらをご参照下さい。

なお、ESXiサーバへはrootユーザでSSH接続出来たり、バックアップ先をマウントしていることを前提としていますので
未設定の場合は適宜書き換えるか別サイトを参考に設定しておいて下さい。
#!/usr/bin/expect

set timeout -1

#下記コマンドを実行して、ESXiホストで動作しているゲストOSを調べます
#vim-cmd vmsvc/getallvms
#Vmid   Name
#10     GustOS1 #HTTP Server
#12     GustOS2 #MySQL Server
#17     GustOS3 #MAIL Server
#24     GustOS4 #Active Directory Server
#33     GustOS5 #CIFS Server

set NOW_TIME [clock format [clock seconds] -format {%Y%m%d}]

#ESXiホストへのSSH接続パスワード
set PASSWD "Password"
#ゲストOSが格納されているデータストア
set DATASTORE "/vmfs/volumes/LOCAL"
#ゲストOSのバックアップ先
set BACKUPDIR "/vmfs/volumes/BACKUP/$NOW_TIME"

set SNAPSHOTCRE "vim-cmd vmsvc/snapshot.create"
set SNAPSHOTRM "vim-cmd vmsvc/snapshot.removeall"


#VMware ESXiサーバへSSH接続
#ESXiホスト名(IPアドレス)に適宜書き換える
spawn ssh VMWARE-ESXI
expect "Password"
send "$PASSWD\r"
expect "#"


#バックアップディレクトリを作成
send "mkdir $BACKUPDIR\r"
expect "#"


#各ゲストOSの構成ファイル(vmx vmxf vmsd)をコピー(バックアップ)
foreach i {vmx vmxf vmsd} {
	send "cp $DATASTORE/*/*.$i $BACKUPDIR/\r"
	expect "#"
	}


#スナップショットを取得
# VMIDは環境によって適宜変更する
foreach VMID {10 12 17 24 33} {
	send "$SNAPSHOTCRE $VMID $NOW_TIME\r"
	expect "#"
	}


#スナップショットタスクが完了するまで待機
#事前に手動で下記コマンドを実行し、待機に必要な時間を確認しておく
#vim-cmd vmsvc/get.tasklist 確認するゲストOSのVMID
sleep 300


#各ゲストOSの本体ファイル(vmdk)をコピー(バックアップ)
#ゲストOS名は環境によって適宜変更する
foreach VMNAME {GustOS1 GustOS2 GustOS3 GustOS4 GustOS5} {
	send "vmkfstools -i $DATASTORE/$VMNAME/$VMNAME.vmdk -d thin $BACKUPDIR/$VMNAME.vmdk\r"
	expect "#"
	}


#スナップショットを削除
# VMIDは環境によって適宜変更する
foreach VMID {10 12 17 24 33} {
	send "$SNAPSHOTRM $VMID\r"
	expect "#"
	}

#バックアップを完了
send "exit\r"

==================================
動作環境:VMware ESXi5.1

INTEL製NIC(LANカード)の違い

調べてみました、といっても下記URLに書いてあったことそのままだけど。
サーバのオンボードは殆どがBroadcom製ですが、Intel製も悪くないかなぁ。

Intel® Gigabit Server Adapters
http://ark.intel.com/ja/products/family/46829

MT PT ET L340-Tx L350-Tx GT CT
用途 サーバ サーバ サーバ サーバ サーバ 一般PC 一般PC
発売時期 2003年頃 2005年頃 2008年頃 2010年頃 2011年頃 2004年頃 2008年頃
PCIタイプ PCI-X PCIe1.0 PCIe2.0 PCIe2.0 PCIe2.1 PCI PCIe1.1
コントローラ 82546 82571 82576 82580 l350 PWLA8391GT? 82574L
複数ポート × ×

PCIeのバージョン違いではNIC程度では差はないでしょうが、コントローラで差がつくと思います。
また、最近のサーバ(PC)に搭載しているCPUなら、オフロードエンジンの有無なんてどうでも良いと思う。

VMware ESXi5.1でのダイナミックディスク(WindowsXP)

ゲストOSはWindowsXPなんですが、Windows上でHDDをダイナミックディスクに変換してから
IOに負荷をかけると下記のようにディスクエラーがでるようになりました。

イベントID:9
デバイス \Device\Ide\IdePort0 はタイムアウト期間内に応答しませんでした。

イベントID:12
デバイス ‘VMware Virtual IDE Hard Drive’ (IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3130303030303030303030303030303030303130) は、最初に取り外しの準備が行われずにシステムから消滅しました。

イベントID:30
dmio: 6160455 ブロックで Harddisk1 書き込みエラーが発生しました: 状態 0xc000000e

イベントID:31
dmio: ディスクが取り外されているので、6160447 ブロックで Harddisk1 書き込みエラーが発生しました

イベントID:37
dmio: ディスク Harddisk1 ブロック 6291575 (マウントポイント D:): 修正不可能な書き込みエラー

イベントID:50
{遅延書き込みデータの紛失} ファイル のためのデータを一部保存できませんでした。データを損失しました。 このエラーは、コンピュータのハードウェアまたはネットワーク接続の障害によって発生した可能性があります。このファイルをどこか別の所に保存してください。

イベントID:57
データをトランザクション ログにフラッシュできませんでした。障害が発生する可能性があります。

イベントID:7011
VMTools サービスからのトランザクション応答の待機中にタイムアウト (30000 ミリ秒) になりました。


対象の仮想HDDは、ローカルHDD上のデータストアになるんでネットワーク等の問題とは考えにくいし
同じデータストア上で動作している他サーバは大丈夫なんでESXiホストの問題とも考えにくいです。

エラーが2~3回/日を1週間近く続けてるんで偶然とは思えず、データを待避後にベーシックディスクへ戻したところ
事象が止んだようです。とりあえず様子見します。


====================================================================
何故わざわざダイナミックディスクに変換したのかは自分の事ながら不明。