Shangri-La は Intel などにおいて開発された,ネットワーク・ノードのためのプログラミング環境であ. Shangri-La においてはプログラミング言語 Baker によってプログラムを記述する. この報告では,Shangri-La と Baker に関するつぎの 3 つの論文をとりあげる. (この項目にふくまれる図はこれらの論文から引用したものであり,その著作権はこれらの論文の著者に属する.)
- [Gog 03] Goglin, S. D., Hooper, D., Kumar, A., and Yavatkar, R., “Advanced Software Framework, Tools, and Languages for the IXP Family”, Intel Technology Journal, Vol. 7, No. 4, pp. 64–76, 2003.
- [Vin 04] Vin, H., Mudigonda, J., Jason, J., Johnson E. J., and Lian, R., “A Programming Environment for Packet-processing Systems: Design Considerations”, Workshop on Network Processors and Applications, in 10th International Symposium on High-Performance Computer Architecture, February 2004.
- [Che 05] Chen, M. K., Xiao Feng Li , Lian, R., Lin, J. H., Lixia Liu, Tao Liu, and Ju, R., “Shangri-La: Achieving High Performance from Compiled Network Applications while Enabling Ease of Program-ming”, 2005 ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI’05), pp. 224–236, 2005.
(1) Chen ら [Che 05] は Intel IXP のパケット処理のためのプログラミング環境 Shangri-La とその評価について記述している. Vin ら [Vin 04] には Baker に関するもっとも詳細な記述と,コンパイラがおこなう最適化に関する詳細な記述がある. 実行時システムについてももっとも詳細に記述されている. Goglin ら [Gog 03] には CAM (連想メモリ) を使用したスレッドの相互排斥の方法や開発環境についての記述などがある.
(2) Shangri-La はつぎの要素からなっている.
- プログラミング言語 (Baker)
- コンパイラ
- 実行時システム (runtime system)
(3) プログラミング言語 Baker の特徴はつぎのとおりである.
- C 風の高級言語である (処理系は IXP (2400 など) 専用だが,言語仕様は IXP に依存していない.
- Click はレベルごとにことなる言語を使用して記述する 2 レベル・モデル (モジュール定義とモジュール間関係からなる) だったが,Baker は ひとつの言語での両方のレベルを記述する (が 2 レベル・モデルを採用している).
- 主要な要素は 2 つ: PPF (packet processing function), CC (communication channel)
- パケットは完全に独立なものとみなしている (パケット間で状態は保存されない -- ストリームはあつかえない).
(4) Baker によるプログラムの例: L3-Switch [Che 04]
l3_switch.l2_clsfr.ppf( ether_pkt * ph ) { int is_arp = ( ph->type == ETH_TYPE_ARP ); int forward = ( ph->dst == mac_addrs[ph->metadata.rx.port] ); if( is_arp ){ channel_put( arp_cc, packet_copy( ph )); } if( forward ){ ipv4_pkt iph = packet_decap( ph ); channel_put( l3_forward_cc, iph ); } else{ channel_put( l2_bridge_cc, ph ); } }
接続の記述例 [Vin 04]:
24. module L3Switch { 25. ppf L2Cls; //forward declarations of 26. ppf Bridge; //required PPFs 27. ppf LPM; 28. channels { 29. input Ethernet_packet_t input_chnl; //(A) 30. output packet_t output_chnl; //(B) 31. } 32. wiring { 33. //equate this module’s external channels 34. input_chnl = L2Cls.input_chnl; //(A=D) 35. output_chnl = Bridge.output_chnl; //(B=F1) 36. output_chnl = LPM.output_chnl; //(B=F2) 37. //bind internal PPFs channel endpoints 38. L2Cls.bridge_chnl -> Bridge.input_chnl;//(E1) 39. L2Cls.forward_chnl ->LPM.input_chnl; //(E2) 40. } 41. //module’s data 42. iface_table_t iface_tbl; 43. //module’s interface 44. void add_interface(iface_t r); 45. void del_interface(iface_t r); 46. };
データは型なしであり,ながさだけを指定する.
(5) Shangri-La のコンパイラの特徴はつぎのとおりである.
- IXP のための高度に最適化されたコードを出力する. (データを DRAM と SRAM にふりわける.)
- まず中間語 (WHIRL) に翻訳され,中間語への変換をへて,コードが生成される (XSCale むけには C のプログラムが出力される).
- PPF を 1 個のコアで処理するとスループットが不足するときは,複数のパイプライン・ステージへの分割や 2 個のコアによる並列処理などをおこなう. 複数のスレッドがつかわれることもある [Vin 04].
- IXP にはハードウェア・キャッシュがないので,ソフトウェアでそれをシミュレートする. キャッシュの検索には CAM か使用できる.
より詳細な手順が Vin ら [Vin 04] に記述されている.
(6) コンパイラが生成したコードは実行時システム RTS 上で実行される. RTS はコードをハードウェアにわりつける. コアの電源制御もおこなう. 動的再構成もおこなう. より詳細な記述が Vin ら [Vin 04] にある.
(7) 性能評価においては,L3 スイッチ,ファイアウォール,MPLS のそれぞれで 64B のパケットに対して最高約 2.5 Gbps (100%) の転送レートがえられている. 性能はコア数が 3~4 でほぼピークに達している (5 個以上は有効につかえない).