Skip to Content Java Solaris コミュニティ パートナー 開発者 マイ・アカウント ご購入について (0120-33-9096) Japan Worldwide

Feed Feed RSS 1.0 Feed RSS 2.0 Feed ATOM 1.0
ネットワークインターフェースを増やしてみませう2枚目!
  前号へ     次号へ  

前回は、ネットワークインターフェースを増設するお話でしたが、今回は、もう少しe1000g(インテル(R)PRO/1000 アダプタ)についてと、bge(Broadcom BCM57xx)の生態調査及び捕獲もできましたので、こちらも紹介したいと思います。

ネットワークインターフェースが一気に増えすぎてしまいましたよ・・・(´・ω・`)

e1000g driverは、GLDv3対応となっているので、Link AggregationやVLAN機能を利用することができるようになったのですが、とりあえずそれはおいといて。GLDv3対応になっていると何が一番うれしいかというと、今まで、面倒だったネットワークインターフェースのリンクアップ情報などが簡単に参照できるという点でしょうか。

こんな感じになります。

--
# dladm show-link
eri0 type: legacy mtu: 1500 device: eri0
e1000g0 type: non-vlan mtu: 16128 device: e1000g0
e1000g1 type: non-vlan mtu: 16128 device: e1000g1

# dladm show-dev
eri0 link: unknown speed: 0 Mbps duplex: unknown
e1000g0 link: up speed: 1000 Mbps duplex: full
e1000g1 link: down speed: 1000 Mbps duplex: half
--

この情報は、eri0、e1000g0、e1000g1と3つのインターフェースを持つマシンで取得したものです。type:legacyとなっているものは、GLDv3に対応していないため、dladmコマンドでは正確な情報を得ることができないインタフェースとなります。dladm show-linkコマンドでは、mtuやVLAN、device名を参照することができ、dladm show-devコマンドでは、link up状態を確認することができます。

ページ先頭へ

e1000gは、Gigabit Ethernetカードなのですが、Gigabitならアレ使いたくなりますよね?ということで、勝手に話しをススメます。せっかくなので Jumbo Frameを使えるようにしてみようと。本当は、Link Aggregationとかやってみたいのですが、この機能を搭載しているSwitchはまだまだ高価だったりしますので、今回は諦めてみました。

jumbo frameは、1500バイトのframe size(packet size)を拡張し、より大きなサイズで通信できるようにするための機能で、CPU負荷の軽減や通信性能の向上などにつながります。最近では、Jumbo Frameをサポートした Gigabit Switchが安易に入手できるようになったのでとても身近になりましたね。

といっても、frame sizeの違いにより、通信がうまく行えないなどの問題も出てきたりする可能性もあるので、Jumbo Frameを利用する前に、Googleなどを駆使し、色々と下調べをしておくと良いかと思います。

ページ先頭へ

e1000g driverでは、/kernel/drv/e1000g.confファイルをいじることでJumbo Frameを利用できるようになります。設定ファイル中のMaxFrameSizeがJumbo Frameに関する設定項目になります。

--
MaxFrameSize=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
# 0 is for normal ethernet frames.
# 1 is for upto 4k size frames.
# 2 is for upto 8k size frames.
# 3 is for upto 16k size frames.
# These are maximum frame limits, not the actual ethernet frame
# size. Your actual ethernet frame size would be determined by
# protocol stack configuration(please refer to ndd command man pages)
# For Jumbo Frame Support(9k ethernet packet)
# use 3(upto 16k size frames)
--

defaultは、0が設定されておりframe sizeは1500バイトとなっています。0 がいっぱい並んでいるので、混乱するかもしれませんが、この0の部分を、全て3に書き換えてください。何も考えずに(・∀・)

3は、「3 is for upto 16k size frames.」ということで、frame sizeの上限を16k(16,128 byte)にすることを意味しています。まぁ、全部3にしておけば、e1000gを16 個搭載しても、全てのe1000gでJumbo Frameが利用できるようになります。
そういうことです。

そして、設定を反映させるために再起動を行い、ネットワークインターフェースを作成してみましょう。

--
# ifconfig e1000g0 plumb
# ifconfig e1000g0
bge0: flags=1000802<BROADCAST,MULTICAST,IPv4> mtu 16128 index 3
inet 0.0.0.0 netmask 0
ether 0:3:ba:x:x:x
--

通常であれば、mtu(Max Transfer Unit)1500 でインターフェースが作成されますが、先ほどのframe sizeの設定をおこなうことで、mtu 16128となったインターフェースが作成されます。このmtuを操作して、frame sizeを制御します。

ただし、このままだと、frame sizeが大きすぎるので、他の機器と条件を合わせるため9000に設定します。
mtuは、ifconfigコマンドのmtuオプションで変更することができます。

--
# ifconfig e1000g0 mtu 9000
# ifconfig e1000g0
bge0: flags=1000802<> mtu 9000 index 3
inet 0.0.0.0 netmask 0
ether 0:3:ba:x:x:x
--

mtuを変更すると、interface flags(オレンジの部分を、このように呼びます)にmtuを変更したことを意味する「FIXEDMTU」の文字が入り、mtuが変更されたことがわかります。
また、この状態であれば、ifconfigコマンドで16,128 byteを上限に、好きなmtuサイズにいじることも可能です。

--
# ifconfig e1000g0 mtu 4096
# ifconfig e1000g0
bge0: flags=1001000802<BROADCAST,MULTICAST,IPv4,FIXEDMTU> mtu 4096 index 3
inet 0.0.0.0 netmask 0
ether 0:3:ba:x:x:x
--

e1000gでは、このよう感じでframe sizeを調整し、Jumbo Frameを利用したネットワークを構成することが可能となります

また、自動でネットワークインターフェースを構成するよう設定した場合、/etc/hostname.e1000g0などのファイルを作成し、割り当てるIPアドレスに対応づけられたホスト名を書き込みますが、その後ろにmtu9000と書いておくことで、自動的にmtuを変更することができ、再起動しても自動で設定することできるようになります。
実は、ふつーに気づかない人も多いのですが、このファイルにifconfigのオプションを色々と書き、ネットワークインターフェースを自動的に構成するために利用することができます。

例:/etc/hostname.e1000g0を使ってmtu 9000として構成する場合
--
hostname mtu 9000
--

こんな感じで、2台のBlade1000にe1000gを装備させ、netperfで性能を測ってみました。用意したマシンは、以下のような構成です。

  The Netperf Homepage(米国サイト:英語)

両マシンとも、66MHz/64bit PCI slotを1スロット持っていますが、事情により埋まってしまっているので、あまっている33MHz/64bit PCIスロットを利用しています。

--
Blade 1000(750MHz x2) Blade 1000(900MHz x2)

Intel Pro/1000 GT Desktop → Intel Pro/1000 MT Dual port Server
(33MHz/64bit slot)              (33MHz/64bit slot)
--

Gigabit switchは、1万円でお釣りがくる、9.6KB Jumbo Frame対応Corega CG-SW08GTV2を用意しました。
さらに、両方の環境で、以下のパラメータを設定しています。

--
# ndd -set /dev/tcp tcp_xmit_hiwat 65535
# ndd -set /dev/tcp tcp_recv_hiwat 65535
# ndd -set /dev/udp udp_xmit_hiwat 65535
# ndd -set /dev/udp udp_recv_hiwat 65535
--

以下が、mtuサイズの違いによる計測結果で、Blade 1000(750MHz x2)に搭載したIntel PRO/1000 GT Desktop Adapterの値となります。

mtu 1500
--
# ./netperf -H 192.168.0.210 -l30
TCP STREAM TEST from ::ffff:0.0.0.0(0.0.0.0)port 0 AF_INET to ::ffff:192.168.0.210(192.168.0.210)port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec

65535 65535 65535 30.00 626.45
--
mtu 9000
--
# ./netperf -H 192.168.0.210 -l 30
TCP STREAM TEST from ::ffff:0.0.0.0(0.0.0.0)port 0 AF_INET to ::ffff:192.168.0.210(192.168.0.210)port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec

65535 65535 65535 30.00 603.52
--

どうですか、それなりのあt・・・・・あれ?mtu 9000にしたほうが、若干、性能が低くなっていますね・・・ダメですねorz何度やり直しても、こんな感じになってしまいました(´・ω・`)
ちょっと、これでは言い訳できませんよ?

ただし、mtuサイズはCPUの利用率にも影響します。netperf実行時、mtu1500では、CPU利用率が約50% 程度だったのですが、mtu 9000では、CPU利用率が30%程度まで下がっていますので、Jumbo Frameを利用する価値はあるかと思いますというか、これを言い訳にさせてくださいヽ(;´Д`)ノ

まぁ、こんなもんは気分的な誤差!くらいの勢いで構えるのが、男らしくて良いかと思います。ええ。(あとで、気づいたのですが、OSがNevada b37だったんです・・・これも少なからず影響がある可能性大ですが、見なかったことにします・・・) 

ページ先頭へ

ネットワークインタフェース絡みでもう少し。e1000g以外に、入手難易度:低 として、bge driverでBroadcom BCM57xxを搭載したカードが利用可能と書きましたが・・・今調べてみると、これがなかなか入手することが難しい製品であることがわかりました。

なんとか、お手軽に入手できる方法がないか探したところ、Appleが販売するサーバ製品オプションの中に、BCM5703を利用した Gigabit Ethernetカードが紛れ込んでいることを発見!しかも、下位互換を持つPCI-Xカードなので、ユニバーサル仕様です。やるな Apple。

M9451G/A  Apple Gigabit Ethernet PCI-Xカード M9451G/A  Apple Gigabit Ethernet PCI-Xカード
M9451G/A Apple Gigabit Ethernet PCI-Xカード(¥11,340)

Apple Storeからポチッとできますが、某大型量販店に突撃してみたところ、在庫もしており購入することができました。お値段、1万ちょいくらいです。(名前が大きなほうでは、Apple製品にも関わらず、iPodとMac以外売ってません!的な対応に(´・ω・`)ショボーン)

捕獲したApple Gigabit Ethernet PCI-Xカードは、きちんとBMC5703を搭載していることを確認!

まずは、bgeドライバがきちんと認識してくれるかを確認するために、Solaris 10 1/06がインストールされている適当なマシン(Ultra 60 を使用)に接続してみたところ、boot - rで起動するだけで認識してしまいました(´・ω・`)

このカードに割り当てられている、PCI IDは、pci14e4,16a7となっており、すでに/etc/driver_aliases にエントリが用意されており、/var/adm/messagesファイルへは、次のように記録されていました。

--
Apr 19 22:04:15 empress-240 bge: [ID 801725 kern.info] NOTICE: bge0: ddi_intr_get_supported_types()returned: 1
Apr 19 22:04:15 empress-240 bge: [ID 801725 kern.info] NOTICE: bge0: Using Legacy interrupt type
Apr 19 22:04:15 empress-240 bge: [ID 801725 kern.info] NOTICE: bge0: bge_add_legacy_intrs
Apr 19 22:04:15 empress-240 mac: [ID 543131 kern.info] NOTICE: bge0/0 registered
Apr 19 22:04:18 empress-240 bge: [ID 801725 kern.info] NOTICE: bge0: link down(initialized)
Apr 19 22:05:04 empress-240 pseudo: [ID 129642 kern.info] pseudo-device: devinfo0
Apr 19 22:05:04 empress-240 genunix: [ID 936769 kern.info] devinfo0 is /pseudo/devinfo@0
Apr 19 22:10:00 empress-240 bge: [ID 801593 kern.notice] NOTICE: bge0: link up 1000Mbps Full-Duplex
--

ちょっと拍子抜けしてしまいましたが、ここまでできてしまえば、基本的なネットワーク設定作業をするだけで、利用することができてしまいます。
#基本的なネットワークの設定については、前回の記事を参照願います

簡単な確認
--
# ifconfig bge0 plumb
# ifconfig bge0
bge0: flags=1000802<BROADCAST,MULTICAST,IPv4> mtu 9000 index 3
inet 0.0.0.0 netmask 0
ether 0:11:24:x:x:x
  • Apple製品なので、Mac addressのvendor IDには、Appleのそれが割り当てられていたりします。
--

bge driverもGLDv3対応となっているので、Link AggregationやVLAN をサポートしています。もちろん、dladmコマンドで情報を得ることも可能です。

dladmコマンドの実行
--
$ dladm show-link
hme0 type: legacy mtu: 1500 device: hme0
bge0 type: non-vlan mtu: 1500 device: bge0
empress-240(SUNW,Ultra-60):/usr/tmp
$ dladm show-dev
hme0 link: unknown speed: 100 Mbps duplex: full
bge0 link: up speed: 1000 Mbps duplex: full
--

ページ先頭へ

e1000gは、jumbo frameを利用することができるし、ここは一発! Jumbo frameで性能測定といきたいところです。
e1000gの項でもJumbo Frameを使ってみたので、環境は揃っています。

  • e1000g は、e1000g.conf で 16k までサポート
  • Gigabit Switch は、9.6k まで
  • bge は・・・・

あれ?
そういえば、bge driverのjumbo frame対応はどうなっているのでしょうか。
とりあえず、搭載されているコントローラ「BCM5703」の製造元である、BroadcomのWeb pageで仕様を調べてみましょう。

  Broadcom(米国サイト:英語)

Apple Gigabit Ethernet PCI-X カードは、BCM5703を搭載しています。
というわけで、BCM5703のProduct Briefをチェック!

--
BCM5703 10/100/1000BASE-T Controller with Integrated Transceiver
http://www.broadcom.com/products/Enterprise-Small-Office/Gigabit-Ethernet-Controllers/BCM5703
  • Advanced network features
Jumbo Frame(9KB)
--

見えた!
jumbo frameの文字が見えます!
そして、9KB の文字が見えます!
ハードウェアとしては、9KBのJumbo Frameをサポートしていることがわかりましたね。

では、bge driverで Jumbo Frameを利用するために、Solarisではどのような設定をすればいいのか探す必要があるのですが、man bgeにも情報がありません!

そして、驚愕の事実が・・・

Solaris 10 1/06のbge driverは、jumbo frameをサポートしていませんでしたっ!
ノ・∀・)ノ =====┻━┻))゜Д゜)・∵.

一気にテンション落ちてしまいますが、それは Solaris 10でのことです。
ボクらには、OpenSolaris (Nevada) があります。
Solaris 10 がダメなら Nevada でどうよ?ってことで、ちょっと調べてみましょう。
OpenSolarisでは、bge driverのsource codeが公開されているので、Source Browserに「bge mtu」なんてkeywordを突っ込んでみます。
ありました!

  OpenSolaris(米国サイト:英語)

Nevadaで提供されるbeg driverは、mtuをいじれるように改良されていることが、なんとなくわかりますね。
あって良かった OpenSolaris.org( ´∀`)σ)∀`)

というわけで、bge driverでJumbo Frameを利用したい場合は、OpenSolarisかSolaris Express(Nevada)が必要になります。
面倒ですね(´・ω・`)

ですが、ぶっちゃけ、bge driverのバイナリファイル(/kernel/drv/bge)をSolaris 10 1/06(/platform/sun4u/kernel/drv/bgeと置き換え)に持ってきても動いちゃったりするんですよね・・・ええ。
(bge driverは、GLDv3と密接な関係があるので、Solaris 10 1/06以降でないと動作しません。3/05に持っていっても、ダメです)

具体的には、default-mtuというパラメータが実装され、bge.confに

default-mtu=9000;

などとエントリを追加することにより、mtuを調整することが可能となっています。
BCM5703は、9KBまでサポートしていることがわかっているので、ここでは単純に9000を値としてセットし、再起動後、bge0 interfaceをplumbしてみましょう。

--
# ifconfig bge0 plumb
# ifconfig bge0
bge0: flags=1000802<BROADCAST,MULTICAST,IPv4> mtu 9000 index 3 inet 0.0.0.0 netmask 0
ether 0:11:24:x:x:x
--

キタ━━━━(゜∀゜)━━━━!!
mtuがbge.confに設定した9000という値になっていることが確認できます。

bge driverでもjumbo frameが使えるようになったので、早速、e1000gを対向にnetperfで性能測定をしてみましょうと。
Nevadaからドライバ持ってきたとか、どうでもいいのです!
この勢いにのって、このまま、Ultra 60で計測してみたいと思います。

Apple Gigabit Ethernet PCI-Xカードを搭載したマシンは、Ultra 60(UltraSPARC-II360MHz x2)ですが、カードは、64bit/66MHz PCIスロットに装着しています。
簡単ですが、以下が、netperf の計測結果になります。

mtu 1500
--
$ ./netperf -H 192.168.0.210 -l 60
TCP STREAM TEST from ::ffff:0.0.0.0(0.0.0.0)port 0 AF_INET to ::ffff:192.168.0.210(192.168.0.210)port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec

65535 65535 65535 59.99 551.68
--
mtu 9000
--
$ ./netperf -H 192.168.0.210 -l 60
TCP STREAM TEST from ::ffff:0.0.0.0(0.0.0.0)port 0 AF_INET to ::ffff:192.168.0.210(192.168.0.210)port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec

65535 65535 65535 59.99 610.42
--

おお!e1000gと違い、mtuサイズによって性能に変化が見られますね。
CPU負荷も、e1000gと同様な感じとなり、Jumbo Frame利用時には負荷が下がります。
Apple Gigabit Ethernet PCI-Xカードを取り付けた Ultra 60、7年前くらいのマシンということも
あり、あまり期待していなかったのですが、なかなかイイ感じの値を出してきましたね。
まだまだ、いけるぜっ!Ultra 60 ヽ(`Д´)ノ

データ送受信用のLEDが青色
他のモノとひと味違う
LEDを搭載

さらにさらに、性能以外の付加価値がこのカードにはありました!
一般的なネットワークカードは、リンクアップ時やデータ送受信を示すLEDを搭載しています。
当然、このカードにも搭載されていますが、他のモノとひと味違います。
なんと、LEDが青いのです!

リンクアップ用のLEDには、緑色が使われているのですが、データ送受信用のLEDが青色なので、データ送受信が発生すると、激しく点滅するのです。
Sun Blade 1000で実装された、Sunロゴイルミネーション(※)しかり、いつの時代も、光が人に与えてきた影響は計り知れなく・・・
といっても、当然、背面で光っているわけで・・・みえねぇーしヽ(;´Д`)ノ

※電源を入れると、筐体フロント部に刻印されているSunロゴが点灯するというものです。
発表当時は、この機能だけでBlade 1000が欲しくなったりしました。
残念だったのは、カタログに、「機能:Sunロゴ点灯」 の文字がなかったことくらいですか。
もちろん、性能にはなんの影響もありません。
いや・・・利用者の性能が 1.1 倍くら(以下省略

まぁ、こんなどうでもいいところでハートを鷲掴みにしてくれるのも、このカードの隠れた性能でしょうか。
というわけで、体を張って選択肢を作ってみましたが、いかがだったでしょうか。

Gigabitネットワークを構築し、NFSv4などで遊んでみると楽しいですよ(*´д`*)ハァハァ

本記事は、サンのユーザ様自らの体験をお寄せいただいたものであり、サン・マイクロシステムズ社としての公式情報ではありません。
※著者のタイトル、所属等は、執筆当時のものであり、現在と異なる場合があります。
また、日本サン・ユーザ・グループは2007年6月をもって休会しております。

  前号へ     次号へ  
ご意見・ご感想をお聞かせください
この記事は参考になりましたか?
     

コメントがございましたらご記入ください


ページ先頭へ

Sun Fun Times


 

お問い合わせ 会社情報 ニュース 採用情報 プライバシー 利用規定 商標 Copyright  Sun Microsystems, Inc.