2018年6月5日火曜日

vCenter Convertor Standaloneを使ってHyper-Vの仮想マシンをvSphere環境に移行する

Hyper-VからvSphere環境に仮想マシンを移行するために、無償で利用できるvCenter Converter Standaloneを試してみた。

vCenter Converter Standaloneとは

vCenter ConverterはVMwareが昔から無償で提供しているvSphere環境へのサーバー移行ツールとなり、P2VやV2Vで利用することができる。

2018年5月時点の最新バージョンは6.2となり、ダウンロードは以下URLから可能となる。

ダウンロード VMware vCenter Converter Standalone 6.2
https://my.vmware.com/web/vmware/details?productId=701&downloadGroup=CONV62

vCenter Converter Standaloneの特徴は以下の通り。
  • 無償で利用できる
  • Windows PCまたはWindows Server製品にインストール可能
  • 移行時は、変換元と変換先の両方にネットワーク接続できる必要がある
  • WAN越しでのデータ移行はサポート対象外
  • Hype-VおよびESXiを移行元に指定する場合は、仮想マシンが電源OFF状態のオフライン移行のみサポート
移行元のデータをファイル等に出力することができず、WAN越しの移行もできないことから、同一データセンター内でLAN接続ができる環境で移行するためのツールとなる。逆にデータセンターをまたぐような環境の移行においては、ZertoやAcronisなどの有償の移行ツールを選定する必要がある。

環境

今回はHyper-Vの仮想マシンをvSphere環境に移行する手順を確認してみた。環境は以下の通り。
  • 移行ツール:vCenter Converter Standalone 6.2
  • 移行元:Hyper-V 2012 (R2なし) 上のWindows Server 2012 (R2なし)
  • 移行先:vSphere ESXi 6.0 Update 3a
図示すると以下のようになる。


今回は同一セグメントでの接続をしているが、ネットワーク経路上にFirewallが存在する場合は、以下URLを参考に必要なポートの開放が必要となる。

必要な VMware vCenter Converter ポート (2078649)
https://kb.vmware.com/s/article/2078649

Hyper-V仮想マシンをvSphere環境に変換する手順

手順自体はウィザードに従って選択をしていくだけなので、それほど難しい手順ではない。

1. vCenter Converter Standaloneの起動

通常はインストールするとデスクトップにショートカットがあるはずなので、ダブルクリックして起動する。


2. 仮想マシン移行のウィザードを開始

画面左上の「Convert machine」を選択する。


3. 移行元ホストの指定

Source Systemは「Hyper-V Server」を選択し、IPアドレス、ユーザー名、パスワードを入力する。Administrator権限を持つユーザーを指定しておけば問題ないだろう。


4. 移行元ホストにエージェントをデプロイ

移行元のHyper-V環境にエージェントをデプロイするためのダイアログボックスが表示される。移行成功後に自動でエージェントをアンインストールするかどうかの設定となるので、今回は「I will manually uninstall the files later (後で手動でアンインストール)」を選択する。


エージェントのデプロイが始まるのでしばらく待つ。


なお、デプロイ後に移行元のHyper-Vでプログラムの一覧を確認すると、「vCenter Converter Standalone Agent」がインストールされていることを確認できる。不要になった場合は、別途ここからアンインストールすればよい。


5. 移行対象仮想マシンの指定

エージェントのデプロイ完了後、Hyper-V上の仮想マシン一覧が表示される。移行対象のVMが「Powered off」になっていることを確認し、選択する。


6. 移行先ホストの指定

Destination Systemでは、「VMware Infrastructure virtual machine」を選択し、IPアドレス、ユーザー名、パスワードを選択する。rootを選んでおけば問題ないだろう。


7. 移行先ホストの確認

移行先のESXi上の仮想マシン一覧が表示される。仮想マシン名が重複する場合はエラーとなるため、重複しない名前で「Name」を設定する。


8. 仮想マシンの各種設定

仮想マシン移行時の各種設定が行える。設定項目は以下の通り。
  • Data to coy : 移行対象のディスクとディスクタイプ(Thin、Thick)を設定できる
  • Devices : CPUやメモリを設定できる
  • Networks : NICの接続先ポートグループや仮想NICタイプを設定できる
  • Services : 移行対象仮想マシンのWindowsサービスの自動起動設定を変更できる
  • Advanced options : 移行対象仮想マシンの移行後の処理を設定できる。たとえば、移行後に仮想マシンを起動する、VMware Toolsをインストールする、といった設定ができる
  • Throttling : 移行時に使用できるCPU優先度、ネットワーク帯域を設定できる


今回は、ディスクをデフォルトのThickからThinに変更して移行を行うことにした。


9. 仮想マシンの移行の開始と完了

移行が開始すると、Status欄に進捗状況が表示されるので、完了するまで待機する。


問題なく移行が完了すると、Status欄にCompletedと表示される。


10. 移行直後のスナップショットを取得

このタイミングで一度仮想マシンのスナップショットを取得することを推奨する。というのも、移行後の仮想マシンの初回起動では、環境変更に伴うデバイスの再認識やドライバの更新が実施される。さらに、VMware Toolsの再インストールやNICの再設定も実施が必要となることから、万が一初期設定時に想定外事象が発生しても、移行直後の状態に戻せるようにしておくとリカバリが簡単になる。


11. 仮想マシンの起動

移行対象のWindows Server 2012は、特に何事もなかったように起動した。


12. 起動後の仮想マシンの設定

初回起動直後にデバイスマネージャーを確認すると、1つだけ認識に失敗しているデバイスが存在していた。こちらはVMware Toolsをインストールすることで解消した。


また、ネットワークインターフェースの情報はすべてリセットされてしまうため、再度IPアドレス等の設定を実施する必要がある。


ディスクに関しては、OSがインストールされているディスクに関しては正常に認識するようだが、それ以外のディスクはオフラインとなっているので、一度「ディスクの管理」からオンラインにする必要があった。


オンラインにすれば、ドライブレター含めて、正常に認識しなおしてくれた。


以上のように、そこまで難しい操作をすることなくHyper-VからvSphere環境への仮想マシン移行に成功した。同じような手順で物理サーバーのWindowsやLinuxからもvSphere環境の仮想マシンへ変換できるため、費用をかけずにP2VやV2Vを実施したい場合は、VMware vCenter Converter Standaloneの利用を検討するとよいだろう。

参考

VMware vCenter Converter Standalone 6.2 Release Notes
https://docs.vmware.com/en/vCenter-Converter-Standalone/6.2/rn/conv_sa_62_rel_notes.html

2018年5月26日土曜日

RealtekのNICのドライバーを組み込んだESXi 6.7のカスタムイメージを作成する


2018年4月17にVMwareよりvSphere 6.7が発表された。vSphere 6.5の次期バージョンとなり、7ではなく6.7というバージョンで登場した。

私は自宅の検証環境として、ESXi 6.0を無償ライセンスにて利用している。ESXi 6.7が登場したので、これを機にバージョンアップをすることにした。自宅検証環境は、Realtek 8168のNICが搭載されており、そのままではESXiが認識しないため、NICドライバーを組み込んだカスタムイメージを作成する必要がある。

↓★前回のカスタムイメージ作成の記事
https://tech-mmmm.blogspot.jp/2016/03/shuttle-ds81esxi-60-esxi-custom-image.html

しかし、前回と同様の手順にてRealtekのNICのドライバーを組み込んだカスタムイメージを作成しようとしたが、以下の警告メッセージが表示されてしまった。
警告: The image profile fails validation.  The ISO / Offline Bundle will still be generated but may contain errors and may not boot or be functional.  Errors:
警告:   VIB VFrontDe_bootbank_net51-drivers_1.0.0-1vft.510.0.0.799733 requires vmkapi_2_1_0_0, but the requirement cannot be satisfied within the ImageProfile. However, additional VIB(s) VMware_bootbank_esx-base_5.5.0-0.14.1598313,
VMware_bootbank_esx-base_5.1.0-3.52.2575044, VMware_bootbank_esx-base_6.0.0-2.37.3825889,
VMware_bootbank_esx-base_5.1.0-0.5.838463, VMware_bootbank_esx-base_6.0.0-3.57.5050593,

~(中略)~

VMware_bootbank_esx-base_5.1.0-1.12.1065491 from depot can satisfy this requirement.

警告メッセージが出力されるものの、カスタムイメージ自体は作成されたため、インストールできることを期待したのだが、「Operation failed」と表示されインストールに失敗してしまった。


本記事ではこのエラーを解消することを目的として、正常にRealtekのNICのドライバーを組み込んだESXi 6.7のカスタムイメージ作成方法について記載する。

ESXi 6.7に対応したドライバーを入手する

RealtekのESXi用ドライバーは、実は以下サイトからダウンロードできる。

List of currently available ESXi packages
https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages

ESXi 6.7に対応したRealtek 8168のドライバーは以下URLからダウンロードができる。「Direct Download links」より、VIBファイルをダウンロードする。

・ファイル名:net55-r8168-8.045a-napi.x86_64.vib

【注意】
以下は旧バージョンとなり、ESXi 6.7では利用できないので注意。前述した警告メッセージは、このドライバーを組み込もうとしたことが原因となる。
https://vibsdepot.v-front.de/wiki/index.php/Net51-drivers
・ファイル名:net51-drivers-1.1.0-1vft.510.0.0.799733.x86_64.vib

ESXi-Customizer-PSとPowerCLIを入手する

ESXiのカスタムイメージを作成するため、以下2つのツールを入手しておく。

ESXi-Customizer-PS 2.6
https://www.v-front.de/p/esxi-customizer-ps.html
・ファイル名:ESXi-Customizer-PS-v2.6.0.ps1

PowerCLI 6.5
https://my.vmware.com/jp/group/vmware/details?downloadGroup=PCLI650R1&productId=614
・ファイル名:VMware-PowerCLI-6.5.0-4624819.exe

PowerCLIは、インターネットに接続可能なPC等にあらかじめインストールをしておくこと。ダウンロードしたファイルは、以下フォルダを作成し配置しておこう。

・フォルダ:C:\ESXi-Customizer
 - ファイル名:ESXi-Customizer-PS-v2.6.0.ps1
 - ファイル名:net55-r8168-8.045a-napi.x86_64.vib

カスタムイメージを作成する

ESXi-Customizer-PSはPowerCLIのスクリプトとなっているが、PowerShellの実行ポリシーを変更しなければ実行できないため、PowerShellにて実行ポリシーの変更を行う。
PS C:\> Set-ExecutionPolicy Unrestricted
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policiesのヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y
↑★"Y"を入力

これで準備が整った。それでは、カスタムイメージを作成するために、PowerCLIを開き、ESXi-Customizer-PSを実行してみよう。
PowerCLI C:\> cd C:\ESXi-Customizer
PowerCLI C:\ESXi-Customizer> .\ESXi-Customizer-PS-v2.6.0.ps1 -v67 -pkgDir C:\ESXi-Customizer\
セキュリティ警告
信頼するスクリプトのみを実行してください。インターネットから入手したスクリプトは便利ですが、コンピューターに危害を及ぼす可能性があります。このスクリプトを信頼する場合は、この警告メッセージが表示されないように、Unblock-Fileコマンドレットを使用して、スクリプトの実行を許可してください。C:\ESXi-Customizer\ESXi-Customizer-PS-v2.6.0.ps1を実行しますか?
[D] 実行しない(D)  [R] 一度だけ実行する(R)  [S] 中断(S)  [?] ヘルプ (既定値は "D"): R
↑★"R"を入力

This is ESXi-Customizer-PS Version 2.6.0 (visit https://ESXi-Customizer-PS.v-front.de for more information!)
(Call with -help for instructions)

Logging to C:\Users\admin\AppData\Local\Temp\2\ESXi-Customizer-PS-1900.log ...

Running with PowerShell version 5.1 and VMware PowerCLI version 6.5.0.2604913

Connecting the VMware ESXi Online depot ... [OK]

Getting Imageprofiles, please wait ... [OK]

Using Imageprofile ESXi-6.7.0-8169922-standard ...
(dated 04/03/2018 22:07:05, AcceptanceLevel: PartnerSupported,
The general availability release of VMware ESXi Server 6.7.0 brings whole new levels of virtualization performance to datacenters and enterprises.)

Loading Offline bundles and VIB files from C:\ESXi-Customizer\ ...
   Loading C:\ESXi-Customizer\net55-r8168-8.045a-napi.x86_64.vib ... [OK]
      Add VIB net55-r8168 8.045a-napi [New AcceptanceLevel: CommunitySupported] [OK, added]
      ↑★ドライバーが追加された

Exporting the Imageprofile to 'C:\ESXi-Customizer\ESXi-6.7.0-8169922-standard-customized.iso'. Please be patient ...


All done. ←★途中にエラー等なく「All done.」が表示されればOK。

これで、同一フォルダ内に「ESXi-6.7.0-<ビルド番号>-standard-customized.iso」というカスタムイメージのISOファイルが作成されるはずである。

実際にESXiをインストールして確認してみる

インストール手順の詳細は割愛するが、実際にESXi 6.7をインストールした際のNIC認識状況は以下の通り。



ドライバーが組み込まれ、Realtek 8168のNICが正常に認識できていることが確認できた。

2018年5月21日月曜日

for文やwhile文を使うとLinux操作が捗る話


LinuxはCUIでの操作が基本となり、GUIでは簡単にはできない繰り返し処理をfor文やwhile文を使うことで、容易に実現できる。

for文やwhile文はシェルスクリプトで使うものと思われがちだが、構文を覚えておけば、ちょっとした繰り返し処理を行う際に、いちいちシェルスクリプトを作らなくても、ターミナルから直接繰り返し処理を実行できるため、効率よく作業ができる。

今回はそんなfor文とwhile文の使い方について記載する。

一定回数繰り返す系

この使い方は、vmstatやiostat等の、繰り返し実行の機能のない性能情報取得コマンドを定期間隔で実行することができるので、パフォーマンス分析を行う際に便利である。

構文は以下の通り。

------------------------------
for i in {1..<繰り返し回数>} ; do <実行コマンド> ; sleep <繰り返し間隔(秒)> ; done

※実行コマンドに日時情報が含まれない場合は、以下の通りdateコマンドを合わせて実行するとよい。
for i in {1..<繰り返し回数>} ; do date ; <実行コマンド> ; sleep <繰り返し間隔(秒)> ; done
------------------------------

以下に、vmstatとiostatを5秒間隔で120回実行した際の実行例を記載する。なお、vmstatはバージョンによっては-tオプションが使えないようなので、その場合はdateを挟んで時刻を表示させるようにすること。

# for i in {1..120} ; do vmstat -t ; sleep 5 ; done
------------------------------
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 JST
 3  0      0 1372548   1260 392356    0    0     0     0    4    6  0  0 100  0  0 2018-04-30 14:43:38
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 JST
 3  0      0 1372672   1260 392356    0    0     0     0    4    6  0  0 100  0  0 2018-04-30 14:43:43

~(以下略)~
------------------------------

# for i in {1..120} ; do iostat -t -d -x ; sleep 5 ; done
------------------------------
Linux 3.10.0-327.el7.x86_64 (t1110rh72)         2018年04月30日  _x86_64_        (1 CPU)

2018年04月30日 14時44分56秒
Device:  rrqm/s  wrqm/s    r/s    w/s   rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
fd0        0.00    0.00   0.00   0.00    0.00     0.00     8.00     0.00   62.00   62.00    0.00  62.00   0.00
sda        0.00    0.01   0.00   0.06    0.04     0.32    10.96     0.00    0.25    0.38    0.25   0.05   0.00
dm-0       0.00    0.00   0.00   0.07    0.03     0.32     9.68     0.00    0.27    0.44    0.27   0.04   0.00
dm-1       0.00    0.00   0.00   0.00    0.00     0.00    17.99     0.00    0.16    0.16    0.00   0.13   0.00

Linux 3.10.0-327.el7.x86_64 (t1110rh72)         2018年04月30日  _x86_64_        (1 CPU)

2018年04月30日 14時45分01秒
Device:  rrqm/s  wrqm/s    r/s    w/s   rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
fd0        0.00    0.00   0.00   0.00    0.00     0.00     8.00     0.00   62.00   62.00    0.00  62.00   0.00
sda        0.00    0.01   0.00   0.06    0.04     0.32    10.96     0.00    0.25    0.38    0.25   0.05   0.00
dm-0       0.00    0.00   0.00   0.07    0.03     0.32     9.68     0.00    0.27    0.44    0.27   0.04   0.00
dm-1       0.00    0.00   0.00   0.00    0.00     0.00    17.99     0.00    0.16    0.16    0.00   0.13   0.00

~(以下略)~
------------------------------

なお、watchコマンドを使えば、もっと簡単にコマンドの繰り返し実行ができる。ただし、watchコマンドでは、Tera Term等のターミナルソフトのログに実行結果の情報が残らないというデメリットがあるので、きちんとログを残したい場合はfor文で実行する方がよいだろう。

一覧に対してコマンドを実行する系

一覧出力コマンドの結果を引数として、詳細な情報を表示させる際に利用する。たとえば、chageコマンドで各ユーザーのパスワード期限を見る、ethtoolコマンドで各インターフェースの詳細情報を確認する、といった使い方ができる。

構文は以下の通り。

------------------------------
for i in `<一覧出力コマンド>` ; do <実行コマンド> $i ; done
------------------------------

以下にfor文を使って、ユーザーごとにchageコマンドを実行し、パスワード期限設定の一覧を出力させてみる。

# for i in `cat /etc/passwd | cut -d":" -f 1` ; do echo $i ; chage -l $i ; done
------------------------------
root
最終パスワード変更日                         :なし
パスワード期限:                             : なし
パスワード無効化中                           : なし
アカウント期限切れ                           : なし
パスワードが変更できるまでの最短日数         : 0
パスワードを変更しなくてよい最長日数         : 99999
パスワード期限が切れる前に警告される日数         : 7
bin
最終パスワード変更日                         : 5月 24, 2015
パスワード期限:                              : なし
パスワード無効化中                            : なし
アカウント期限切れ                            : なし
パスワードが変更できるまでの最短日数         : 0
パスワードを変更しなくてよい最長日数         : 99999
パスワード期限が切れる前に警告される日数          : 7

~(以下略)~
------------------------------

以下は、ethtoolで同様にインターフェースごとの詳細設定を出力させる構文となる。for文の変数に代入する値は、grepやcutコマンドを使って、必要な箇所(今回でいえばインターフェース名)を取り出すことが重要となる。

# for i in `ifconfig -a | grep "mtu" | cut -d":" -f 1` ; do ethtool $i ; done
------------------------------
Settings for eno16780032:
        Supported ports: [ TP ]
        Supported link modes:   1000baseT/Full
                                10000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: No
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Speed: 10000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: off
        MDI-X: Unknown
        Supports Wake-on: uag
        Wake-on: d
        Link detected: yes
Settings for lo:
        Link detected: yes

~(以下略)~
------------------------------

負荷をかける系

性能試験などで負荷をかける際にも利用できる。

構文は以下の通り。sleepを入れずに最短でコマンド実行を繰り返すようにする。

------------------------------
for i in {1..<繰り返し回数>} ; do <実行コマンド> ; done

※無限に繰り返したい場合はwhile文を使う。
while : ; do <実行コマンド> ; done
------------------------------

たとえば、メールサーバーの性能を確認するため、一気にメールを1000通送りたい場合は、以下のように実行する。

# for i in {1..1000} ; do echo "テスト" | mail -s "test subject" -r ex-1@example.com ex-2@example.com ; done

2018年5月15日火曜日

各社のオールフラッシュ (All Flash) ストレージのIOPSまとめ


近年は、HDDに代わり性能面、容量面でSSDの方が上回る時代となっている。たとえば、以下URLにあるように、1本で15.36TBの容量を持ち32,000IOPSを発揮できるSSDがすでに市場に投入されている。

Samsung Introduces World’s Largest Capacity (15.36TB) SSD for Enterprise Storage Systems
https://news.samsung.com/global/samsung-now-introducing-worlds-largest-capacity-15-36tb-ssd-for-enterprise-storage-systems

一方、エンタープライズ向けに利用されるSASのHDDは、1本で高々1TB程度の容量しかなく、性能も150IOPS程度にとどまるのが現状だ。

このようなSSDとHDDの性能差は今後も広がることが想定されるため、SSDは通常利用用途、HDDはNL SASやSATAの大容量HDDを利用したバックアップ・ログ等の安価なデータ保管用途といった棲み分けが進むと考えている。

さて、本題に入ろう。

上記のような状況もあるので、私個人としても最近はもAll Flashのストレージを提案するという案件が増加している。そこで、一度各メーカーが販売しているAll Flashストレージの性能比較をしてみたいと思い、インターネットを検索して情報をまとめてみることにした。

All FlashストレージのIOPSまとめ

以下がまとめた表となる。原則Read/Write混在の計測データを載せるようにしたかったが、なかなかそのような情報を見つけることが困難なストレージ製品もあり、そのような場合はReadのみの計測データを記載している。

したがって、計測方法に差もあることから、単純にこれだけでストレージ製品の性能比較をすることはできないので注意すること。

Noメーカー製品名IOPS計測条件参考URL
1IBMV5030
(※参考)
85,020300GB 15krpm HDD x 240 RAID10
SPC-1 IOPS
リンク
2HPEMSA 2040 SSD29,000200 GB SSD x 4 RAID5
Random 60%/40%RW
リンク
3HPE3PAR StoreServ 8200140,656400GB SSD x 8 Raid5 (7+1)
80/20RW
リンク
4HPE3PAR StoreServ 8400140,656400GB SSD x 8 Raid5 (7+1)
80/20RW
リンク
5HPE3PAR StoreServ 8450141,504400GB SSD x 8 Raid5 (7+1)
80/20RW
リンク
6HPE3PAR StoreServ 8440 4N545,164400GB SSD x 32 Mirroring
SPC-1 IOPS
リンク
7HPE3PAR StoreServ 8450 4N545,164400GB SSD x 32 Mirroring
SPC-1 IOPS
リンク
8IBMV5030F145,000Maximum IOPS 4 KB cached off
Random 70%/30%RW
リンク
9IBMV7000F162,000Maximum IOPS 4 KB cached off
Random 70%/30%RW
リンク
10IBMA9000500,000Random 70%/30%RWリンク
11DELL EMCVMAX250F1,000,0008K 100% readリンク
12DELL EMCVMAX950F6,700,0008K 100% readリンク
13DELL EMCUnity 350F130,0008K 100% readリンク
14DELL EMCUnity 450F305,0008K 100% readリンク
15DELL EMCUnity 550F395,0008K 100% readリンク
16DELL EMCUnity 650F440,0008K 100% readリンク
17NetAppAFF A700s2,400,059145GB SSD x 24 RAID-DP
SPC-1 IOPS
リンク
18Pure StorageFlashArray //m20150,00032K 100% readリンク
19Pure StorageFlashArray //m50220,00032K 100% readリンク
20Pure StorageFlashArray //m70300,00032K 100% readリンク

考察

HDDを利用したストレージについて(参考値として記載)

No1に記載しているIBM V5030はAll Flashストレージではなく、昔ながらのHDDを使ったストレージとなり、比較用の参考値として記載した。HDDの場合は、数万IOPSの性能を出すためには、ディスクの本数を240本も導入しなければならないことがわかる。

HPEのストレージについて

No2はHPEのエントリークラスのストレージであり、SSDを利用しても性能が低い。そもそもSSDを使うなら、SSDの性能を発揮できるストレージを選ぶことが重要ということがわかる。

No3~7はHPEのミッドレンジクラスのストレージとなる。計測条件の違いもあるとは思うが、同じストレージでも性能にバラつきがある。HDDを利用した際と同様に、ディスク本数が多く、RAID1相当の構成の方が性能が高い傾向にあるようだ。

なお、3PARについては、実際に私個人でも性能計測したことがあり、SSD x 40本、RAID5の構成で、15万~20万IOPSの性能となった。

IBMのストレージについて

No8、9はIBMのミッドレンジクラスのストレージとなる。HPEの3PARと同程度の性能であることを考えると、ミッドレンジクラスのAll FlashストレージのRead/WriteのIO性能は、10~20万IOPSとして見込んでおくとよさそうだ。

DELL EMCのストレージについて

No11、12はDELL EMCのハイエンドクラスのストレージとなり、桁違いに速い。No13~16はミッドレンジクラスのストレージとなり、Readのみで数十万IOPSの性能となっていることから、Read、Writeが混在した環境においては、他メーカーと大きな性能差はないものと想定される。

NetAppのストレージについて

No17のNetAppは、NASを得意とするメーカーだけあって、FCだけでなくNFS、CIFSに対応したAll Flashストレージとなっている。ストレージのOSについても、NetAppのNASで培われてきたONTAPを利用する。

Pure Storageのストレージについて

No18~20は新興メーカーのPure StorageのAll Flashストレージ製品となる。なお、Pure StorageはAll Flashのみを販売するストレージメーカーとなる。他メーカーでは通常4Kや8Kなどの小さなブロックサイズでのスループット計測とするところを、Pure Storageでは32KのブロックサイズのIOPSを計測しており、そのような状況においても15万~30万IOPSの性能を発揮できることが売りとのこと。

2018年5月8日火曜日

Linuxのpingコマンドを使って、簡単にネットワーク帯域を計測する


ネットワーク帯域を計測する際にpingコマンドを使うことで計測することができる。詳細は以下サイトの記事にある。

pingでネットワークの速度を調査する
http://www.atmarkit.co.jp/ait/articles/0511/26/news012.html

上記記事を参考に、帯域計測用のコマンドを作ってみた。

ちなみに、Windowsでも同様の計測方法を試そうとしたが、Windowsのpingコマンドや、PowerShellのTest-Connectionは、1ms以下の精度でPing応答を表示することができないため、計測するには誤差が大きすぎて使えないので、今回はLinuxで計測手順のみ記載する。

事前準備

計測には電卓で計算でもよいのだが、Linuxには数式計算ができるbcコマンドがあるため、それを使う。bcコマンドがインストールされていない場合は、yum等を利用してインストールしておこう。

# yum install bc

今回pingコマンドで利用するオプションは以下の通り。
  • -c:試行回数。今回は10回に設定する
  • -s:データサイズ。今回は、上限の65507バイトで設定する。65507バイトにIPヘッダ20バイトとICMPヘッダ8バイトが加わって、合計65535バイトのパケットが送信がされる。
実際にpingを飛ばすと以下のような結果となる。最後に応答時間(RTT :
Round-Trip Time)の平均値が表示されるので、その値を用いて帯域の計算を行う。

# ping -c 10 -s 65507 192.168.11.112
------------------------------
PING 192.168.11.112 (192.168.11.112) 65507(65535) bytes of data.
65515 bytes from 192.168.11.112: icmp_seq=1 ttl=64 time=0.354 ms
65515 bytes from 192.168.11.112: icmp_seq=2 ttl=64 time=0.333 ms
65515 bytes from 192.168.11.112: icmp_seq=3 ttl=64 time=0.443 ms
65515 bytes from 192.168.11.112: icmp_seq=4 ttl=64 time=0.360 ms
65515 bytes from 192.168.11.112: icmp_seq=5 ttl=64 time=0.416 ms
65515 bytes from 192.168.11.112: icmp_seq=6 ttl=64 time=0.266 ms
65515 bytes from 192.168.11.112: icmp_seq=7 ttl=64 time=0.331 ms
65515 bytes from 192.168.11.112: icmp_seq=8 ttl=64 time=0.406 ms
65515 bytes from 192.168.11.112: icmp_seq=9 ttl=64 time=0.288 ms
65515 bytes from 192.168.11.112: icmp_seq=10 ttl=64 time=0.284 ms

--- 192.168.11.112 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9000ms
rtt min/avg/max/mdev = 0.266/0.348/0.443/0.057 ms
------------------------------

計算式は以下の通りとなる。

 送受信データ量 (bit) = 65536 * 8 * 2 ・・・①
 ① / RTT (ms) / 1000 = 帯域 (Mbps)

実際に計測してみる

それでは実際に計測をしてみよう。簡単に計測するために、以下3行のコマンドを作成した。1行目の変数の中身だけ変更して他はそのまま実行すれば、帯域計測が実施できる。

------------------------------
# dst=<送信先IPアドレス / ホスト名>
# rtt=`ping -q -c 10 -s 65507 ${dst} | grep avg | cut -d"/" -f 5` ; echo "${rtt} ms"
# speed=`echo "scale=2; (65535 * 8 * 2) / $rtt / 1000" | bc` ; echo "${speed} Mbps"
------------------------------

①同一ESXiサーバー内の仮想マシン間の帯域を計測

同じvSwitchに接続されている仮想マシン同士で帯域を計測してみる。

# rtt=`ping -q -c 10 -s 65507 ${dst} | grep avg | cut -d"/" -f 5` ; echo "${rtt} ms"
------------------------------
0.385 ms
------------------------------
# speed=`echo "scale=2; (65535 * 8 * 2) / $rtt / 1000" | bc` ; echo "${speed} Mbps"
------------------------------
2723.53 Mbps
------------------------------

以下の過去記事に記載した通り、仮想マシンは1Gbps以上の帯域で通信が可能となる。pingによる計測においても確認することができた。

ESXiの仮想ネットワークアダプタ「E1000」は、1Gbps以上の速度が出る


②1000BASE-Tで接続されたNASとの帯域を計測

物理的にUTPケーブルを使った1000BASE-Tで接続されているNASに対して、帯域計測を行う。

# rtt=`ping -q -c 10 -s 65507 ${dst} | grep avg | cut -d"/" -f 5` ; echo "${rtt} ms"
------------------------------
1.772 ms
------------------------------

# speed=`echo "scale=2; (65535 * 8 * 2) / $rtt / 1000" | bc` ; echo "${speed} Mbps"
------------------------------
591.73 Mbps
------------------------------

1Gbpsといっても、実際は6割程度の帯域となることが確認できた。

③インターネット回線の帯域を計測

ping応答を返してくれる適当なドメインを指定して計測を行う。www.yahoo.co.jpが応答を返してくれるので、今回はそちら宛てにpingを飛ばして速度計測を行う。

# rtt=`ping -q -c 10 -s 65507 ${dst} | grep avg | cut -d"/" -f 5` ; echo "${rtt} ms"
------------------------------
18.309 ms
------------------------------

# speed=`echo "scale=2; (65535 * 8 * 2) / $rtt / 1000" | bc` ; echo "${speed} Mbps"
------------------------------
57.27 Mbps
------------------------------

なお、上記計測結果はかなりのムラがあり、速い時では170Mbps程度のこともあったので、数回計測することをお勧めする。

まとめ

OS標準のpingコマンドを使うことで、簡単に帯域を計測することができた。帯域計測用にツール等を導入する必要がないため、ざっくりと帯域を計測したい場合は非常に便利である。

人気の投稿