Masa's blog

アクセスカウンタ

zoom RSS CentOS 6.5 rp-pppoeでpppoe-serverのカーネルモード動作

<<   作成日時 : 2014/07/13 04:45   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

自宅にギガ回線がやってくる! 早速ギガ対応ルータを買ったのですが、このルータのpppoeのスループットってどのくらいなんだろう?ってことで計ってみたくなりました。

ということで、早速pppoe-serverを自宅のCentOS 6.5マシンに建てて、これをプロバイダのpppoeサーバに見立てて実測してみよう! と、考えてみました...
イメージ的には
Windows ------> 測定対象Router(PPPoEクライアント) ---(PPPoE)--> CentOS6.5(PPPoEサーバ)

ただし、まずはルータのスループットを計る前に、素のPPPoE速度を計ってみなければいけません。 ルータより速度出なきゃ、計測にならないので。

■試験環境構築 (pppoe-server ユーザモード動作で)
そこで、まずは以下のような構成を組みました。CentOSはプロバイダ側のPPPoEサーバとして動作するイメージ。

Windows (PPPoEクライアント)---(PPPoE)--> CentOS6.5(PPPoEサーバ)


Windows
CPU : Core I7 4770
Mem : DDR3-1600
OS : Windows 7
NIC : Intel I218v Gigabit ether
PPPoEクライアント : OS付属のもの

CentOS
CPU : Core I7 3770K
Mem : DDR3-1600
OS : Cent OS 6.5 (2.6.32-431.17.1.el6.x86_64)
NIC : Intel 82579V Gigabit Network Connection (rev 04)
PPPoEサーバ : rp-pppoe (yum install で入れたもの)

PPPoEサーバの起動方法(ユーザモード)
pppoe-server -i eth0 -L [pppインターフェースのIP]

[pppインターフェースのIP]とは、pppoeでセッションが確立すると、pppoeサーバ側に新たなインターフェースppp*が出来るのですが、そこに割り当てるIPアドレスになります。PPPoEクライアントから見ると、PPPoEサーバのアドレス。
WindowsからのPPPoEの張り方は、google先生に聞きましょう。

■実測
これでiperf で計測しました。
Cent OS : iperf -s
Windows : iperf -c [CentOSのIP] -t10 -i1 -P3

結果は、740Mbps程度!! ダメじゃん!
測定対象のルータのPPPoEスループットはメーカ公表値は916Mbpsなのに...
どんなにカーネルパラメータやドライバのパラメータを変更しようともこれ以上上がらない。
ちなみにtopでのpppoe-serverのCPU使用率は70-80%程度。結構負荷高いのね。

■pppoe-serverのカーネルモードで動作させるには...
色々調べたらどうやら、pppoe-server(rp-pppoe)をカーネルモードで動作させると、早くなるらしい。
iperf に -k オプションがあるようです。が、yumで入れたものは-kオプションがつけられなく、ソースからビルドしなければいけません。

CentOS6.5の場合は、pppoeカーネル動作のためのカーネル再構築は不要。

※以下の手順は、yum install pppを実行し、CentOS6.5標準のrp-pppoeがインストールされた状態から実施。

1. pppのヘッダファイルが必要になるので、yum install ppp* で、ppp-devel-2.4.5-5.el6.x86_64 をインストール。
2. ヘッダファイルの存在確認
 ls /usr/include/pppd/pppd.h
3. rp-pppoeのソースを取得
 http://www.roaringpenguin.com/products/pppoe/ から、rp-pppoe-3.11.tar.gzをwgetなどでダウンロード。
4. tar xvzf rp-pppoe-3.11.tar.gz で展開
5. chown chown -R root:root rp-pppoe-3.11
6. cd rp-pppoe-3.11/src
7. ここで、pppoe-serverのソースを修正し、無理やりカーネルモードを有効にします。
 なぜ、有効にならないのかまでは調査しませんでした。
 vi pppoe-server.c
 で、#ifdef HAVE_LINUX_KERNEL_PPPOEを、消していきます。 以下は修正前と修正後のdiff。
 (親切じゃないですね。でもPGしたこと無い人でも簡単。以下に表示されている行を削除するだけです。以下の1148とかは行番号です)

1148d1147
< #ifdef HAVE_LINUX_KERNEL_PPPOE
1150d1148
< #endif
1202,1204d1199
< #ifndef HAVE_LINUX_KERNEL_PPPOE
< char *options = "X:ix:hI:C:L:R:T:m:FN:f:O:o:sp:lrudPc:S:1q:Q:";
< #else
1206d1200
< #endif
1240d1233
< #ifdef HAVE_LINUX_KERNEL_PPPOE
1244d1236
< #endif

9. cd ..
10. ./configure CFLAGS="-O2" --enable-plugin
11. make
12. make install
13. vi /etc/ppp/pppoe-server-options で以下のように修正
# PPP options for the PPPoE server
# LIC: GPL
#require-pap             <------ コメントアウト
require-chap <------ 追加
#login <------ コメントアウト
lcp-echo-interval 10
lcp-echo-failure 2
14. vi /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
#==============================================
# username auth_server password auth_ipaddress
"xxxxxxxxx@biglobe.ne.jp" * "password" 192.168.78.2 <----- 認証ユーザ名 * 認証パスワード PPPoEクライアントに割り当てるIP
#==============================================
15. その他
  とりあえず、以下も行いました。
  service iptables stop
sysctl -w net.ipv4.ip_forward 1
以上です。

カーネルモードでのPPPoEサーバの起動方法は、パラメータに-kをつければ良いだけ。
pppoe-server -k -i eth0 -L [pppインターフェースのIP]

■再実測!!
これでiperf で計測しました。
Cent OS : iperf -s
Windows : iperf -k -c [CentOSのIP] -t10 -i1 -P3

結果は、940Mbps程度!! OKじゃん!
これで、やっとルータのスループット図れます。

おっしゃ、これから間にルータ挟んで、測定だ!


テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
URL(任意)
本 文
CentOS 6.5 rp-pppoeでpppoe-serverのカーネルモード動作 Masa's blog/BIGLOBEウェブリブログ
文字サイズ:       閉じる