Armadilloフォーラム

Armadillo-230 SDRAM 読み書き速度について

ono

2015年6月25日 10時16分

Armadillo-230で受けたUDPパケットを別の装置へ転送したいと考えています。

受けるデータのレートは最大約35Mbpsで、これを一度蓄えてから準リアルタイム(約35Mbps)で転送を行いたいのですが、
蓄えるためにはSDRAMを用いることになるので、ネックとなるのがSDRAMの読み書き速度だと考えています。

上記のレート(読み書き同時で各35Mbps)での読み書きは可能でしょうか。
また、もしご存知でしたら読み書きの速度を教えて頂きたく思います。

よろしくお願い致します。

コメント

at_takashi.sasayama

2015年7月1日 9時13分

笹山です。

> 上記のレート(読み書き同時で各35Mbps)での読み書きは可能でしょうか。
> また、もしご存知でしたら読み書きの速度を教えて頂きたく思います。

Armadillo-230 には 2つの Ethernet ポートが存在しますが、
それぞれ、別の Ethernet コントローラーで制御されており、
最大スループットが異なります。

コネクタ コントローラー    I/F名   最大スループット
-----------------------------------------------------
CON2     SoC内蔵           eth0    約 56.2Mbps
CON15    SMSC LAN9115-MT   eth1    約 35.0Mbps
-----------------------------------------------------
(NPtcp による計測結果、ブリッジ機能は無効状態で計測)

どちらのポートでも最大 35 Mbps での通信は問題無さそうです。

次にパケット転送を行った場合は、どれぐらいのスループットになるかを計測してみました。
パケット転送には iptables を用い、NPtcp のTCPパケットを全て転送しています。

■NPTcp ベンチマーク結果

PC-A <----> A230-eth0 <----> PC-B
約 41 Mbps
 
PC-A <----> A230-eth1 <----> PC-B
約 24 Mbps
 
PC-A <----> A230-eth0 <---> A230-eth1 <----> PC-B
約 30 Mbps
 
(スループットは両端のデバイス間で NPtcp により計測したものです)

35 Mbps 以上で通信が可能だったのは、eth0 のみでパケット転送した場合だけでした。

精確にボトルネックとなっている箇所は解析をしていないのですが、
CPU速度と、Ethernet コントローラーの性能がネックとなっていそうです。

また、UDPパケットが転送対象とのことですので、
今回のTCPパケットでの計測結果よりは、スループットは高くなると思います。

ご回答ありがとうございます。非常に参考になります。

状況としては以下を想定しておりました。
PC-A <----> A230-eth0 <---> A230-eth1 <----> PC-B
UDPパケットでしたらスループットは高くなるとのことで、おおむね35Mbpsは出そうだということは理解いたしました。

追加で質問させていただきたいのですが、
想定していたコンフィグレーション(PC-A <----> A230-eth0 <---> A230-eth1 <----> PC-B)での転送速度は、
eth0のみを使う場合(PC-A <----> A230-eth0 <----> PC-B)よりも低くなっておりますが、
両者では必要なCPUパワーに大きな差はないと考えております。

このことからすると、eth01とeth02を使った場合の速度のネックはeth1のEthernetコントローラにあると考えておりますが、この推論で正しいでしょうか?
(CPUでパケットの転送とは別の軽いプログラムを同時に走らせる必要があるため、CPUパワーに少しは余裕があることを確認したく思っております。)

at_takashi.sasayama

2015年7月13日 21時09分

笹山です。

> 想定していたコンフィグレーション(PC-A <----> A230-eth0 <---> A230-eth1 <----> PC-B)での転送速度は、
> eth0のみを使う場合(PC-A <----> A230-eth0 <----> PC-B)よりも低くなっておりますが、
> 両者では必要なCPUパワーに大きな差はないと考えております。
>
> このことからすると、eth01とeth02を使った場合の速度のネックはeth1のEthernetコントローラにあると考えておりますが、この推論で正しいでしょうか?
> (CPUでパケットの転送とは別の軽いプログラムを同時に走らせる必要があるため、CPUパワーに少しは余裕があることを確認したく思っております。)

vmstat 1 コマンドで、ネットワークスループット最大時のCPU使用率を、1秒毎に計測してみました。
結果としてはCPU使用率はいずれも 100% に到達していました。

以下、テスト結果を記載します。

■PC-A <----> A230-eth1 <----> A230-eth1 <----> PC-B
最大スループット:30 Mbps
CPU使用率       :100 %
割り込み回数    :5096 /秒
vmstatの実行間隔:1秒をキープ
vmstat結果
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0  14848   7932   3140    0    0     0     0 5096    9  0 100  0  0
 
■PC-A <----> A230-eth0 <----> PC-B
最大スループット:41 Mbps
CPU使用率       :100 %
割り込み回数    :132090 /秒
vmstatの実行間隔:20~30秒
vmstat結果
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 4  0      0  14452   7932   3112    0    0     0     0 132090   21  0 100  0  0
 
 
■PC-A <----> A230-eth1 <----> PC-B
最大スループット:24 Mbps
CPU使用率       :100 %
割り込み回数    :302 /秒
vmstatの実行間隔:1秒をキープ
vmstat結果
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0  15064   7932   3112    0    0     0     0  302    8  0 100  0  0

eth1 を含む構成ですと1秒当たりの割り込み回数が eth0 だけの構成より
圧倒的に少なくなるため、アプリによっては動作は問題ないかもしれません。
(例えば、今回使用した vmstat アプリは1秒間隔で実行ができていました。)

eth0 だけの構成ですと、割り込みが頻発しておりアプリを実行する余裕は殆ど無さそうです。

■参考情報

man vmstat
http://linuxjm.osdn.jp/html/procps/man8/vmstat.8.html