Network Algorighmicsよむ
HyperCutsやTreeBitmap(CRS-1のIP Lookupアルゴリズム)で有名なGeorge Varghese先生の著書 "NETWORKS ALGORITHMICS" を読む.
IX2015のIPSec再設定スクリプト
#!/usr/local/bin/ruby # check per min require 'rubygems' require 'open-uri' require 'oauth' require 'net/telnet' # ip setting src_site = "AAAA" dst_site = "BBBB" dst_host = "example.com" router_ip = "10.3.1.1" tftp_server_ip = "10.3.2.15" basedir = "/usr/local/adm/globalip/" id_rsa = "/usr/local/adm/.ssh/globalip_BBBB" #--- src_file = basedir + "ipaddress.txt" dst_new_file = basedir + dst_site + "_ipaddress.txt" dst_old_file = basedir + dst_site + "_ipaddress_old.txt" send_to = "hogehogehoge@" + dst_host + ":" + basedir + src_site + "_ipaddress.txt" # get time of day day_msg = "*** CHANGE *** [" + Time.now.strftime( "%Y/%m/%d-%H:%M" ) + "] " + src_site + ": " # get hostname hostname = open( "| hostname" ).gets # get current ip address from ix2015 by snmp new_ipaddr = open( "| /usr/local/bin/snmpwalk -v 1 -c public " + router_ip + " ipAdEntAddr | grep -v \" 10.\" | cut -d \" \" -f 4" ).gets # get old ip address from local file old_ipaddr = open( src_file ).gets fork { exec( "scp -i " + id_rsa + " " + src_file + " " + send_to ) } # update ddns if ( new_ipaddr != old_ipaddr ) then ############################################################ ### twit CONSUMER_KEY = 'XXXXXXXXXXX' CONSUMER_SECRET = 'XXXXXXXXXXXX' ACCESS_TOKEN = 'XXXXXXXXXXXXX' ACCESS_TOKEN_SECRET = 'XXXXXXXXXXX' consumer = OAuth::Consumer.new( CONSUMER_KEY, CONSUMER_SECRET, :site => 'http://twitter.com' ) access_token = OAuth::AccessToken.new( consumer, ACCESS_TOKEN, ACCESS_TOKEN_SECRET ) response = access_token.post( 'http://twitter.com/statuses/update.json', 'status'=> "@yogata " + day_msg + new_ipaddr + " by " + hostname ) ############################################################ ### log fp = File.open( src_file, "w" ) fp.write( new_ipaddr ) fp.close # update ipaddress file to fukuoka fork { exec( "scp -P 20022 -i " + id_rsa + " " + src_file + " " + send_to ) } end # check dst update new_ip = open( dst_new_file ).gets.chomp old_ip = open( dst_old_file ).gets.chomp if ( new_ip != old_ip ) then # connect server telnet = Net::Telnet.new("Host" => router_ip ) # get router name String routername = "" telnet.cmd("svintr-config").each {|c| if ( c.index("#") != nil && c.index("(config") == nil) then routername = c.sub(/^(.*)#.*/,'\1').chomp end } if routername == "" then p "can't get router name" return end # reset ipsec & upload config telnet.cmd("term len 0") telnet.cmd("show run").each {|c| if /ike policy ike_policy_#{dst_site} peer/ =~ c then telnet.cmd("no " + c) elsif /ipsec autokey-map ipsec_map_#{dst_site} #{src_site}_to_#{dst_site} peer/ =~ c then telnet.cmd("no " + c) end } telnet.cmd("ike policy ike_policy_#{dst_site} peer " + new_ip + " key hoge ike_proposal") telnet.cmd("ipsec autokey-map ipsec_map_#{dst_site} #{src_site}_to_#{dst_site} peer " + new_ip + " ipsec_proposal") telnet.cmd("write memory") # sleep 60 telnet.cmd("tftp put startup-config " + tftp_server_ip + ":" + routername + "_" + Time.now.strftime("%Y%m%d_%H%M_config.log")) telnet.cmd("exit") # update old file fork { exec( "cp -f " + dst_new_file + " " + dst_old_file ) } end
カーネル/VM勉強会@関西 其の参
カーネル/VM勉強会@関西 其の参に行ってきたのでメモ.
http://atnd.org/events/25291
どの発表も面白かった,ローカルアレンジメント・発表者の方々,ありがとうございました.
マルウェアの自動解析と自動検出 / @mayahu32さん
ヒューリスティックなマルウェア検出方法について.
呼び出し関数のログをとってN-gramでマルウェアか判別,なるほど!
呼び出し関数のログを取るためにあれこれフックする話.
コードを無害化するためにファイルアクセス,ネットワークアクセスを無効化するって話で,それだとマルウェア止まっちゃうじゃん!と思ったけれど,マルウェアかどうかを判別できればよいので止まっても構わないとのこと.確かにその通りだ.
Multi Thread Tiny BASIC / @takeokaさん
自作BASICについて.
マルチスレッドすごい!
fork(行番号)なところは直感的
Hello, World / @naota344さん
Python+Qtで書かれたプログラムがzshから呼び出されてGUIで描画されるまで.
詳細「Hello, World」ってTweetはまさにその通り.
libdcompile / @fadis_さん
fadisさんが作ったlibdcompileについて.
evalしたいのでライブラリなコンパイラが必要,LLVM+clangで.
中間コードをホストコードからコンパイル&マージ(JIT)して実行.ホストコードの情報は全部見える.
こんなことが出来るなんて.
Linuxカーネル3.3でNVIDIAのプロプライエタリドライバを使う / @cosmo__さん
Linuxカーネル3.3で使えなくなったNVIDIAドライバを使うようにする話.
カーネルヘッダの位置をハードコーディングしていたせいで,コンフィグチェックのシェルスクリプトでコケる
解決策1:昔の位置にシンボリックリンク or 解決策2:新しい位置を見るように中身を変更
今回は解決策1で解決,でも295.33で解決策2にて対応済み
soundcoreモジュールとLinuxのサウンドシステム / @takaswieさん
Linuxのサウンドシステムについて,ALSAとかとか.
soundcoreは1つのサウンドカードに複数のデバイスがあるとNGであったり,5.1chがNGであったり,色々な制約がある
ALSAはsoundcoreの制約への対策
なんとなくALSA使っとけみたいな感じで特に調べたことなかったので,勉強になった.
公開ミラーサーバの運用 / @yoppy3さん
NAISTのミラーサーバについて.
奈良先端科学技術大学院大学の「先端」は,奈良の先っちょって意味らしい :-)
ミラーサーバ向けなCPU(浮動小数点演算よりもメモリ帯域幅)とかZFS(L2ARCをSSDへ,でもこれはミラーサーバじゃなくても一般的にそうか)とかの話が参考になった.
ミラー向けMLとかって,そういうミラーサーバ特化なチューニングの話とか出てるのかな?と気になった.
ておくれ / @katsyoshiさん
VLSD http://sourceforge.jp/projects/vlsd/ について
ZFSぽい?
ておくれてない真面目な内容でした.
NEC IX2015のセカンダリIPアドレスでできないこと
セカンダリIPアドレスのセグメントに装置を置いたら,ルーティングする通信ができなかった.確認するとできないらしい.http://www.nec.co.jp/ixseries/ix2k3k/faq/ip.html#Q1-2
具体的には http://www.rtpro.yamaha.co.jp/RT/FAQ/TCPIP/secondary-address.html にある以下のような構成で,2台のコンピュータ/端末間の通信ができない.インターフェース名はix2015のものに変更済み.
+-------------+ | [Fa0/0.1] | +------+------+ | 172.16.184.33 (primary) 172.16.184.32/28 | 192.168.0.1 (secondary) 192.168.0.0/24 ------+----------+--------------------------+------------------ | | |172.16.184.34 |192.168.0.2 +---------+---------+ +---------+---------+ | コンピュータ/端末 | | コンピュータ/端末 |… +-------------------+ +-------------------+
引用元のYAMAHA RTシリーズは上記の構成を取れるらしい.
reading ”ServerSwitch: A Programmable and High Performance Platform for Data Center Networks"
NICにTCAMついたら面白くね?と思ってツイートしたら,実はあるらしい.
なので,読んでみた.
概要
プログラマビリティがあってTCAM持ってるチップがあったのでNICを作ってPCI-Eに接続した.既存のイーサネット/IP/MPLSのネクストホップ探索回路とプログラマブルTCAMを併用するため,任意のフローだけTCAMで制御できる.TCAMで処理は早いし,PCI-Eなので低遅延で広帯域だし,そもそもチップは安い.
所感
NICにTCAMを載せて高速転送させるのは面白そう,値段もお手頃.TCAMと既存イーサネット/IP/MPLS回路を併用するのが良いなぁ.プログラマビリティが欲しいところだけ設定すればよくて,それ以外は既存どおりの動かし方が可能.
ヘッダ書き換えや付与・除去の制約(というかVLAN関係がほとんどできない)のは残念だけれど,今後の実装なのかな.
TCAMは構造的に消費電力を多く使うけれど,今回のチップは容量が小さいせいか,15.4→15.7と0.3Wの増加なので思ったよりも少なかった.
転送制御のプログラマビリティを求めているOpenFlowとの比較について,OpenFlowではコントローラとスイッチ間の遅延が大きいし帯域もインターコネクトじゃないのでイケテないと云う指摘はごもっとも.
以下詳細(勝手な補足を含む)
Abst
データセンタに特化した制御をするために今まではソフトウェアで実装してたけれどこれは遅い.なので,一般的なイーサネットチップを低遅延なPCI-Eにくっつけて,かつプログラマブルにして実装する.
まずまずしたいことは,ソースルーティングとか複数のフォワーディング方法を実装すること,網内インテリジェンス(網内ルーティングでキャッシュへ誘導)を実現すること,網内輻輳をエンドノードに通知して輻輳回避をすること.
Introduction
関連研究の紹介.
今のネットワークはイーサネット/IP/TCPのフォーマットに基づいている,単一パス(OSPFとか)でありECMPとかあんまり使ってない,TCPの輻輳制御に頼っている,という特徴がある.
対してデータセンタに特化したやり方では,PortLandのような仮想MACアドレスを使った巨大L2のセグメント分け(階層化とL2ルーティング)とか,BCubeのようなエンド間のマルチパス利用とか,QCNのような網内輻輳をエンドノードに通知するしくみとか,色々ある.
データセンタでは後者を実現したくて,そのためにはプログラマビリティが重要.どう実装するかというと,ソフトウェア実装だと遅いし,ハードウェア実装でFPGA使うと高い.
そこで,プログラマビリティがあって,遅延が小さくて,広帯域で,安い方法を提案する.
Design Goals
以下の3点を実現できる設計を行った.
- フォワーディングエンジンをプログラムできること(D-plane)
- イーサネット(Exact Match)/IP(Exact Match or Longest Prefix Match)なマッチング以外にもできること.例えば BCube だと Strict Source Routing ぽい(たぶん)ので,そういうことができること.
- 新しいルーティング,シグナリング,フロー制御を実装できること(C-plane)
- BCubeの情報をもとにルーティングに反映できること,QCNのフィードバックができること.
- 網側でキャッシュへ導くような,DCNサービスを実現できること
- 他にもマルチキャストのコピーポイントをできるだけエンドノードに近くする,とか.
Design
Switching chip + NIC chipsの構成で,Switchig chipはデータ(D-plane)パケットの転送をTCAM+イーサネット/IP/MPLSの専用回路を併用して行う.NIC chipsは制御(C-plane)パケットの通信を行う.
APIを用意してTCAMの書き換え,マッチングができる.それ以外のAPIとしてはヘッダ書き換え(一部のみ)とか,カウントとかも用意している.
Implementation
価格は100個で$400ぐらいする
転送してない状態での消費電力は15.4W,フルスピードで15.7W
Discussion
1. ヘッダ書き換えに制約がある.VLAN-ID書き換えとか,VLANの付与・除去とかができない.
2. 10G対応.同じアーキテクチャで10Gx24Port対応いけるけれど,バックプレーンが足り無い.PCI-Express2.0 x32 で片方向 128Gbps である.
Related Work
OpenFlowは同じような取り組みだけれど,OpenFlowではコントローラとスイッチ間の遅延が大きいし帯域もインターコネクトじゃないのでイケテない.
10G規格XENPAK/XFP/SFP+の比較
10GbEの通信をするときにXENPAK/XFP/SFP+があるらしいので,その違いを調べてみた.
XENPAK | XFP | XFP+ | |
トランシーバ(L0) | ○ | ○ | ○ |
イーサネット(L1) | ○ | × | × |
イーサネットのPHYが載っているかの違いで XENPAK or XFP&SFP+ に分類できる.XFPとSFP+はトランシーバ部分しか定義されていないので,上位がイーサネットでもFibreChannelでもどちらでも良い.
1波10Gbpsシリアルと,4波10Gbpsパラレルの比較
10Gbpsの伝送速度を実現する方法として,1波10Gbpsシリアルと,4波10Gbpsパラレルの2種類があるので,その違いを調べてみた.
1波10Gbpsシリアル | 4波10Gbpsパラレル | |
符号化方式 | 64/66B | 8B/10B |
1波の伝送速度 | 10.3125Gbps | 3.125Gbps |
波数 | 1波 | 4波 |
波長多重方式 | なし | CWDM/DWDM |
伝送距離 | 数百m | 数十km |
4波パラレルだと8B/10B エンコードしているので長距離伝送が可能.
参考