20140310 fpgax

31
2014/3/10 FPGA エエエエエエエ エエエエエエエエエエ FPGA エエエエエエエエエエエエエエエエエエ エエエエエエ エエエエ 1975 エ 1 エ 1 エエエエ エエエエエ エエエエエエエエエエエエエエエエエエエエエエエ エエエエエエエエエエエエエエ エエ エエエエエエエエエエ エエエエ エエエエエエエ エエエエエ FPGA エエ FPGA エ エエエエエエ Web FPGA エ CPU エエエエエエエ FPGA エエエエエエエ エエエエエエエエ エエエエエエエエエエ

description

FPGA exstream computing #5 About the fpga based HTTP proxy cache server 'freeocean.'

Transcript of 20140310 fpgax

Page 1: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA にネットワーク処理を実装してきた話と、これからの話

• 船田悟史– 1975 年 1 月 1 日生まれ、栃木県出身– 東京工業大学情報理工学研究科計算工学専攻でした– 東京工業大学無線研究部でした– 今は、株式会社イーツリーズ・ジャパン 代表取締役社長

• 今日の中身– FPGA 前夜– FPGA でWebサーバを作る– FPGA と CPU とイーサネット– FPGA の大変なところ、おもしろいところ– これから何をやりたい?

Page 2: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA前夜 -  TCP/IP を聞いて知る

• アマチュア無線を使って TCP/IP 通信– LinuxPC + TNC(Terminal Node Controller) + アマチュア無線機

• Linux には、 AF_AX25 が実装されています。– 物理層 : アマチュア無線 430/1200MHz 帯、 1200bps(Bell202)– リンク層 : AX.25( コールサインが MAC アドレス!)– ネットワーク層以上 : TCP/IP, SMTP, NNTP, HTTP…

– 音声帯域 (1200Hz と 2200Hz) の2音を使って 1 と 0 を表現– 音なので、ほかの無線機では、耳で通信の様子が聞こえる

– TCP/IP を音で感じることが出来る!• スリーハンドシェーク  SYN-SYN/ACK-ACK• パケットロスと、 TCP の再送

• メールの到着が、パケット通信の音でわかる。• メールが送信されていったのが、音でわかる。

– コンピュータの気持ちがわかる。• あー、がんばって再送しようとしてるけど、向こう側には聞こえてないんだなー• RESET パケットが出たよ、あきらめちゃったみたい。

Page 3: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA 前夜 -  TCP/IP を実装する (1-1)

• TNC-ZZ(1994-1995)– もっと速いインターネット接続をアマチュア無線で実現したい! – イーサネットインターフェースを持った TNC( の一部分)– FreeBSD の NE2000 デバドラのコードを参考に、アセンブラで NE2000 ドライバ

を作成– イーサネット -AX.25 ブリッジとして動作する

– この成果は PRUG96 プロジェクトへと引き継がれ、アマチュア無線で 808kbpsの TCP/IP 通信を実現した

• うわさによると、 Spe?dnet のきっかけになったとか

NE2000

イーサネット

Z-80 系 CPU(HD64180S)

ISA バスMbps シリアルインターフェース モデム

変復調

ベースバンド信号 アマチュア

無線機

担当範囲

Page 4: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA 前夜 -  TCP/IP を実装する (1-2)

– イーサネットの勉強には最適でした。– 毎回 UV-EPROM を書き換えるのが面倒。

• 紫外線を 20 分くらい当てるとデータが消える ROM• 書き込みにも数分かかる。

– このあと、 BOOTP クライアントと、 TFTP クライアントも実装して、ネットブートする Z80 システムも作りました。 ( デバッグを早くするため)

出典「 LAN によるハードウェア制御」

Page 5: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA 前夜 -  TCP/IP を実装する (2)

• picudp   (1999)– PIC マイコンを使って、 Web サーバを実装した!という人が海外に現れる

• 世界最小の Web サーバ• http://www-ccs.cs.umass.edu/shri/iPic.html

• まねしてみよう!

– TCP は面倒なので、とりあえず UDP のサーバ• インターフェースは RS232C/SLIP• IP アドレス固定 (10.0.0.1)• 1 ビット受信すると、 1 ビット送信する

– パケット全体はバッファしない。

• http://sato-www.cs.titech.ac.jp/funada/picudp/– Ping に答えるバージョン

• このあと、 PIC につないだサーミスタの値を UDP で返すように改造した– UDP 温度計サーバ

» 実装したものはどっかになくしてしまいました。。

Page 6: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA 前夜 - まとめ

• TCP/IP, Ethernet 関連のプロトコルを実装してわかったこと。

– 入ってきたものに、 RFC 通りに正しく答えれば、動く!

• 実装方法はどうでも構わない。• たとえ、

– C 言語でも、– Z-80 アセンブラでも、– PIC マイコンアセンブラでも、

– きっと FPGAでも。

• たまに RFC どおりではないものもあるが。

Page 7: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGAでWebサーバを作る

• なぜFPGAで作り始めたのか?– Web での申し込みイベントが増えた– そのたびにアクセス集中して、サービスがダウンする– 100倍速いサーバがあればいいんじゃないか?– FPGAで作ったら作れないか?

• 最近 10 万ゲートの FPGA が1万円くらいで買える (2000 年時点)• メモリも安くなってきた• CAM という特殊なメモリもある

– イーツリーズ・ジャパンでそれやろう!

• イーツリーズ・ジャパンの目標– 100 倍速いサーバを作る。– サービス事業者に買ってもらう。– 過程として、上場する、ことを前提に、資金を集める。

Page 8: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGAでWebサーバを作る -  freeocean

• Freeocean– HTTP プロキシ型のキャッシュサーバ

– 2006 年発売– 50 万同時 TCP コネクション– 出力帯域  1Gbps– キャッシュ容量 最大 32GByte– Name based のバーチャルホスト対応– Hot-Hot の冗長構成対応– IP アドレス単位、コネクション単位のトラフィックコントロール– アクセスログ出力

– 一度キャッシュしたものを、ひたすらクライアントに配るのが得意。

Page 9: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGAでWebサーバを作る• どうやって作る?

– とにかく FPGA と、 Ethernet の PHY LSI を買う– データシートを読む– 基板をつくって、半田付けする– イーサネットパケットを受信してみる

• ロジックアナライザで波形が見えればOK!• 見えた!

– そのまま折り返しで、送信してみる• ping と tcpdump• PC側で送ったパケットと同じものが帰ってきた!• 物理層OK

– イーサネットフレームを解析して、• ARP リプライのフレームを作る回路を作る• さきほどの送信回路につなぐ• ARP解決できた!

– IP と ICMP のヘッダ解析回路を作る• ICMP応答ヘッダをつくる。データ部分はそのまま折り返す。• IPヘッダを生成する。• チェックサムがなかなか合わない。• 送信回路につなぐ• ICMP Echo Request に、FPGAが答えた!( 2001 年 3月 )

Page 10: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGAでWebサーバを作る

• ICMP echo reply まで作れれば、あとはひたすら TCP と HTTP とファイルシステムをつくっていけばよい。

• 「。。。つくっていけばよい」ってそれほど簡単じゃない。

• この時点で、回路のパターン、法則性が見えてきた。– デザインパターンのようなもの?

• すべて扱うものはパケット– パケットが入ってきて、パケットが出て行く。

• ソフトウェアでの実装 (OS のなか)も同じ構造。– ip_input(), ip_output(), tcp_input() など

• 回路もそう作ればよい。– パケットが入ってきて、– そのパケットのヘッダやデータに対して、計算や処理をして、– パケットを出す– 、、、の繰り返し。

Page 11: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA でWebサーバを作る

• UPL処理回路

– 入力を受けて、処理をして、出力する。

– 入力は1つだけ。• 複数あると、検証のときの、入力パターンの組み合わせが爆発して大変

– 出力は複数あってよい。

受信FSM

処理FSM

起動 送信FSM

起動

パケットバッファメモリ

ヘッダレジスタ

ヘッダレジスタ

処理ロジック

入力パケット 出力パケット

Page 12: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA でWebサーバを作る• UPLってなに?

– Universal Protocol Line• なんでもパケットが通せる伝送路

– フロー制御付き の 片方向 の データ伝送路

• だたそれだけ。• フロー制御はあったほうがよい

– 例• 32bit のデータ信号線+イネーブル信号+フロー制御信号(次スライド)

• RS232C、パラレルポート

• USB

• イーサネットや、UDPや、TCPでもいい。

• RMIでもいい。

– インターネットを越えられる、回路モジュール間接続方式。

Page 13: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA でWebサーバを作る– 具体的な実装例

• 32bit パラレルな UPL伝送路– FPGA内部で使う

http://e-trees.jp/index.php/製品/UPLとは  より転載

Page 14: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA で Web サーバをつくる -  UPL 処理モジュール回路合成系

• パケットの送受信部やステートマシンの定型部を書くのが面倒

• 同じ部分は、スクリプトで合成しましょう– gene_uplmodule.awk

  .awk です。

Page 15: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA で Web サーバを作る -  gene_uplmodule

@ENTITY add_sub_module

@RECV 0 input 32Command, 32a, 32b, 32@END

@SEND 0 output 32Result, 32x, 32@END

@STAGE add_sub_module@SENSE command, a, b@SUBST x

if( command(7 downto 0) = X”00” ) then -- add value_x <= value_a + value_b; else -- sub value_x <= value_a – value_b; end if;

@TO resut_output;@END

@STAGE result_output@SUBST result

result <= X”00”; -- success @SEND output;@END

Add_sub_module.vhd

受信

Add_sub_module

Result_output

送信

Reset

入力 UPL 出力 UPL

command a b result z

Page 16: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA でWebサーバを作る -  UPLユーティリティー回路ライブラリ群

• パケット合流回路

– さすがにすべての回路が1入力というわけにはいかない。– 前提:データはいじらない– パケット経路として、複数を1つにまとめる。

• 幅変換回路、負荷分散回路など

• データはいじらないので、一回作ったら、あとは使いまわしできる。

受信FSM

送信FSM

パケットバッファメモリ

入力パケット

出力パケット受信FSM

パケットバッファメモリ

入力パケット

受信FSM

パケットバッファメモリ

入力パケット

アービタ

Page 17: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA で Web サーバをつくる - UPLの利点と欠点

• 利点– 回路同士が「電気的に」疎結合である

• 個々の回路モジュールで動作検証ができれば、全体でも動く• 配置配線もしやすい

– 回路同士がパケットインターフェースである• パケットでデータを捉えることが出来る• UDP パケットにカプセル化して、外部に取り出しやすい

– Tcpdump で、回路のデバッグが出来る

• デバイス分割がやりやすい。– FPGA間にパケットのインターフェースがあれば、とりあえずデバイス跨ぎができる。

• 欠点– パケットに入りきらない情報の扱いが面倒

• 大きなデータはパケットに分割しないといけない

– パケットの中身は、モジュール間で密結合• ツールでサポートがないとメンテが大変。

Page 18: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA で Web サーバを作る - モジュール構成

TCP/IP(v4/v6)

TCP/IP(v4/v6) HTTPHTTP帯域制御帯域制御

IPフィルタIPフィルタ

コンテンツメモリファイルシステムコンテンツメモリファイルシステム

キャッシュ制御

キャッシュ制御

コンテンツ鮮度管理コンテンツ鮮度管理

負荷分散負荷分散

冗長化負荷分散冗長化負荷分散

TCPポート転送TCP

ポート転送 ユーザインターフェース

ユーザインターフェースシステムマネジメント

( SNMP,syslog)

システムマネジメント( SNMP,syslog)

アクセスログ出力アクセスログ出力

透過フィルタ透過

フィルタURLリライトURLリライト

WebApplicationFirewall

WebApplicationFirewall

バーチャルホスト

バーチャルホスト

クライアント

Webアプリケーション

サーバ

Webアプリケーション

サーバ

ハードウェア部 ソフトウェア部

コンテンツアップデートコンテンツアップデート

キャッシュルール

キャッシュルール

インターネット側からのアクセスをすべてハードウェアにて高速処理

オリジンサーバアクセスをソフトウェアにより高機能化

イーサネット

Page 19: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA で Web サーバを作る - 内部構成

Ethernet 、 IPv4/v6TCP/Socket

HTTP

File System

CacheManager

Power supply

Page 20: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA で Web サーバを作る - で、もうかってまっかー?

• 某通信事業者様の配信サーバ– ウィルス対策ソフトウェアとパターンファイルを配信

• アイテック阪急阪神様– 「バーストアクセス対応WEBサービス」– http://www.itechh.ne.jp/related/burst.html

• 社内では、– 東日本大震災のときの、放射線量情報のキャッシュ配信– JAXA のロケットや人工衛星打ち上げのイベントの生中継

• お試しいただける装置がありますので、ぜひご活用ください。

Page 21: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA で Web サーバを作る - 苦労したところ

• TATが長い– 1回が約2時間

• コンパイル (HDL解析、 RTL合成、 P&R 、 bitgen) がとにかく遅い• 一行でも、パラメータだけでも変えると、全体コンパイル

– ソフトウェア業界と比べて、非常に遅れている。

– デバッグ、機能改善・追加に時間がかかる• デバッグモジュールの活用、 Tcpdumpベースのデバッグ

• 物を作るのはお金がかかる– 設計委託、製造委託で 2000 万円

• タイミングエラーは出てちゃ駄目– これ、ちゃんと動かすための大前提です

• タスクマネージャ、タイマー等の集中管理部は作るのが大変– 512k connection x 8timer = 4M timer の管理

• ファイルシステムもまだまだ改善の余地有り

Page 22: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGA で Web サーバをつくる - IPコア販売

• IPコア事業始めました– ハードウェアはお金がかかる– ノウハウをお安く提供します

• e7cores (Xilinx用です)– e7ether (10/100M, 1G, 10G ) PHY とのインターフェース、イーサフレーム送

受信– e7udpip (10/100M, 1G, 10G) UDP パケット送受信、 ARP/ICMP– e7tcpip TCP サーバ機能、 TCP クライアント機能 (開発中)

– e7pcie (Gen1, Gen2) GPIO 機能、 DMA インターフェース機能、             PC のメモリを FPGA から UPL でアクセス可能– e7memiface MIG のコアを使って、 UPL でメモリアクセスを提供– e7sata UPL で HDD/SSD に、メモリアクセスと同じようにアクセス (開発

中 )

– e7lvdsiface (Spartan6, 7 シリーズ ) LVDS で 937Mbps/pair の UPL経路を提供

Page 23: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

10GbE の取り組み

• 10GBASE-R系は、 FPGA の高速トランシーバで対応可能– Xilinx Vertex7, Kintex7– Altera Stratix V, Arria V

– 10GBASE-T は、外付け PHYLSI が必要

• Xilinx は、 PCS/PMA は無料でライブラリ提供、 MAC は有償ライブラリ。• Altera は、 PCS/PMA, MAC ともに有償ライブラリ。

• e7cores では、 Xilinx用には MAC コアを販売可能です。

Page 24: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

10GbEへの取り組み -  10G はここが大変

• ビットレートが高い– GbE では、 8bit 125MHz– 10GbE では、 64bit 156.25MHz

• フレーム間ギャップが短い– GbE では、 12clock あった– 10GbE では、 1clock しかない

• FIFOへの制御をぎりぎりまで切り詰めないと難しい

• CRC計算が大変– GbE では普通に LUT で CRC 計算できた– 10GbE では、ビットスライスする方式が必要– きっと、 40G,100G では、ハードマクロが必要だろう

• Altera は、すでに Vシリーズで、ハードウェアで CRC 計算をサポートしている。

Page 25: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

10GbEへの取り組み - UDPエコーの動作

10GbE

ペイロードサイズ2524 cycle(12.620u秒 )

251 cycle(1.255u秒 )

Page 26: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

これから何をやりたい?

• ハードウェアは何かとコストがかかる– これを低減する工夫が必要!!

• どうやって?– お金は(いっぱいは)ない、時間もあんまりない– 少しずつ、作って、貯めて、

• ビルディングブロック構想– 大きなFPGAのコンパイルには時間がかかる→ 小さなFPGAをいっぱい使う

– お客様ごとに、基板を作るのはお金と時間がかかる→ 小さなFPGA基板を、組み合わせて作る

– VHDLのコーディング(デバッグ)には時間がかかる→ すでに出来上がったUPLモジュールを使いまわす

• ソフトウェアでは当たり前のことがFPGAでは出来ていない(と思う)

Page 27: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

これから何をやりたい - 今

• 少しずつ群ができつつある– 回路設計製造業者( SI シナジーテクノロジー社、 ARKUS 社)との協業

– 機能試作を、さくっとできる環境とつくりたい

100BASE-TX「 exStick」10GbE x4 「 Axpcie6031 」

Mini-ITX-FPGA筐体SATA-FMC 「 Axfmc6040 」

1GbE x3 「 Axcmd6050 」

Page 28: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

おもう事 - イーサネットでいーさ

• FPGAとCPUをどうやってつなぐか?– RS232C– USB– PCIExpress– Ethernet

• イーサネットはデバイスドライバがいらない– 10M から 100G まで、スケールする– HUBを介して、複数の装置が接続できる– アプリケーションは Socket インターフェースが使える– インターネットを伝送路として使える

Page 29: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

おもう事 - FPGAとCPU

• CPUが得意なこと

– データはここにある。このデータをぐりぐりいじりたい

• 3GHz の ALU/ レジスタファイルは、やっぱり速い• CPUには高性能なキャッシュメモリシステムがある• 最先端で高速な I/Oが安くつなげる

• FPGAが得意なこと

– 固定長のデータがここに流れている。このデータをちょこっといじりたい

• どんなにがんばっても 600MHz くらい。普通は 300MHz くらい• キャッシュメモリがないので、外部メモリへのアクセスが多発すると性能が出ない• I/Oは広帯域 (1Tbps くらい ) に好きに作れる• 演算も帯域にあわせて、いっぱい作れる。 1000個はいける。

• 可変長データ処理はあまり得意ではない。特に文字列処理。– 1文字見て、次どうする?ってなる場合は、 300Mchar/sec くらいしか出ない。

Page 30: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

FPGAって

• 使いこなすにはノウハウがいる– あまりライブラリがない

• やりたいことをやるのにはいろいろ準備が必要– ものをつくらないといけない、買ってこないといけない

• 高性能が求められる領域では、がんばれば何とかできることが多い– 豊富な高速シリアルインターフェース– メモリだって必要なだけつなげればいい– パイプラインも好きに作れる– 好きな演算器をいっぱいならべられる

• 苦労も多いけど、

やっぱりFPGAっておもしろい

Page 31: 20140310 fpgax

2014/3/10 FPGA エクストリーム・コンピューティング第5回

参考文献

• 「 PACKET RADIO TODAY(小林直行著 ) 」で、イーサネット TNC が取り上げられる– CQ ham radio 1995 年10月号、 CQ 出版

• 「インターネット時代のハード制御、第2,3,4章」 (船田悟史著)– トランジスタ技術 1999 年 7 月号、 CQ 出版

• 「イントロダクション ネットワーク I/O の世界へようこそ!」 (船田悟史著)– LAN によるハードウェア制御、 CQ 出版

• 「第2章 ギガビット Ethernet と FPGA の接続方法」(船田悟史著)– FPGAマガジン No.3、CQ出版