2013年7月20日土曜日

待ち行列モデルとストレージ性能のあれこれ

お仕事の1つにストレージの設計・管理をやってます。で、性能調査をすることがあって、今一度パフォーマンスの整理をしてみたので、忘れないうちにメモメモ

大学時代にやった記憶がある待ち行列理論がでてきて、、懐かしい・・というより頭痛?
勉強って役に立つんだねぇ~(あるあるネタですね)。

まだまだこれからですが、とりあえず。

・ResponseTime = QueueLength × Service time

 そのストレージの中では、
  ResponseTime → ストレージ(のコントローラ)に入ってきてから、出ていくまでの時間
   QueueLength    → ストレージのコントローラで待ち行列に入っている数
   Service time  → ストレージ内部での処理時間
 となるとのこと。

 これはM/M/1モデルの
  Tw = Ts * ρ/ (1−ρ)
  Lw = ρ/ (1−ρ)
   ・Tw:待ち時間の平均 (ResponseTime)
   ・Lw:待ち行列の長さ    (QueuLength)
   ・Ts:平均サービス時間 (ServiceTime)
 の考えですね。へー、へー、なんか実感。

・ServiceTime = Utlization ÷ Throughput(IOPS)
 ※ Utlization × (1 ÷ Throughput)のほうがしっくりくるのかな?

 そのストレージの中では、
  Utilization   → コントローラのCPU使用率
   Throughput  → ストレージのスループット(1秒間あたりに捌くIOの数)
 となりそう(確認中)。


 随時更新していこう。

そのなもウタマロ(洗濯石鹸)

TVで紹介してた、なんか洗濯のもので、首回りなど汗、シミの汚れが落ちるらしい。その名も
ウタマロ!

http://www.e-utamaro.com/shop

このページもちょっとレトロ感があっていい感じ。

で、なんと近くのドラッグストアで売ってたので、衝動買い^^; 本当にきれいになるのかな?
いつかためそー(いまでしょっ!夏)

tips:Redhat/CentOSでのJumboFrame対応

RedhatやCentOS環境でiSCSIをつかっているので、JumboFrameに関する備忘録を記載。

■MTUの設定(CentOS/RHEL)

一時的に設定するなら、

# ifconfig [DEV] mtu 9000

恒久的に変えるなら、

# vi /etc/sysconfig/network-scripts/ifcfg-[DEV]

>>
MTU=9000
<<

でインターフェースを再起動。

# ifconfig [DEV]

でMTUを確認し表示されればOKです。


■tcpdumpでjumboframeをキャプチャするには

# tcpdump -i eth0 -s 9014 -B 9 host x.x.x.x -w /tmp/test.pcap

上記は
 ・インターフェース eth0で行われている (-i)
 ・通信の宛先が x.x.x.xの(host)
 ・size 9014以下のpacket(-s)
 ・デフォルトではバッファ制約により8138 Bytesまでしかキャプチャができないため、
  9014 Bytesまでキャプチャができるよう拡張(-B)
 ・収集したパケットデータを/tmp/test.pcapに保存(-w)
の例です。


ネットワーク経路でJumboフレームが通るか?確認

pingでフレームが分割されずに通るか?の確認です。

# ping -s 8972 -d [相手先] -M do -c 5

NGの場合は、、

PING [相手先](x.x.x.x) 8972(9000) bytes of data.
From [相手先] (x.x.x.x) icmp_seq=1 Frag needed and DF set (mtu = 1500)

OKの場合は、、

PING [相手先] (x.x.x.x) 8972(9000) bytes of data.
8980 bytes from [相手先] (x.x.x.x): icmp_seq=1 ttl=128 time=2.41 ms



※8972bytesはJumboframeのパケットサイズ9000bytesから、IPヘッダサイズ20bytes+ICMPヘッダサイズ8bytesを引いたもの。

※8980 bytesは、8972(指定)+ICMPヘッダサイズ(8Bytes) = 8090 Bytesのこと。



tips:vmware(vsphere4)でのJumboFrame対応

VMware(vpshere4でのみ確認)環境でiSCSIをつかっているので、JumboFrameに関する備忘録を記載。

今回は、esxiにコンソールログイン(もしくはsshログイン)して、確認する方法を記載
(設定はマニュアル見てGUIで)

■VMware本体(VMkernel)で使うiSCSI NICのMTU設定の確認

esxcfg-vmknic -l

Interface Port Group/DVPort IP Family IP Address Netmask Broadcast MAC Address MTU TSO MSS Enabled Type
vmk0 Service Console IPv4 x.x.x.x 255.255.255.0 x.x.x.x xx:xx:xx:xx:xx:xx 1500 65535 true STATIC
vmk1 VMotion IPv4 x.x.x.x 255.255.255.0 x.x.x.x xx:xx:xx:xx:xx:xx 1500 65535 true STATIC
vmk2 iscsi1 IPv4 x.x.x.x 255.255.255.0 x.x.x.x xx:xx:xx:xx:xx:xx 9000 65535 true STATIC

※上記の例では、vmk2というインターフェースのMTUが9000に設定されている。

■VMware本体(VMkernel)で使うiSCSI NICの仮想スイッチのMTU設定の確認

# esxcfg-vswitch -l

Switch Name Num Ports Used Ports Configured Ports MTU Uplinks
vSwitch0 128 5 128 1500 vmnic0,vmnic2

PortGroup Name        VLAN ID  Used Ports  Uplinks
  VMotion               135      1           vmnic2,vmnic0
  Service Console       125      1           vmnic0,vmnic2
Switch Name Num Ports Used Ports Configured Ports MTU Uplinks
Backup 128 4 128 1500 vmnic1

PortGroup Name        VLAN ID  Used Ports  Uplinks
  Backup                0        2           vmnic1
Switch Name Num Ports Used Ports Configured Ports MTU Uplinks
iSCSI 128 9 128 9000 vmnic6,vmnic7,vmnic10,vmnic11

PortGroup Name        VLAN ID  Used Ports  Uplinks
   ・
   ・
   ・

※上記の場合、iSCSIという仮想スイッチのMTUは9000Bytesになっている(つまりJumboFrame対応になっている)

※上記NICと仮想スイッチ両方がJumboFrame向け設定が必要となる。


■ネットワーク経路でJumboフレームが通るか?確認

# vmkping -s 8972 -d [相手先] 

  -s  : パケットサイズ
  -d  : Set Don't Fragment flag(IPv4)

NGの場合は、、

PING [相手先] (x.x.x.x): 8972 data bytes
sendto() failed (Message too long)

OKの場合は、、

PING [相手先] (x.x.x.x): 8972 data bytes
8980 bytes from x.x.x.x: icmp_seq=0 ttl=128 time=0.501 ms


※8972bytesはJumboframeのパケットサイズ9000bytesから、IPヘッダサイズ20bytes+ICMPヘッダサイズ8bytesを引いたもの。

※8980 bytesは、8972(指定)+ICMPヘッダサイズ(8Bytes) = 8090 Bytesのこと。

■tcpdumpでjumboframeをキャプチャするには

esxiにはtcpdumpの代わりに、tcpdump-uwが入っているので、これを使う。

# tcpdump-uw -i vmk0 -s 9014 -B 9 host x.x.x.x -w /tmp/test.pcap

上記は
 ・vmknicのvmk0で行われている (-i)
 ・通信の宛先が x.x.x.xの(host)
 ・size 9014以下のpacket(-s)
 ・デフォルトではバッファ制約により8138 Bytesまでしかキャプチャができないため、
  9014 Bytesまでキャプチャができるよう拡張(-B)
 ・収集したパケットデータを/tmp/test.pcapに保存(-w)
の例です。

tips:WindowsでのJumboFrameに関する話

Windows環境でiSCSIをつかっているので、JumboFrameに関する備忘録を記載。
試したのはWindows2008です。

■MTUの設定値の確認

# netsh interface ipv4 show interfaces

Idx     Met         MTU          状態                 名前
---  ----------  ----------  ------------  ---------------------------
  1          50  4294967295  connected     Loopback Pseudo-Interface 1
 11          10        1500  connected     iscsi1
 14          10        1500  connected     public

上記は1500になっている例。

※Windows2003やXPではnetsh interfaceの仕様が変わったようで、上記では実施できません。


■MTUの設定
上記のMTUの確認と同じコマンドで、対象NICのIdxを確認する(今回はiscsi1を変更)。

# netsh interface ipv4 set interfaces 11 mtu=9000

再度設定を確認しましょう!


■ネットワーク経路でJumboフレームが通るか?確認

pingでフレームが分割されずに通るか?の確認です。

・Windows2008からの確認

# ping [相手先] -l 8972 -f

  -l  : パケットサイズ
  -f  : Set Don't Fragment flag

NGの場合は、、

Packet needs to be fragmented but DF set.

OKの場合は、、

Pinging [相手先]  [x.x.x.x] with 8972 bytes of data:

Reply from x.x.x.x: bytes=8972 time<1ms TTL=127

※8972bytesはJumboframeのパケットサイズ9000bytesから、IPヘッダサイズ20bytes+ICMPヘッダサイズ8bytesを引いたもの。