e1000eドライバを新しく。 [他パフォーマンス改善]
intelのLinux用で新しいドライバがリリースされています。
更新してみましょう。
$ tar zxvf e1000e-1.1.2.1a.tar.gz
$ cd e1000e-1.1.2.1a/src/
# make install
Makefile:130: *** Compiler not found. Stop.
ああ、そうでした。
開発環境は何も入れていませんでした(^^;)
というわけで、そっちがさきです。
# apt-get install build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
linux-headers-2.6.31-14 linux-headers-2.6.31-14-server
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
binutils dpkg-dev fakeroot g++ g++-4.4 gcc gcc-4.4 libc-dev-bin libc6-dev libgomp1 libstdc++6-4.4-dev
linux-libc-dev
Suggested packages:
binutils-doc debian-keyring debian-maintainers g++-multilib g++-4.4-multilib gcc-4.4-doc
libstdc++6-4.4-dbg gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc
gcc-4.4-multilib libmudflap0-4.4-dev gcc-4.4-locales libgcc1-dbg libgomp1-dbg libmudflap0-dbg
libcloog-ppl0 libppl-c2 libppl7 glibc-doc libstdc++6-4.4-doc
The following NEW packages will be installed:
binutils build-essential dpkg-dev fakeroot g++ g++-4.4 gcc gcc-4.4 libc-dev-bin libc6-dev libgomp1
libstdc++6-4.4-dev linux-libc-dev
0 upgraded, 13 newly installed, 0 to remove and 5 not upgraded.
Need to get 15.9MB of archives.
After this operation, 57.1MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://jp.archive.ubuntu.com karmic-updates/main binutils 2.20-0ubuntu2 [1,661kB]
Get:2 http://jp.archive.ubuntu.com karmic-updates/main libc-dev-bin 2.10.1-0ubuntu16 [217kB]
Get:3 http://jp.archive.ubuntu.com karmic-updates/main linux-libc-dev 2.6.31-19.56 [743kB]
Get:4 http://jp.archive.ubuntu.com karmic-updates/main libc6-dev 2.10.1-0ubuntu16 [2,648kB]
Get:5 http://jp.archive.ubuntu.com karmic-updates/main libgomp1 4.4.1-4ubuntu9 [25.5kB]
Get:6 http://jp.archive.ubuntu.com karmic-updates/main gcc-4.4 4.4.1-4ubuntu9 [2,866kB]
Get:7 http://jp.archive.ubuntu.com karmic/main gcc 4:4.4.1-1ubuntu2 [5,074B]
Get:8 http://jp.archive.ubuntu.com karmic-updates/main libstdc++6-4.4-dev 4.4.1-4ubuntu9 [1,526kB]
Get:9 http://jp.archive.ubuntu.com karmic-updates/main g++-4.4 4.4.1-4ubuntu9 [5,502kB]
Get:10 http://jp.archive.ubuntu.com karmic/main g++ 4:4.4.1-1ubuntu2 [1,448B]
Get:11 http://jp.archive.ubuntu.com karmic/main dpkg-dev 1.15.4ubuntu2 [573kB]
Get:12 http://jp.archive.ubuntu.com karmic/main build-essential 11.4 [7,170B]
Get:13 http://jp.archive.ubuntu.com karmic/main fakeroot 1.12.4ubuntu1 [126kB]
Fetched 15.9MB in 6s (2,276kB/s)
Selecting previously deselected package binutils.
(Reading database ... 78351 files and directories currently installed.)
Unpacking binutils (from .../binutils_2.20-0ubuntu2_amd64.deb) ...
Selecting previously deselected package libc-dev-bin.
Unpacking libc-dev-bin (from .../libc-dev-bin_2.10.1-0ubuntu16_amd64.deb) ...
Selecting previously deselected package linux-libc-dev.
Unpacking linux-libc-dev (from .../linux-libc-dev_2.6.31-19.56_amd64.deb) ...
Selecting previously deselected package libc6-dev.
Unpacking libc6-dev (from .../libc6-dev_2.10.1-0ubuntu16_amd64.deb) ...
Selecting previously deselected package libgomp1.
Unpacking libgomp1 (from .../libgomp1_4.4.1-4ubuntu9_amd64.deb) ...
Selecting previously deselected package gcc-4.4.
Unpacking gcc-4.4 (from .../gcc-4.4_4.4.1-4ubuntu9_amd64.deb) ...
Selecting previously deselected package gcc.
Unpacking gcc (from .../gcc_4%3a4.4.1-1ubuntu2_amd64.deb) ...
Selecting previously deselected package libstdc++6-4.4-dev.
Unpacking libstdc++6-4.4-dev (from .../libstdc++6-4.4-dev_4.4.1-4ubuntu9_amd64.deb) ...
Selecting previously deselected package g++-4.4.
Unpacking g++-4.4 (from .../g++-4.4_4.4.1-4ubuntu9_amd64.deb) ...
Selecting previously deselected package g++.
Unpacking g++ (from .../g++_4%3a4.4.1-1ubuntu2_amd64.deb) ...
Selecting previously deselected package dpkg-dev.
Unpacking dpkg-dev (from .../dpkg-dev_1.15.4ubuntu2_all.deb) ...
Selecting previously deselected package build-essential.
Unpacking build-essential (from .../build-essential_11.4_amd64.deb) ...
Selecting previously deselected package fakeroot.
Unpacking fakeroot (from .../fakeroot_1.12.4ubuntu1_amd64.deb) ...
Processing triggers for man-db ...
Setting up binutils (2.20-0ubuntu2) ...
Setting up libc-dev-bin (2.10.1-0ubuntu16) ...
Setting up linux-libc-dev (2.6.31-19.56) ...
Setting up libc6-dev (2.10.1-0ubuntu16) ...
Setting up libgomp1 (4.4.1-4ubuntu9) ...
Setting up gcc-4.4 (4.4.1-4ubuntu9) ...
Setting up gcc (4:4.4.1-1ubuntu2) ...
Setting up dpkg-dev (1.15.4ubuntu2) ...
Setting up fakeroot (1.12.4ubuntu1) ...
update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode.
Setting up libstdc++6-4.4-dev (4.4.1-4ubuntu9) ...
Setting up g++-4.4 (4.4.1-4ubuntu9) ...
Setting up g++ (4:4.4.1-1ubuntu2) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode.
Setting up build-essential (11.4) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
で、再び。
# make install
make -C /lib/modules/2.6.31-19-server/build SUBDIRS=/home/nao/e1000e-1.1.2.1a/src modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.31-19-server'
CC [M] /home/nao/e1000e-1.1.2.1a/src/netdev.o
CC [M] /home/nao/e1000e-1.1.2.1a/src/ethtool.o
CC [M] /home/nao/e1000e-1.1.2.1a/src/param.o
CC [M] /home/nao/e1000e-1.1.2.1a/src/e1000_82571.o
CC [M] /home/nao/e1000e-1.1.2.1a/src/e1000_ich8lan.o
CC [M] /home/nao/e1000e-1.1.2.1a/src/e1000_80003es2lan.o
CC [M] /home/nao/e1000e-1.1.2.1a/src/e1000_mac.o
CC [M] /home/nao/e1000e-1.1.2.1a/src/e1000_nvm.o
CC [M] /home/nao/e1000e-1.1.2.1a/src/e1000_phy.o
CC [M] /home/nao/e1000e-1.1.2.1a/src/e1000_manage.o
CC [M] /home/nao/e1000e-1.1.2.1a/src/kcompat.o
LD [M] /home/nao/e1000e-1.1.2.1a/src/e1000e.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/nao/e1000e-1.1.2.1a/src/e1000e.mod.o
LD [M] /home/nao/e1000e-1.1.2.1a/src/e1000e.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.31-19-server'
gzip -c ../e1000e.7 > e1000e.7.gz
# remove all old versions of the driver
find /lib/modules/2.6.31-19-server -name e1000e.ko -exec rm -f {} \; || true
find /lib/modules/2.6.31-19-server -name e1000e.ko.gz -exec rm -f {} \; || true
install -D -m 644 e1000e.ko /lib/modules/2.6.31-19-server/kernel/drivers/net/e1000e/e1000e.ko
/sbin/depmod -a || true
install -D -m 644 e1000e.7.gz /usr/share/man/man7/e1000e.7.gz
man -c -P'cat > /dev/null' e1000e || true
man:
cannot write to /var/cache/man/cat7/e1000e.7.gz in catman mode
e1000e.
完了〜
あ、古いドライバをバックアップするの忘れてた
ちなみに、こういう怒られ方をすることもあります。
# make install
Makefile:70: *** Linux kernel source not found in any of these locations:
Makefile:71:
Makefile:72: *** Install the appropriate kernel development package, e.g.
Makefile:73: *** kernel-devel, for building kernel modules and try again. Stop.
その備忘録として。。。
# apt-get install linux-source
# cd /usr/src
# tar xf linux-source-2.6.31.tar.bz2
そして、
# make install
OK!
ちなみに、intelのNICのドライババージョンはどうやって確認するのでしょうか?
はい。それらを取得するスクリプトがintelから用意されています。
こちら↓
さっそく。
あと、ethtoolも必要なので、
# apt-get install ethtool
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
linux-headers-2.6.31-14 linux-headers-2.6.31-14-server
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
ethtool
0 upgraded, 1 newly installed, 0 to remove and 5 not upgraded.
Need to get 72.1kB of archives.
After this operation, 270kB of additional disk space will be used.
Get:1 http://jp.archive.ubuntu.com karmic/main ethtool 6+20090307-1 [72.1kB]
Fetched 72.1kB in 0s (349kB/s)
Selecting previously deselected package ethtool.
(Reading database ... 80676 files and directories currently installed.)
Unpacking ethtool (from .../ethtool_6+20090307-1_amd64.deb) ...
Processing triggers for man-db ...
Setting up ethtool (6+20090307-1) ...
# chmod 755 netdriverinfo.sh
# ./netdriverinfo.sh
bash: ./netdriverinfo.sh: /bin/bash^M: bad interpreter: No such file or directory
怒られたりします
ちゃんとLFで保存しておいてほしいものです。
改行コードを変換するnkfコマンドをインストールします。
# apt-get install nkf
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
linux-headers-2.6.31-14 linux-headers-2.6.31-14-server
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
nkf
0 upgraded, 1 newly installed, 0 to remove and 5 not upgraded.
Need to get 121kB of archives.
After this operation, 311kB of additional disk space will be used.
Get:1 http://jp.archive.ubuntu.com karmic/universe nkf 2.07-1build1 [121kB]
Fetched 121kB in 0s (284kB/s)
Selecting previously deselected package nkf.
(Reading database ... 80688 files and directories currently installed.)
Unpacking nkf (from .../nkf_2.07-1build1_amd64.deb) ...
Processing triggers for man-db ...
Setting up nkf (2.07-1build1) ...
そして、CR+LFからLFへ変換します。
# nkf -Lu ./netdriverinfo.sh >./netdriverinfo2.sh
実行権限も与えます。
# chmod 755 netdriverinfo2.sh
それで。。
# ./netdriverinfo2.sh
eth0 : 00:19.0
Make/Model = Intel Corporation Device 5003
Ethernet controller = Intel Corporation 82567LF-2 Gigabit Network Connection
VenID:DevID = 8086:10cd
Driver name = e1000e
Driver version = 1.0.2-k2
eth1 : 02:00.0
Make/Model = Intel Corporation Device a01f
Ethernet controller = Intel Corporation 82574L Gigabit Network Connection
VenID:DevID = 8086:10d3
Driver name = e1000e
Driver version = 1.0.2-k2
OKです
あらたにコンパイルしたのはバージョンが1.1.2.1aなので、
これはバックアップし忘れた古いバージョンの方です。
再起動すると・・・・
# ./netdriverinfo2.sh
eth0 : 00:19.0
Make/Model = Intel Corporation Device 5003
Ethernet controller = Intel Corporation 82567LF-2 Gigabit Network Connection
VenID:DevID = 8086:10cd
Driver name = e1000e
Driver version = 1.0.2-k2
eth1 : 02:00.0
Make/Model = Intel Corporation Device a01f
Ethernet controller = Intel Corporation 82574L Gigabit Network Connection
VenID:DevID = 8086:10d3
Driver name = e1000e
Driver version = 1.0.2-k2
あれれ。。変わっていません。。
なんでかなぁ
気持ち悪いなぁ。。。
ちなみに、Bonding で mode=4だとどうなるのか? 試してみました。 [他パフォーマンス改善]
Bondingでmode=4を試すためには、、、
前提条件:
1. 各スレーブの速度と全/半二重を回復するためのベースドライバに
おける Ethtool サポート
2. IEEE 802.3ad 動的リンクアグリゲーションをサポートするスイッチ
とあるとおり、ハブがIEEE 802.3adに対応している必要があります。
たとえば、
PLANEX 8ポート ギガビットシンプルレイヤ2スイッチ(ジャンボフレーム) SWP-0208G
- 出版社/メーカー: プラネックス
- メディア: エレクトロニクス
とか、
NETGEAR Inc. GS108T 8ポート ギガビットスマートスイッチ GS108T-100JPS
- 出版社/メーカー: ネットギア
- メディア: エレクトロニクス
です。
お値段的には、後者なのですが、前者のMiniGBIC用拡張ポートにも惹かれます(^ ^;)
# もちろん、今のところ拡張ポートを使用する予定などないのですが、、
でもでも、PLANEXはわたくしの中で、買ってはいけないダメベンダーリストに
入っています
ので、念入りに、下調べを。。。と思った矢先、マニュアルが公開されていません。
旧型番SW-0208Gは公開されているのですが。。。
一応、SW-0208Gをチェックです。最低限のマニュアルの作りにはなっています。
が、SWP-0208Gとは仕様がかなり変わっているので、当てにはできません。
なんとか、SWP-0208Gのマニュアルを手に入れたのですが、それはそれは、
お粗末なマニュアルです。総ページ数34ページで、ブラウザでの設定画面の
説明がただ繰り返されているだけで、マニュアルと呼べるような代物ではありません。
SW-0208Gのマニュアルが112ページで日本語化されているのに比べてもお粗末
極まりありません。
ちなみに、SWP-0208Gでのポートトランキングの設定画面はこんな感じ
同じく、LACPの設定画面はこんな感じ
一方、GS108Tは140ページのマニュアルも公開され、ファームの
バージョンアップもしばしば行われているようです。
ということで、GS108Tを調達し、mode=4を試してみました。
独特のユーザーインターフェースなので一瞬戸惑いますが、、
慣れれば特に問題ありません。
まず、LAG ConfigurationからLAG IDのチェックボックスを選択し、
Admin Mode = Enable
LACP = Enable
と設定し、最後に右下の【APPLY】ボタンを押します。
次に、LAG Membershipを定義します。
リンクアグリゲーションしたいポートNoを選択し(選択するとxとなります)
最後に、右下の【APPLY】ボタンを押します。
以上で完了です。
Linux側も設定を変えましょう。
# vi /etc/modprobe.d/bonding
の mode=0 を mode=4 と書き換えます。
そして、再起動♪
正しくリンク出来た場合は、
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: slow
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 5
Number of ports: 2
Actor Key: 17
Partner Key: 3587
Partner Mac Address: 00:22:3f:f8:2f:64
Slave Interface: eth0
MII Status: up
Link Failure Count: 1
Permanent HW addr: 00:1c:c0:9c:27:32
Aggregator ID: 5
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:1b:21:53:7f:ac
Aggregator ID: 5
などと表示されます。
ちなみに、ベンチマークを取ってみますと、Bondingしない時相当のリード・ライト性能が
出ています。
ところが、念のため、ifconfigすると、、、、
# ifconfig
bond0 Link encap:Ethernet HWaddr 00:1c:c0:9c:27:32
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::21c:c0ff:fe9c:2732/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:2753612 errors:0 dropped:0 overruns:0 frame:0
TX packets:2496043 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3672414868 (3.6 GB) TX bytes:1913575166 (1.9 GB)
eth0 Link encap:Ethernet HWaddr 00:1c:c0:9c:27:32
UP BROADCAST SLAVE MULTICAST MTU:1500 Metric:1
RX packets:2753237 errors:0 dropped:0 overruns:0 frame:0
TX packets:2495783 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3672348130 (3.6 GB) TX bytes:1913531504 (1.9 GB)
Memory:ff600000-ff620000
eth1 Link encap:Ethernet HWaddr 00:1c:c0:9c:27:32
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:375 errors:0 dropped:0 overruns:0 frame:0
TX packets:260 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:66738 (66.7 KB) TX bytes:43662 (43.6 KB)
Memory:ff5c0000-ff5e0000
と、いうぐあいに、片方のNICしか使われていないようです。
ここで、eth0のケーブルを引っこ抜くと、、今度はeth1を使ってしっかり
通信でき、Bondingしない時相当のリード・ライト速度が出ています。
もう一度、ifconfigすると、
# ifconfig
bond0 Link encap:Ethernet HWaddr 00:1c:c0:9c:27:32
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::21c:c0ff:fe9c:2732/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:2964904 errors:0 dropped:0 overruns:0 frame:0
TX packets:2687976 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3954425499 (3.9 GB) TX bytes:2060353570 (2.0 GB)
eth0 Link encap:Ethernet HWaddr 00:1c:c0:9c:27:32
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:2753246 errors:0 dropped:0 overruns:0 frame:0
TX packets:2495787 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3672349142 (3.6 GB) TX bytes:1913531964 (1.9 GB)
Memory:ff600000-ff620000
eth1 Link encap:Ethernet HWaddr 00:1c:c0:9c:27:32
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:211658 errors:0 dropped:0 overruns:0 frame:0
TX packets:192189 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:282076357 (282.0 MB) TX bytes:146821606 (146.8 MB)
Memory:ff5c0000-ff5e0000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3724 errors:0 dropped:0 overruns:0 frame:0
TX packets:3724 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:376808 (376.8 KB) TX bytes:376808 (376.8 KB)
今度は、ベンチマークしたぶんだけ、eth1のRX,TXが増えています。
というわけでして、mode=4としてもリード・ライト性能の向上はありませんでした〜(>_<)
おしまい。
NETGEAR GS108T
作りとしては、高級感はなく、電源もACアダプタ取りです。
機能としてはいろいろありそうなので、しばらく遊べそうです
結局のところBondingで高速化はできなかった訳で。。 [他パフォーマンス改善]
結論から申し上げますと、ファイルサーバのさらなる高速化はできなかった訳です。
【iMac】-【Hub】=【ファイルサーバ】
と、まぁ、iMac-Hub間のリンクアグリゲーションが作成できなかったのが一因です。
APPLE iMac 27インチ 3.06GHz 1.0TB MB952J/A
- 出版社/メーカー: アップル
- メディア: エレクトロニクス
iMac ↑ ですので、イーサネットの口は一つなのですが、AirMac(WLAN)があるので、
有線LANと無線LANを束ねてリンクアグリゲーションしようと思ったのですが。。
ちなみに、Mac OSXでのリンクアグリゲーションの作り方は、こんな感じです。
おそらく。。
環境設定→ネットワーク
「仮想インターフェイスを管理」をぽちっ。
「新規リンクアグリゲート」をぽちっ。
イーサネットアダプタが二つ以上あればそれらを選択し、「作成」ボタンをぽちっ。
そう、AirMacはアグリゲートの対象インターフェイスとして認められず、
選択肢に挙がらないのです。。。
う〜ん、残念。
こんなこともあって、高速化は断念。
ちなみに、Bonding mode=0で試してみると、如実に低速化しました。
Bondingは高速化というよりは、負荷分散や冗長化が目的なので、致し方なしですね。
ベンチマーク結果はXbenchで、
Disk Test 38.03
Sequential 24.36
Uncached Write 20.51 12.59 MB/sec [4K blocks]
Uncached Write 73.93 41.83 MB/sec [256K blocks]
Uncached Read 44.01 12.88 MB/sec [4K blocks]
Uncached Read 12.63 6.35 MB/sec [256K blocks]
Random 86.66
Uncached Write 117.43 12.43 MB/sec [4K blocks]
Uncached Write 152.52 48.83 MB/sec [256K blocks]
Uncached Read 1722.80 12.21 MB/sec [4K blocks]
Uncached Read 32.78 6.08 MB/sec [256K blocks]
という具合に、Readの性能が著しく低下しました。
他のベンチマークでも同様の傾向でした(^^;)
いろいろ言い方ありますが。。。ちょっと整理。 [他パフォーマンス改善]
ネットワークインターフェースを束ねる技術にもいろいろあるようで、
ちょっと調べただけでも。。
チーミング Teaming
リンクアグリゲーション Link Aggregation
ポートトランキング Port Tranking
EtherChannel
などなどの言い方があるようです。
何がどう違うのでしょうか??
* ボンディング=Bonding
これはどうやら、Linux地方の方言のようです。
bondには元来「まとめる」という意味がありますが、LinuxのBondingモジュールを
用いることで、一台のコンピュータに取り付けられた複数のNICを利用し、負荷分散と
冗長化に備える仕組みです。
設定ファイルのmodeにより、動きを定義できます。詳細は後述。
*チーミング=Teaming
NICアダプタの機能名称としてよく見受けられます。
Intel,3Com,Realtekなどの各ベンダーは専用のツールなどを提供しており、
それらを適用することで、一台のコンピュータに取り付けられた複数のNICを
仮想化した一つのNICとして通信することができる仕組みです。
各ベンダーにより機能はさまざま。
*リンクアグリゲーション=Link Aggregation
*ポートトランキング=Port Tranking
*EtherChannel
どれもネットワーク機器の機能名称としてよく見受けられます。
ハブの複数のポートを仮想化した一つのポートとして見立て、主にハブ同士の
通信速度の向上と冗長化に備える仕組みです。
ポートトランキングと言わず、単に「トランキング」ということも。
アライドテレシスではポートトランキング、CISCOではEtherChannelと
言われるようです。
IEEEではIEEE802.3adとしてLACP(=Link Aggregation Control Protocol)が
標準化されています。ポートトランキングに対応していても、LACP
LinuxのBondingモジュールの設定項目modeについての覚え書き
balance-rr または 0
ラウンドロビンポリシー:利用可能なスレーブ群の最初から最後までの
一連の順番でパケットを送出します。このモードは負荷分散と耐障害性
を提供します。
active-backup または 1
アクティブバックアップポリシー:bond 中の1スレーブのみアクティ
ブです。別のスレーブはアクティブなスレーブが障害になった場合のみ
アクティブになります。ネットワークスイッチの混乱を避ける為、bond
の MAC アドレスは外部からは単一のポート(ネットワークアダプタ)に
見えます。
このモードは耐障害性を提供します。primary オプションはこの
モードの挙動に影響します。
balance-xor または 2
XOR(排他論理和)ポリシー:選択された転送ハッシュポリシーに基づい
て転送します。デフォルトのポリシーは単純です [(送信元の MAC アド
レスと送信先の MAC アドレスの排他論理和)をスレーブカウントで割っ
た余り]。別の転送ポリシーは xmit_hash_policy オプション(後述)経
由で選択できます。
このモードは負荷分散と耐障害性を提供します。
broadcast または 3
ブロードキャストポリシー:全スレーブインターフェースから全てのパ
ケットを送出します。このモードは耐障害性を提供します。
802.3ad または 4
EEE 802.3ad 動的リンク集合です。同速度および同じ二重設定を共有
する集合グループを作成します。802.3ad 仕様に従い、アクティブな集
合の全スレーブを利用します。
外への通信のスレーブ選択が送信ハッシュポリシーにしたがって行われ
ます。このポリシーはデフォルトの単純 XOR ポリシーから後述の
xmit_hash_policy オプションによって変更できます。全ての送信ポリ
シーが 802.3ad 準拠(特に 802.3ad 標準のセクション 43.2.4 で要求
されたパケットの順番ミスに関して)である訳ではない事に注意して下
さい。異なるピア実装は非準拠の変容許容性があります。
前提条件:
1. 各スレーブの速度と全/半二重を回復するためのベースドライバに
おける Ethtool サポート
2. IEEE 802.3ad 動的リンクアグリゲーションをサポートするスイッチ
ほとんどのスイッチは 802.3ad モードを有効にする為の何らかの設定
が必要になります。
balance-tlb または 5
適応転送負荷分散: 特別なスイッチサポートを必要としないチャネル結
合です。送信は各スレーブの現在の負荷(速度に関連して計算されます)
に従って分散されます。受信は現在のスレーブによって行われます。受
信しているスレーブが障害を起こした場合、別のスレーブが障害した受
信スレーブの MAC アドレスを引き継ぎます。
前提条件:
各スレーブの通信速度を得る為のベースドライバの ethtool サポート
balance-alb または 6
適応負荷分散: IPV4 通信の為の balance-tlb と受信負荷分散 (rlb)
を含み、特別なスイッチのサポートを要求しません。受信負荷分散は
ARP ネゴシエーションにより実現されます。bonding ドライバはローカ
ルシステムによって送信された ARP 応答の送信を出口で遮り、bond 内
のスレーブの1つの単独のハードウェアアドレスで (ARP 応答の)送信
元ハードウェアアドレスを上書きします。これにより、このサーバへの
異なる通信相手が異なるハードウェアアドレスを使うようになります。
まだファイルサーバのパフォーマンス向上の余地あり?? [他パフォーマンス改善]
各種ベンチマークを取ってきましたが、
ローカルのディスクアクセスが
Sequential Write: 210 MB/sec くらい
Sequential Read: 240 MB/sec くらい
という結果に対して、
ネットワーク越しのディスクアクセスが
Sequential Write: 70~90 MB/sec くらい
Sequential Read: 85~110 MB/sec くらい
ですので、もうちょっとパフォーマンス向上の余地はあるのでは?
と思う次第なのです。
ネットワークが1000Mbbsですので、125MB/secです。
これで頭打ちになっている感があります。
そこで。
Boding
NICを複数束ねて、冗長化と負荷分散に備える方法です。
しかーし、これには、スイッチングハブがポートトランキングに
対応している必要があります。
ですが、ものは試しです(^ ^;)
早速ですが、コマンドが足りないので、追加します。
ifenslaveなるbondデバイスにNICを登録するコマンドが入っていません。
# apt-get install ifenslave
次に設定。
# vi /etc/modprobe.d/bonding
と新たに、ファイルを作り、下記の設定を書き込みます。
options bonding mode=0 miimon=100
さらに、
#vi /etc/modules
で、
loop
lp
となっているところに、
bonding
を追記します。
あとはbondインターフェースの定義を行うだけです。
# vi /etc/network/interfaces
--
auto eth1
iface eth1 inet static
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
--
などとなっている箇所を
--
auto bond0
iface bond0 inet static
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
slaves eth1 eth2
--
こんな感じに書き換えます。
# ifconfig -a
で、eth2が認識されていることを確認します。
そして、再起動します。
これでOKです♪
ifconfigすると、bondインターフェースに続き、eth1,eth2インターフェースが
表示されます。
ところで、モジュールだけ再読み込みするってできないのかしら??
少し調べてみましたが、わかりませんでした。。
そういえば、この、eth1とかeth2とかってなんか気持ち悪いですね。
数字が1から始まっているあたり。。
・・しらべてみると、このファイルで定義されているようです。
/etc/udev/rules.d/70-persistent-net.rule
ここのNAME="eth1"を書き換えるといいみたいです。
早速書き換えます。二度手間ですが、/etc/network/interfacesも再度書き換え。
そして、再起動。
よかった(*^_^*)ちゃんと書き換わっていました
さて、これでベンチマークしてみます。
結果はまた次回。
Linux箱 HDDチューニング [他パフォーマンス改善]
Linux箱のHDDベンチマークは
まじめにベンチマーク Mac ⇔ Linux箱=RAID箱 Sambaでね☆
にてお伝えしたとおりですが、実はHDDアクセスについて
チューニング済みだったりします。
チューニングには、hdparmを用います。
詳しくはこちら
RAID箱で文字通り、RAID化されているため、ほとんどのチューニング
パラメータの設定ができませんが、
「ファイルシステムの先読みセクタ数を取得・設定する」-a オプションは
設定可能でした。
ベンチマークは
hdparm -a2048 /dev/sda
としており、標準では256です。
標準の256の場合のベンチマーク結果は
◆Write性能
No | 10MB転送 | 100MB転送 |
1 | 128.3 | 84.4 |
2 | 128.3 | 96.3 |
3 | 130.0 | 103.6 |
4 | 130.0 | 100.1 |
5 | 130.0 | 79.7 |
6 | 128.3 | 120.9 |
7 | 130.0 | 104.9 |
8 | 128.3 | 90.4 |
9 | 108.8 | 110.9 |
10 | 130.0 | 92.5 |
平均 | 127.2 | 98.4 |
◆Read性能
No | 10MB転送 | 100MB転送 |
1 | 47.7 | 58.9 |
2 | 49.3 | 61.9 |
3 | 45.5 | 57.9 |
4 | 44.7 | 59.5 |
5 | 51.1 | 58.9 |
6 | 48.4 | 55.7 |
7 | 50.6 | 58.2 |
8 | 43.1 | 50.8 |
9 | 48.8 | 49.2 |
10 | 44.5 | 50.2 |
平均 | 47.4 | 56.1 |
となり、-a2048とした場合の結果
◆Write性能
No | 10MB転送 | 100MB転送 |
1 | 108.8 | 112.3 |
2 | 93.6 | 102.6 |
3 | 111.2 | 106.7 |
4 | 88.6 | 69.6 |
5 | 111.2 | 105.3 |
6 | 88.6 | 113.2 |
7 | 110.0 | 101.9 |
8 | 110.0 | 105.9 |
9 | 115.1 | 88.0 |
10 | 112.5 | 91.9 |
平均 | 104.9 | 99.8 |
◆Read性能
No | 10MB転送 | 100MB転送 |
1 | 63.4 | 78.9 |
2 | 74.1 | 83.6 |
3 | 74.1 | 81.2 |
4 | 71.5 | 74.0 |
5 | 71.0 | 66.5 |
6 | 71.0 | 77.4 |
7 | 74.1 | 72.7 |
8 | 74.7 | 80.9 |
9 | 72.5 | 68.0 |
10 | 70.5 | 72.5 |
平均 | 71.7 | 75.6 |
と比較しますと、Wite性能がやや低下して、Read性能が大幅に
向上しています
じゃ、中間?の-a1024では?
はい、まだベンチマークしていません(^^;)