<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ref="http://purl.org/rss/1.0/modules/reference/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns="http://purl.org/rss/1.0/">
	<channel rdf:about="http://xmms.jp/blog/rss.rdf">
		<title>PC Junkie Rev3.0</title>
		<link>http://xmms.jp/blog/index.php</link>
		<description><![CDATA[<a href=static.php?page=about_copyright>about copyright</a>]]></description>
		<items>
			<rdf:Seq>
				<rdf:li resource="http://xmms.jp/blog/index.php?entry=entry230306-160036" />
				<rdf:li resource="http://xmms.jp/blog/index.php?entry=entry140411-010826" />
				<rdf:li resource="http://xmms.jp/blog/index.php?entry=entry130520-030318" />
				<rdf:li resource="http://xmms.jp/blog/index.php?entry=entry121210-201131" />
				<rdf:li resource="http://xmms.jp/blog/index.php?entry=entry121202-085945" />
				<rdf:li resource="http://xmms.jp/blog/index.php?entry=entry121129-050826" />
				<rdf:li resource="http://xmms.jp/blog/index.php?entry=entry120728-030127" />
				<rdf:li resource="http://xmms.jp/blog/index.php?entry=entry120721-073240" />
				<rdf:li resource="http://xmms.jp/blog/index.php?entry=entry120625-034653" />
				<rdf:li resource="http://xmms.jp/blog/index.php?entry=entry120331-230152" />
			</rdf:Seq>
		</items>
	</channel>
	<item rdf:about="http://xmms.jp/blog/index.php?entry=entry230306-160036">
		<title>【Monitoring】 ZabbixからESXiホストに刺さってるMegaRAIDの状態をLLDで動的に取得して監視する</title>
		<link>http://xmms.jp/blog/index.php?entry=entry230306-160036</link>
		<description><![CDATA[　個人でESXiを動かしていると、何かとLSIのRAID情報を取得したいと思うことがありますが、LSAではなくて既存のZabbixからデータを取得したいと思うことがあります。ありますよね(同調圧力)。<br />　何かいい方法がないかと見ていたらstorcliがjsonでデータを出力できることに気がついたので、ZabbixのLLDと組み合わせていい感じにデータを監視する方法を作りました。先にテンプレートのJSONを置いておきます。<br /><br /><a href=data/Template_LSI-storcli.json>Template_LSI-storcli.json</a><br><br /><br /> storcliが動けばLinuxであっても情報を取得できるので、agentのsystem.run形式で作ったものも同梱しておきます。storcliの実行にroot権限が必要になるので、storcliにスティッキービットをつけたりsudoを許可したりagent自体をrootでうごかしたりしていい感じに対応してください。<br />　system.runは悪だ!!!!!という方は、最終的にjsonが取れればいいので、userparameterにしたりrootのcronでstorcliを実行して結果をテキストデータとして出力してログ監視するなど、linuxであればやりようはいくつもあるのでいい感じに工夫してください。<br />　まあ、linuxでエージェントが入っているようであれば/var/log/kernelなどをmegaraid_sasといったようなキーワードで監視していれば大体のイベントが取得できますが…。<br /><br />　ESXi用のテンプレートはSSHで接続してstorcliの実行結果を取得するので、Zabbix-agentが入っていないLinuxを監視したい場合にも使えます。<br /><h2>前提条件</h2><br />　利用するにあたり、以下の前提条件が必要になります。<br /><br /><blockquote>Zabbixのバージョンが6系であること<br />監視対象上でstorcliが動かせること<br />作成したLDに対して名前がついていること<br />ssh接続が有効になっていること<br />ESXiホストの/etc/ssh/sshd_configのPasswordAuthentication が yesになっていること</blockquote> <br /><br />　注意点としては、LLDとJSONのクエリの関係で、作成した論理ディスクに対して名前が必要になります。デフォルトではついていないので、storcliで監視対象全てで被らない一意な名前をつけてあげてください<br /><br /><blockquote>/opt/lsi/storcli/storcli  /call/vall show all #一覧を確認<br />/opt/lsi/storcli/storcli  /c0/v0 set name=myhost01-boot #/c0/v0に対して名前を付ける</blockquote><br /><br /> ESXi側のSSHに関しては共通鍵認証でもいいですが、テンプレートの変更が必要なのでそのへんの設定は今回は省きます。デフォルトのkeyboard-interactiveになっていても動きそうな気がしますがテストしてません。<br />　また、テンプレートの形式がZabbix6形式になっているので4系では入らない気がします。LLDのためにJSONpathとカスタムスクリプトでJSを使っているので、これを元に一から作る場合であっても、Zabbix側のカスタムスクリプトでJSの拡張がされていないと動かない気がします。<br /><br />　いずれにしても、4系の環境がもうないのでテストしてないですが、JSONpathは4系でも使えたはずなのでなにかのヒントにはなるかと思います。<br /><br /><h2>利用方法</h2><br />　まず、Zabbixに監視するためのホストを作ります。ESXiの場合はSSHで接続するので、インターフェースは参照しないので127.0.0.1のままでOKです。ホスト名だけ入れてください。<br /><br /><a href=images/Zabbix_storcli-1.jpg class=lb><img src=images/Zabbix_storcli-1.jpg width=500px></a><br><br />　次に、マクロに色々仕組みます。利用しているマクロは以下になります<br /><br /><blockquote>{$IP}　接続先IP<br />{$PASS} SSHの接続パスワード<br />{$STORCLI} Storcliの配置先　ESXiデフォルトは/opt/lsi/storcli/storcliのはず<br />{$USER} SSHの接続ユーザ</blockquote><br /><br /><a href=images/Zabbix_storcli-2.jpg class=lb><img src=images/Zabbix_storcli-2.jpg width=500px></a><br><br /> 今思うと{$IP}はホスト作るときにIPで作って{#HOST.IP}でも良かったのでは??という気がしますが、作ってしまったのでそのままにします。また、PASSについてはデバッグが終わったあとであればSecret textに変更可能ですが、最初はクリアテキストでデータが取れるかを見たほうがいいです。<br /><br />　作成したホストに今回のテンプレートをリンクさせ、<code>LD Data from Storcli</code>を<code>Execute now</code>で実行します。正しく設定されていれば、LLDが発動してアイテムが増えるはずです。LDが増えない場合、上記の制限事項にある手順の<code>storcli  /cx/vx set name=uniquename</code> で名前をつけたか確認してください。Latest dataでデータが取得できているのにLDが増えない場合おそらくこれが原因です。<br />　同じく<code>PD Data from Storcli</code>を実行すると、刺さっている物理ディスクの一覧が取得できると思います。<br /><br />　Latest dataが取れない場合、ZabbixからESXiにSSHが届くか、storcliのパスが合っているかなどを確認してください。<br /><h2>制限事項</h2><br />　物理ディスクの監視ですが、ディスク、HBAのファームウェアのバージョンによっては取得できない項目があります。<code>BBM Error count</code>や<code>Shield State Count</code>などはある程度のクラスのディスクでないと値を持っていないので、ディスクによっては取得できないかもしれません。その場合は取得不可のマークが付きますが、影響がないのでそのままにするかLLDで作成されたアイテムから監視の無効化をしてください。<br /><br /><a href=images/Zabbix_storcli-3.jpg class=lb><img src=images/Zabbix_storcli-3.jpg width=500px></a><br><br /><br />　また、物理ディスクの監視のために実行している<code>storcli /call/eall/sall show all j</code>で応答するJSONがかなり大きいため、搭載ディスク本数が24本などの巨大なマシンの場合はうまく取れないかもしれません。<br /><br />　Zabbix6系ではTEXT型アイテムの場合、history_textテーブルに格納され、使っているDBがMariaDBであればmediumtext型で格納されるため1回のデータ取得で16MBまでは入りますが、使っているDBの種類によっては入り切らない可能性があります。参考までに、ディスクを8本搭載したマシンで<code>storcli /call/eall/sall show all j</code>を実行すると22KBのJSONが出来上がります。<br /><br />　調べた限り、Zabbixは1つのセッションで1GBくらいのデータを流せるようなので、おそらくSSHからのデータ取得で問題になることは少ないかと思いますが、場合によってはタイムアウトの時間を伸ばす必要があるかもしれません。　<br /><br /><strike>　<code>storcli /call/eall/sall show all j</code>の結果については依存アイテムを分解するために実行しているだけなので、Zabbixが6系であればヒストリを「Do not keep history」にしてもLLD分解後のデータ取得は可能です。<br />　もともとデバッグのために1時間しか保持していませんが、コマンド実行に問題がなさそうであればstorcliの履歴については取得しない設定でも問題ないです。</strike><br />→テンプレートの微調整の際にデフォルトではstorcliの実行結果を保存しないようにしました。storcliのコマンド実行結果を眺めたい場合は <code>PD Data from Storcli</code> のアイテムヒストリをnoneから適宜変更してください<br /><br /><br /><h2>技術的内容(うらみつらみ)</h2><br />　今回、JSONとLLDを使うにあたってかなり多くの問題にあたりました。まず1つめはstorcliの返すJSONの作りが悪すぎること、そして2つめはZabbix側のJSONの処理がイケてないことです。両方じゃねーか!!!<br /><h3>ZabbixのJSONの扱いが微妙</h3><br />　ZabbixでJSONを扱うときに2つの問題がおきます。まず1つ目は、LLDでJSONを扱う場合、見つかったキーが<code>[&quot;LLDNAME&quot;]</code>とダブルクオートとブラケットに囲まれた状態で取得します。中身だけ見つけてくれ…と、せめてどうにか値に対してtrimやiregsubなどが使えないか試したのですが、どうやらここをどうにかする方法はないようです。<br /><br />　そのため、アイテム名を整形するために<code>Temperture of {{#MR_PD_NAME}.iregsub(&quot;\[\&quot;(.*)\&quot;\]&quot;, \1)}</code>というような正規表現をところどころで書く必要がありイケてないです。<br />　LLDで見つかったアイテムのキーについても<code>mrstat.pd.temp.[&quot;[\&quot;/c0/e252/s0:WDC WD1005FBYZ-01YCBB1:WD-WMC6M0F4M8WN\&quot;]&quot;]</code>というような状態で入ってしまうのですが、どうせこれは他では使わないしもういいや…と諦めました。<br /><br />　2つ目は、LLDを実行するときにJSONから複数の値が見つかった場合、それぞれ<code>[{&quot;key&quot;: &quot;value&quot;},{&quot;key&quot;: &quot;value&quot;}]</code>で返答する必要があり、<code>[&quot;value&quot;,&quot;value&quot;]</code>だとイテレータが動いてくれないという点です。<br /><a href="https://www.zabbix.com/forum/zabbix-help/419391-utilizing-jsonpath-to-setup-an-lld-macros" >https://www.zabbix.com/forum/zabbix-help/419391-utilizing-jsonpath-to-setup-an-lld-macros</a><br />　これもハマりましたが、上記のスレッドのカスタムスクリプトに助けられました。なおしておいてくれ～～～～～<br /><br /><h3>storcliのJSON構造がカス</h3><br />　storcliのJSONの構造で苦労したのは物理ディスクの応答内容がカスなことです。一例としては以下のようになります<br /><br /><blockquote> {<br />  &quot;Controllers&quot;: [<br />    {<br />      &quot;Response Data&quot;: {<br />        &quot;Drive /c0/e252/s0&quot;: [<br />          {<br />            &quot;DG&quot;: 0,<br />            &quot;DID&quot;: 14,<br />            &quot;EID:Slt&quot;: &quot;252:0&quot;,<br />            &quot;Intf&quot;: &quot;SATA&quot;,<br />            &quot;Med&quot;: &quot;HDD&quot;,<br />            &quot;Model&quot;: &quot;WDC WD1005FBYZ-01YCBB2&quot;,<br />            &quot;PI&quot;: &quot;N&quot;,<br />            &quot;SED&quot;: &quot;N&quot;,<br />            &quot;SeSz&quot;: &quot;512B&quot;,<br />            &quot;Size&quot;: &quot;931.000 GB&quot;,<br />            &quot;Sp&quot;: &quot;U&quot;,<br />            &quot;State&quot;: &quot;Onln&quot;,<br />            &quot;Type&quot;: &quot;-&quot;<br />          }<br />        ],<br />        &quot;Drive /c0/e252/s0 - Detailed Information&quot;: {<br />          &quot;Drive /c0/e252/s0 Device attributes&quot;: {<br />            &quot;Coerced size&quot;: &quot;931.000 GB [0x74600000 Sectors]&quot;,<br />            &quot;Connector Name&quot;: &quot;Port 0 - 7 x1&quot;,<br />            &quot;Device Speed&quot;: &quot;6.0Gb/s&quot;,<br />            &quot;Firmware Revision&quot;: &quot;RR07    &quot;,<br />            &quot;Link Speed&quot;: &quot;6.0Gb/s&quot;,<br />            &quot;Logical Sector Size&quot;: &quot;512B&quot;,<br />            &quot;Manufacturer Id&quot;: &quot;ATA     &quot;,<br />            &quot;Model Number&quot;: &quot;WDC WD1005FBYZ-01YCBB2&quot;,<br />            &quot;NAND Vendor&quot;: &quot;NA&quot;,<br />            &quot;NCQ setting&quot;: &quot;Enabled&quot;,<br />            &quot;Non Coerced size&quot;: &quot;931.012 GB [0x74606db0 Sectors]&quot;,<br />            &quot;Physical Sector Size&quot;: &quot;512B&quot;,<br />            &quot;Raw size&quot;: &quot;931.512 GB [0x74706db0 Sectors]&quot;,<br />            &quot;SN&quot;: &quot;WD-WMC6M0J95THT&quot;,<br />            &quot;WWN&quot;: &quot;50014EE0AF2FC003&quot;,<br />            &quot;Write Cache&quot;: &quot;N/A&quot;<br />          },<br />          &quot;Drive /c0/e252/s0 Policies/Settings&quot;: {<br />            &quot;Certified&quot;: &quot;No&quot;,<br />            &quot;Commissioned Spare&quot;: &quot;No&quot;,<br />            &quot;Connected Port Number&quot;: &quot;7(path0) &quot;,<br />            &quot;Cryptographic Erase Capable&quot;: &quot;No&quot;,<br />            &quot;Drive position&quot;: &quot;DriveGroup:0, Span:0, Row:0&quot;,<br />            &quot;Emergency Spare&quot;: &quot;No&quot;,<br />            &quot;Enclosure position&quot;: &quot;1&quot;,<br />            &quot;FDE Type&quot;: &quot;None&quot;,<br />            &quot;Last Predictive Failure Event Sequence Number&quot;: 0,<br />            &quot;Locked&quot;: &quot;No&quot;,<br />            &quot;Multipath&quot;: &quot;No&quot;,<br />            &quot;Needs EKM Attention&quot;: &quot;No&quot;,<br />            &quot;PI Eligible&quot;: &quot;No&quot;,<br />            &quot;Port Information&quot;: [<br />              {<br />                &quot;Linkspeed&quot;: &quot;6.0Gb/s&quot;,<br />                &quot;Port&quot;: 0,<br />                &quot;SAS address&quot;: &quot;0x4433221107000000&quot;,<br />                &quot;Status&quot;: &quot;Active&quot;<br />              }<br />            ],<br />            &quot;SED Capable&quot;: &quot;No&quot;,<br />            &quot;SED Enabled&quot;: &quot;No&quot;,<br />            &quot;Sanitize Support&quot;: &quot;Not supported&quot;,<br />            &quot;Secured&quot;: &quot;No&quot;,<br />            &quot;Sequence Number&quot;: 2,<br />            &quot;Successful diagnostics completion on&quot;: &quot;N/A&quot;,<br />            &quot;Wide Port Capable&quot;: &quot;No&quot;<br />          },<br />          &quot;Drive /c0/e252/s0 State&quot;: {<br />            &quot;BBM Error Count&quot;: 0,<br />            &quot;Drive Temperature&quot;: &quot; 32C (89.60 F)&quot;,<br />            &quot;Media Error Count&quot;: 0,<br />            &quot;Other Error Count&quot;: 0,<br />            &quot;Predictive Failure Count&quot;: 0,<br />            &quot;S.M.A.R.T alert flagged by drive&quot;: &quot;No&quot;,<br />            &quot;Shield Counter&quot;: 0<br />          },<br />          &quot;Inquiry Data&quot;: &quot;7a 42 ff 3f 37 c8 10 00 00 00 00 00 3f 00 00 00 00 00 00 00 20 20 20 20 57 20 2d 44 4d 57 36 43 30 4d 39 4a 54 35 54 48 00 00 00 00 00 00 52 52 37 30 20 20 20 20 44 57 20 43 44 57 30 31 35 30 42 46 5a 59 30 2d 59 31 42 43 32 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10 80 00 40 00 2f 01 40 00 00 00 00 07 00 ff 3f 10 00 3f 00 10 fc fb 00 00 5d ff ff ff 0f 00 00 07 00 &quot;<br />        }<br />      }<br />    }<br />  ]<br />}</blockquote><br /><br />　各情報について、なぜ変動する値がキーになっているのか、微妙に違うキーに値を入れるのやめろ、と言いたくなります。例えば、ディスクの温度とシリアルを取りたい場合のデータの位置は以下になります。<br /><br /><blockquote> json.Controllers[0][&quot;Response Data&quot;][&quot;Drive /c0/e252/s0 - Detailed Information&quot;][&quot;Drive /c0/e252/s0 State&quot;][&quot;Drive Temperature&quot;] = &quot; 32C (89.60 F)&quot;;<br />json.Controllers[0][&quot;Response Data&quot;][&quot;Drive /c0/e252/s0 - Detailed Information&quot;][&quot;Drive /c0/e252/s0 Device attributes&quot;].SN = &quot;WD-WMC6M0J95THT&quot;;</blockquote><br /><br />　なぜ以下のようにしなかったのか…<br /><br /><blockquote>json.Controllers[0][&quot;Response Data&quot;][&quot;PhysDrive&quot;][0][&quot;Path&quot;]= &quot;/c0/e252/s0&quot;;<br />json.Controllers[0][&quot;Response Data&quot;][&quot;PhysDrive&quot;][0][&quot;SN&quot;] = &quot;WD-WMC6M0J95THT&quot;;<br />json.Controllers[0][&quot;Response Data&quot;][&quot;PhysDrive&quot;][0][&quot;Detailed Information&quot;][&quot;State&quot;][&quot;Drive Temperature Celsius&quot;] = 32</blockquote><br /><br />　もともとディスクのシリアルと型番を元にクエリを投げて温度を取ろうと思い、上記のような構造であればJSONだけでクエリが完結したのですが、このような構造のためLLDのキーに色々仕込む必要がありました。<br />　内容としてはカスタムスクリプトに正規表現でパスを取り出すものを仕組み、LLDの名前として取得して、LLDのアイテムプロトタイプで正規表現で取り出す、という内容です。<br /><br />　LLDのカスタムスクリプト<br /><br /><blockquote>var array = JSON.parse(value)<br />var drives = []<br />for (var a in array) {<br />    for (var ar in array[a]){<br />        if ( ar.indexOf(&quot;Detailed Information&quot;) != -1){<br />            prefix=ar.replace(/(Drive\s\/[\w\/]+)\s.*/,&quot;$1&quot;);<br />            path=ar.replace(/Drive\s(\/[\w\/]+)\s.*/,&quot;$1&quot;);<br />            detail=prefix+&quot; Device attributes&quot;;<br />            drive=path+&quot;:&quot;+array[a][ar][detail][&quot;Model Number&quot;].trim()+&quot;:&quot;+array[a][ar][detail].SN<br />            drives.push(drive)<br />        }<br />    }<br />}<br /><br />var len = drives.length;<br />var x = 0<br />output = &quot;{ \&quot;data\&quot; :[&quot;<br />for (; x &lt; len - 1; x++){<br />output += &quot;{\&quot;Name\&quot;: \&quot;&quot; + drives[x] + &quot;\&quot;},&quot;<br />}<br />output += &quot;{\&quot;Name\&quot;: \&quot;&quot; + drives[x] + &quot;\&quot;}&quot;<br />output += &quot;]}&quot;<br />return output </blockquote><br /><br />　上記のカスタムスクリプトでこのような名前が取れるので、これをLLDで見つかったディスクとして認識させます。<br /><br /><a href=images/Zabbix_storcli-4.jpg class=lb><img src=images/Zabbix_storcli-4.jpg width=500px></a><br><br /><br /> そして、LLDのアイテムプロトタイプにて、JSONpathでデータを取得する際に<code>.iregsub(&quot;\[\&quot;([0-9a-z\/]+):.*\&quot;\]&quot;, \1)}</code>で一番最初のスロットナンバーの情報を切り出してJSONのキーに埋め込んでいます。<br /><br /><blockquote> $.Controllers..[&quot;Response Data&quot;]..[&quot;Drive {{#MR_PD_NAME}.iregsub(&quot;\[\&quot;([0-9a-z\/]+):.*\&quot;\]&quot;, \1)} State&quot;][&quot;Drive Temperature&quot;]</blockquote><br /><br />　イケてねえ…。まあイケてないものをイケてない方法でどうにかしようとしているので汚くなるのは必然ですが…。<br /><h2>まとめ</h2><br />　Zabbixは仕事でもプライベートでも使うことが多く、いろいろな意味で一番柔軟性が高い監視方法だと感じています。特定のログを検知しても水曜日の6-7時だけは検知を除外する、というような要求でも、Zabbixであればそれなりに複雑なトリガーの条件式で対応できますが、他の監視方法だとかなりキツイ、もしくはそんな方法はない、という事なりがちで、良くも悪くも使い込めば使い込むほど他のものが使えなくなります。<br /><br />　Zabbixは以前の仕事でそれなりに使っていたつもりだったのですが、今回やった内容は全く知らず、「え、そんなことできたの…」という発見もかなりありました。Zabbixはパズルですが、どうにかする方法はあるのでみんなで沼に沈みましょう。<br /><br />　おそらく、今回の方法ももう少しスマートな方法がある気がしますが、とりあえず動いたので参考にはなるかと思います。<br /><br />追記:<br />　その後実際に役に立ってしまったので動作については問題ないと思います。また、storcliのデータについてはデフォルトではヒストリを取らない設定に変更し、ディスクのステータスの追加のデータを取るように変更しました。何が起きてるかを知りたいときには手動でヒストリの取得を有効にしてください。<br />　また、コントローラーが複数存在する場合に、2台目以降のコントローラーのデータが上手くパースできていない問題も修正しました。<br /><br /><a href=images/Zabbix_storcli-5.jpg class=lb><img src=images/Zabbix_storcli-5.jpg width=500px></a><br>]]></description>
	</item>
	<item rdf:about="http://xmms.jp/blog/index.php?entry=entry140411-010826">
		<title>【その他】ごみスクリプト置き場</title>
		<link>http://xmms.jp/blog/index.php?entry=entry140411-010826</link>
		<description><![CDATA[　某所にいたときに不毛な作業を少しでも楽にしようと足掻いた時に作ったゴミを置いておきます。たまにこれをベースに何かを作ったりするので主に自分のためのメモですが。<br />　内容としては、Expectで複数サーバに対して同一コマンドをsuして実行するだけのゴミと複数のサーバから一か所にファイルをSCPで集めるか送るだけのゴミです。<br /><br /><br /><br /><h3>スクリプト背景</h3><br />　背景として、何かの作業をする時にまず踏み台サーバにログインし、そのあとでさらにSSHを張って二重SSHで作業する必要がある環境でした。その踏み台についても、環境ごとに踏み台先がいくつかあり簡単な作業をしようとしてもログインやらなんやらが結構めんどくさかったのです。全台同一設定作業であれば何とかして楽したいというのがこの背景です。<br /><br />　先進的なところであればこの手の仕組みはすでにあるはずなのですが、某所にはない＆何かエージェントを入れるといったことはできないため、どうにか手元だけでなんとかする必要がありました。<br />　最初はTeratermマクロで頑張ろうとしましたが、どうもマクロの書き方が好きになれなかったのと自分の知識不足により一部うまく処理できない内容があり、その結果Cygwin+Expect(Tcl)がよさげという判断になりました。そもそも論でその判断すら残念ですが。<br /><br /><h3>実行環境</h3><br />　Cygwin+Expectを入れてください。たぶん動きます。LinuxのExpectでも動いたので手元にLinux環境があるならyum install expectなどで入れてください。<br /><br /><br /><h2>SSHするゴミ</h2><br /><br /><blockquote>#!/usr/bin/expect<br />#使い方: ./gomi1.sh $IPが書かれたファイル $コマンドが書かれたファイル<br /><br />#IPのリストファイル読み込み<br />set file [open [lindex $argv 0 ]]<br />set list [split [read $file] &quot;\n&quot;]<br />close $file<br /><br />#コマンドリストファイル読み込み  <br />set file2 [open [lindex $argv 1 ]]<br />set cmd [split [read $file2] &quot;\n&quot;]<br />close $file2<br /><br />#ネットワーク環境が悪い場合を考え10文字送ったら0.1秒待つ<br />set send_slow {10 0.1}<br /><br />#ループカウンタその他<br />set prv &quot;&quot;<br />set cnt 1<br /><br />#カンマ区切りのサーバリストファイルを読み込む<br />foreach l $list {<br />  #カンマをばらす<br />  set line [ split $l &quot;,&quot; ]<br />  #第一カラムから踏み台先のIPを得る<br />  set humidai [lindex $line 0 ]<br />  #踏み台にログインするためのユーザー<br />  set h_usr     [lindex $line 1 ]<br />  #踏み台にログインするためのパスワード<br />  set h_pw  [lindex $line 2 ]<br />  #踏み台のプロンプト(PS1,[aaa@~ ]$ など)<br />  set h_ps     [lindex $line 3 ]<br />  #踏み台からSSH接続するIP<br />  set r_ip  [lindex $line 4 ]<br />  #踏み台からSSHを張る時に使うユーザー<br />  set r_usr    [lindex $line 5 ]<br />  #踏み台からSSHを張る時に使うパスワード<br />  set r_pw     [lindex $line 6 ]<br />  #リモートの通常ユーザのプロンプト<br />  set r_ps     [lindex $line 7 ]<br />  #リモートでsu -するときに使うパスワード<br />  set r_supw   [lindex $line 8 ]<br />  #リモートのrootのプロンプト<br />  set r_root_ps    [lindex $line 9 ]<br />  #最終行に来たら終了する<br />  if {$humidai == &quot;&quot;} {<br />    exit<br />  }<br />  #踏み台が直前と違ったらSSHを張りなおすために今のセッションを切る<br />  if { $prv != $humidai } {<br />    if { $cnt != 1 } {<br /> 　　   puts &quot; Humidai changed &quot;<br />   　　 close<br />    }<br />   #踏み台にSSHを張る<br />    spawn ssh $h_usr@$humidai<br />    expect &quot;password: &quot; {<br />      send -s &quot;$h_pw\r&quot;<br />   #初回SSH接続時のアレをｙする  <br />    } &quot;/no)? &quot; {<br />       send -s &quot;yes\r&quot;<br />       expect &quot;password: &quot;<br />       send -s &quot;$h_pw\r&quot;<br />    }<br />  }<br /> <br />  #--踏み台にSSHを張った後の処理--<br />  #プロンプトを待つ<br />  expect &quot;$h_ps&quot;<br />  #踏み台のヒストリがsshだらけになってしまうので無視させる<br />  send -s &quot;export HISTIGNORE=* \r&quot;<br />  expect &quot;$h_ps&quot;<br />  #踏み台から対象サーバにSSHを張る<br />  send -s &quot;ssh $r_usr@$r_ip \r&quot;<br />  expect &quot;password: &quot; {<br />   send -s &quot;$r_pw\r&quot;<br />  } &quot;/no)? &quot; {<br />   send -s &quot;yes\r&quot;<br />   expect &quot;password: &quot;<br />   send -s &quot;$r_pw\r&quot;<br />  }<br /> <br />  #--リモートにSSHを張った後の処理--<br />  expect &quot;$r_ps&quot;<br />  #suする<br />  send -s &quot;su - \r&quot;<br />  #password:を待つ<br />  expect &quot;:&quot;<br />  send -s &quot;$r_supw\r&quot;<br />  expect &quot;$r_root_ps&quot;<br />  #ワンライナーで長いコマンドを書いてしまうとヒストリがカオスなことになってしまうので無視させる<br />  send -s &quot;export HISTIGNORE=* \r&quot;<br /><br />  #--コマンドが書かれたファイルを読み込みrootでコマンドを実行していく--<br />  foreach c $cmd {<br />    expect &quot;$r_root_ps&quot;<br />    send -s &quot;$c \r&quot;<br />  }<br /> <br />  #--コマンド実行終了--<br />  #後処理、何度も実行するとヒストリがHISTIGNOREだらけになってしまうのでそれを消す<br />  send -s &quot;for a in `history|grep HISTIGNORE|awk &#039;{ print \$1 }&#039; |srot -nr `; do histroy -d \$a;done \r&quot;<br />  expect &quot;$r_root_ps&quot;<br />  send &quot;exit\r&quot;<br />  expect &quot;$r_ps&quot;<br />  send -s &quot;exit \r&quot;<br />  #踏み台のヒストリからHISTIGNOREを消す<br />  expect &quot;$h_ps&quot;<br />  send -s  &quot;for a in `history|grep HISTIGNORE|awk &#039;{ print \$1 }&#039; |srot -nr `; do histroy -d \$a;done \r&quot;<br /><br />  set prv &quot;$humidai&quot;<br />  set cnt [expr $cnt + 1 ]<br />}<br /></blockquote><br /><br />なお、ゴミなので入力エラーなどなにもチェックしていません。<br />また、ファイルへコピーするときはUTF-8（BOMなし）とLFの改行コードで作成しないと怒られます。<br /><br />使い方は、<br />./このファイル名.sh IPりすとファイル　コマンドが書かれたファイル<br />として使います。<br /><br />IPリストファイルの書き方は、以下のように書きます。Excelなどでcsvを作り、dos2unixなどで改行コードをlfにすると楽です。#などは別にコメントアウト扱いにならないため注意してください。<br /><br /><blockquote>#踏み台IP,踏み台ログインユーザ,踏み台ユーザパスワード,踏み台ユーザプロンプト,接続先IP,リモートユーザ,リモートユーザパスワード,リモートユーザプロンプト,リモートrootパスワード,リモートrootプロンプト<br /><br />192.168.1.100,usr1,usrpass,]$ ,192.168.2.99,usr1,usrpass,]$ ,rootpass,]# ,HOSTNAME<br />192.168.1.100,usr1,usrpass,]$ ,192.168.2.98,usr1,usrpass,]$ ,rootpass,]# ,HOSTNAME<br />192.168.1.100,usr1,usrpass,]$ ,192.168.2.97,usr1,usrpass,]$ ,rootpass,]# ,HOSTNAME<br />192.168.1.101,usr1,usrpass,]$ ,192.168.3.99,usr1,usrpass,]$ ,rootpass,]# ,HOSTNAME<br />192.168.1.101,usr1,usrpass,]$ ,192.168.3.98,usr1,usrpass,]$ ,rootpass,]# ,HOSTNAME<br />....<br /></blockquote><br />HOSTNAMEに関してはスクリプト内では使っていませんが、とりあえず一つのファイルに全ての情報を書いておくと作業依頼が来たときに対象を絞り出す時に便利なので書いていました。リストファイルはローカルのみでの保存なのでセキュリティーは確保されている前提です（きり<br /><br />作業対象のホスト名だけを書いたlstというファイルを置いて<br /><blockquote>for a in `cat lst`; do grep $a ip.lst ;done<br /></blockquote><br />みたいなことをするとリストから必要な情報だけをとれます。<br /><br />コマンドファイルは単純に実行するコマンドを縦に書いていきます。<br /><blockquote>echo &quot;`uname -n` at `date`&quot;<br />ls /<br />whoami<br /></blockquote><br />など…<br /><br />ちなみに&#039;&quot;&#039;や&#039;$&#039;などは特にエスケープしなくてもExpectかTclがよしなにしてくれるようですが、すべてを確認したわけではないので事前に爆発しないか確認してください。<br /><br /><h2>SCPするゴミ</h2><br />上のSSHするゴミで実行した結果を/tmpなどに書き出し、それをまとめて踏み台に持ってくるためのゴミです。<br />ただし、あくまでも”踏み台サーバから(まで)&quot;のファイル移動なので、手元に持ってくる（配布物を踏み台に持っていく）には手動でSCPをする必要があります。まあ少し書けばそれ単体のスクリプトも作れますが…。<br /><br /><blockquote>#!/usr/bin/expect<br />#使い方: ./gomi2.sh -p|-g $iplistfile $filelist<br />set m [lindex $argv 0 ]<br /><br />#SCPのオプション<br />set scp &quot;scp -pr&quot;<br />#持っていく、またはとってくるときにファイルを置くディレクトリ<br />set dir &quot;/tmp/&quot;<br /><br />#IPのリストを開く<br />set file [open [lindex $argv 1 ]]<br />set list [split [read $file] &quot;\n&quot;]<br />close $file<br /><br />#ファイルリストを開く<br />set file2 [open [lindex $argv 2 ]]<br />set   flst [split [read $file2] &quot;\n&quot;]<br />close $file2<br /><br />#カウンタとか<br />set prv &quot;&quot;<br />set cnt 1<br />set send_slow {10 0.1}<br /><br /> <br />#モードの切り替え<br />if {$m == &quot;-p&quot; } {<br />   set mode &quot;put&quot;<br /> } elseif {$m ==&quot;-g&quot;} {<br />   set mode &quot;get&quot;<br /> } else {<br />   puts stderr &quot; first option must be -p or -g &quot;<br />   puts stderr &quot; -p is &#039;put&#039;, -g is &#039;get&#039;&quot;<br />   exit<br /> }<br />#debug<br />puts &quot; mode is $mode &quot;<br /><br />#IPリストを開いてアレする<br />foreach l $list {<br />  #カンマをばらす<br />  set line [ split $l &quot;,&quot; ]<br />  #第一カラムから踏み台先のIPを得る<br />  set humidai [lindex $line 0 ]<br />  #踏み台にログインするためのユーザー<br />  set h_usr     [lindex $line 1 ]<br />  #踏み台にログインするためのパスワード<br />  set h_pw  [lindex $line 2 ]<br />  #踏み台のプロンプト(PS1,[aaa@~ ]$ など)<br />  set h_ps     [lindex $line 3 ]<br />  #踏み台からSSH接続するIP<br />  set r_ip  [lindex $line 4 ]<br />  #踏み台からSSHを張る時に使うユーザー<br />  set r_usr    [lindex $line 5 ]<br />  #踏み台からSSHを張る時に使うパスワード<br />  set r_pw     [lindex $line 6 ]<br />  #リモートの通常ユーザのプロンプト<br />  set r_ps     [lindex $line 7 ]<br />  #リモートでsu -するときに使うパスワード<br />  set r_supw   [lindex $line 8 ]<br />  #リモートのrootのプロンプト<br />  set r_root_ps    [lindex $line 9 ]<br /><br />  if {$humidai == &quot;&quot;} {<br />    exit<br />  }<br /> <br />  if { $prv != $humidai } {<br />    if { $cnt != 1 } {<br />      close<br />    }<br />    puts &quot; start scp &quot;<br />    spawn ssh $h_usr@$humidai<br />    expect &quot;password: &quot; {<br />      send -s &quot;$h_pw\r&quot;<br />    } &quot;/no)? &quot; {<br />      send -s &quot;yes\r&quot;<br />      expect &quot;password: &quot;<br />      send -s &quot;$h_pw\r&quot;<br />    }<br />  }<br />  #踏み台のヒストリがSCPだらけになってしまうのを防ぐためにすべてをHISTIGNOREする<br />  expect &quot;$h_ps&quot;<br />  send -s &quot;export HISTIGNORE=* \r&quot;<br />  expect &quot;$h_ps&quot;<br />  send -s  &quot;for a in `history|grep HISTIGNORE|awk &#039;{ print \$1 }&#039; |sort -nr `; do history -d \${a};done \r&quot;<br /><br /><br />  #ファイルリストを読み込む<br />  foreach f $flst {<br />    expect &quot;$h_ps&quot;<br />    if { $f == &quot;&quot; } {<br />      #最後のファイルをSCPするために空エンターする必要がある<br />      send -s &quot; \r&quot;<br />      break<br />    }<br />    #送信か受信か<br />    if {$mode == &quot;get&quot;} {<br />      #--ファイル受信開始--<br />      send -s &quot;$scp $r_usr\@$r_ip\:$f $dir \r&quot;<br />    } elseif {$mode == &quot;put&quot;} {<br />      #--ファイル送信開始--<br />      send -s &quot;$scp $f $r_usr\@$r_ip\:$dir \r&quot;<br />    }<br />   <br />    #SCPしていく<br />    expect &quot;password: &quot; {<br />      send -s &quot;$r_pw\r&quot;<br />    } &quot;/no)? &quot; {<br />      send -s &quot;yes\r&quot;<br />      expect &quot;password: &quot;<br />      send -s &quot;$r_pw\r&quot;<br />    }<br />  }<br />  set prv &quot;$humidai&quot;<br />  set cnt [expr $cnt + 1 ]<br />}<br /></blockquote><br /><br />使い方<br />ファイルリストに書かれた&quot;踏み台サーバにある&quot;ファイルを対象サーバの/tmpに配置する<br />./gomi2.sh -p  IPリストファイル ファイルリスト<br /><br />某所の環境はrootで直接ログインできず、一般ユーザでログインする必要があり、また権限の問題でファイルの受け渡しに/tmpを使う必要があったため、送信：受信ディレクトリを/tmpとしています。<br />IPリストファイルのフォーマットはSSHするゴミと同じです。<br /><br />ファイルリストは対象ファイルをフルパスで書く必要があります。<br /><br />例<br />SSHするゴミでifconfig -aの情報を&gt;/tmpに書き出し、SCPするゴミで踏み台に持ってくる<br /><blockquote>#コマンドファイル<br />[root@localhost html]# cat cmd.lst<br />ifconfig -a &gt;/tmp/ifconfig-`hostname`.txt<br />chmod 777 /tmp/ifconfig-`hostname`.txt<br />#IPリスト<br />[root@localhost html]# cat ip.lst<br />192.168.1.100,usr1,usrpass,]$ ,192.168.2.99,usr1,usrpass,]$ ,rootpass,]# ,HOSTNAME<br />192.168.1.100,usr1,usrpass,]$ ,192.168.2.98,usr1,usrpass,]$ ,rootpass,]# ,HOSTNAME<br />192.168.1.100,usr1,usrpass,]$ ,192.168.2.97,usr1,usrpass,]$ ,rootpass,]# ,HOSTNAME<br />192.168.1.101,usr1,usrpass,]$ ,192.168.3.99,usr1,usrpass,]$ ,rootpass,]# ,HOSTNAME<br />192.168.1.101,usr1,usrpass,]$ ,192.168.3.98,usr1,usrpass,]$ ,rootpass,]# ,HOSTNAME<br /><br />#実行<br />[root@localhost html]# ./gomi.sh ip.lst cmd.lst<br />（省略）<br /></blockquote><br />これでとるべき情報をまず/tmp/ifconfig-`hostname`.txtとして保存したので、その後SSHするゴミで踏み台の/tmpに集めます。<br /><blockquote>#リストファイル<br />[root@localhost html]# cat file.lst<br />/tmp/ifconfig-*.txt<br />#実行<br />[root@localhost html]# gomi2.sh -g ip.lst file.lst<br /></blockquote><br />これで踏み台の/tmpにそれぞれの内容が集まったので、あとは手でSCPして持ってきます。<br /><blockquote>[root@localhost html]# for a in `cut -f1 -d&quot;,&quot; ip.lst|uniq`;do scp -pr ${a}:/tmp/ifconfig-*txt ./;done<br /></blockquote><br />まとめ<br />本来であればこんなことしなくても一括配布的な何かが導入されていそうなものなのですが…<br />しかし、よくみんな今まで手で一つ一つ作業していたなあと逆に感心しました。<br /><br />自分のためのメモですが、何かのベースにしたりするのはご自由にどうぞ。Expectの需要が今更あるのか謎ですが。]]></description>
	</item>
	<item rdf:about="http://xmms.jp/blog/index.php?entry=entry130520-030318">
		<title>【Storage】VMware 5.1からSRPなデータストアを使う</title>
		<link>http://xmms.jp/blog/index.php?entry=entry130520-030318</link>
		<description><![CDATA[前回までのあらすじ<br /><blockquote><br />　無事にSRPターゲットの起動に成功したら、どんな人でもおそらくVMwareからこれを使いたいと考えるでだろう。VMware 4.xにはSRPイニシエータがあり、これからSRPなデータストアに繋ぐことが出来たので、Supported DeviceにあるConnectX2を買えばSRPが使える！と思っていた。<br />　しかし、去年の後半くらいからIBを触っていき、色々調べているうちに5系になってからVMware用SRPイニシエータが配布さていないことを知り、IBを使うには10GとしてiSCSIで繋ぐしかないことを知って絶望する。SRPの良さを知ってからこの事に気がついたので、知ったときはときはマジかよ…と結構落ち込んだ。<br />　一応、iSCSI over IPoIBがどの程度のパフォーマンスが出るのか調べてみると、ConnectedMode（MTU 65520)が使えないので10GbEなIBのMPIOx2（20Gbリンク)でさえ5GB/s(4-5Gbps)程度しか出ないらしい。Oh…<br /><a href="http://communities.vmware.com/thread/393784?start=0&amp;tstart=0" >http://communities.vmware.com/thread/39 ... p;tstart=0</a><br /><br /><blockquote> if anyone in Mellanox wants IB to get market acceptance then they should support this crap! (Mellanoxの中にIBのシェアを上げたいやつがるいならこのクズをどうにかしろ！)</blockquote><br /><br />　全くです…<br /><br />　はっきり言って、全く使い物にならないといってもいいレベルのサポート状況にうちひしがれていた中、ある情報が届く。<br /><br /><blockquote class="twitter-tweet" lang="ja"><p>@<a href="https://twitter.com/wakadannacom">wakadannacom</a> @<a href="https://twitter.com/xmms">xmms</a> @<a href="https://twitter.com/hanakara_milk">hanakara_milk</a>SRP使えるようになったらしいですよ。 ESXi 。松本さん情報ですが、、<a href="http://t.co/x0mOwbe8" title="http://www.mellanox.com/page/products_dyn?product_family=36&mtag=vmware_drivers">mellanox.com/page/products_…</a> under Downloads tab”</p>— hiroyuki satoさん (@hiroysato) <a href="https://twitter.com/hiroysato/status/304258751509168128">2013年2月20日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script><br /><br />　キター！ConnectX2が来たら本気出す！<br />　そして、ようやくConnectX2が来たので試してみたのであった…</blockquote><br /><br />　ConnectX2はもっと前からあったのですが、<a href="comments.php?y=13&amp;m=05&amp;entry=entry130513-131436" > 前回 </a>無事にSRPターゲットが使えるようになったので、VMwareから接続し、どの程度パフォーマンスが出るのか試してみました。<br /><br /><br /><br /><h2>検証環境</h2><br />　今回試験に利用した構成です。<br /><h3> SRP ターゲット</h3><br /><blockquote> OS<br />　ubuntu server 12.04<br />HW<br />　MB/Rampage Gene II<br />　CPU/Xeon X5647<br />　Mem/4GB@1333MHz x6=24GB,UDIMM<br />　HCA Infinihost III EX(4xDDR)<br />　HDD WDC WD400JD-55MS　x1　 ST3160318AS　x6 </blockquote><br /><br />前回作成した構成そのままです。<br /><br /><br /><h3>SRP イニシエータ(VMhost)</h3><br /><blockquote>OS<br />　VMware 5.1 update1(VMware-VMvisor-Installer-5.1.0.update01-1065491.x86_64.iso)<br />HW<br />　MB/Rampage II Extreme<br />　CPU/Xeon E5530@定格<br />　HCA/ConnectX2 VPI(QDR,QSFP)<br />　Memory 6x4GB@1066MHz</blockquote><br /><a href=images/R_P5090652.jpg class=lb><img src=images/R_P5090652.jpg width=500px></a><br><br />　いつも使っているマシンが使用中だったため、前回のイニシエータから微妙に変更されています。変更点としては、MBがLanParty UTからRampage II Extremeへ、CPUがCorei7 920からXeon 5530へ、メモリのクロックが1333から1066へと変わっています。また、HCAが最初から対応ファームウェアだったので今回は実行しませんでしたが、ファームのバージョンによってはファームのアップデートが必要です。<br /><blockquote>Firmware versions:<br />• ConnectX®-2: 2.9.1000 and above<br />• ConnectX®-3: 2.11.0500 and above</blockquote><br /><br /><h2>VMwareのセットアップ</h2><br />　インストールは、ローカルのHDDにISOからインストールしました。今思うとintel pro1000/CTを使ったiSCSI bootでもよかったのですが、その時は気がつきませんでした。。あと、RampageIIのオンボードのNIC (Marvell　 88E8056) がVMWでドライバを持っていなくて認識できなかったため、隣に転がっていた1000MTを追加する羽目になりました。ハードウェア対応は要チェックですね。。<br /><br />　インストールが終わったら、vSphere　Clientから構成タブ→左側の「ソフトウェア」カラム→セキュリティプロファイル　から、SSHとESXiシェルを有効にします。ESXiシェルを有効にするのは、SSHのログインをRSA鍵だけではなくパスワード認証も許可するためのものなので、不要な場合は以下を飛ばしてください。<br /><br /><h3>SSHのパスワードログイン有効化</h3><br />　ESXiシェルを有効にしたら、ローカルコンソールからAlt+F1を押してESXiシェルを立ち上げ、以下を変更します。<br /><blockquote>~ # vi /etc/ssh/sshd_config<br />#PasswordAuthentication no<br />PasswordAuthentication yes<br /></blockquote><br /><br /><h3>OFED for VMware ESXiインストール</h3><br /><br />　以下のDownloadタブから　「MLNX-OFED ESXi 5.X Driver」をダウンロードします。<br /><a href="http://www.mellanox.com/page/products_dyn?product_family=36&amp;mtag=vmware_drivers" >http://www.mellanox.com/page/products_d ... re_drivers</a><br /><br />　または、wgetでダウンロードします。<br /><blockquote>wget h t t p://www.mellanox.com/downloads/Drivers/MLNX-OFED-ESX-1.8.1.0.zip</blockquote><br /><br />　次に、<a href="http://www.mellanox.com/related-docs/prod_software/Mellanox_IB_OFED_Driver_for_VMware_vSphere_User_Manual_Rev_1_8_1.pdf" > マニュアル </a>に沿ってドライバを追加していきます。<br /><blockquote>esxcli software vib install -d MLNX-OFED-ESX-1.8.1.0.zip </blockquote><br /><br />　そして、VMホストを再起動します。再起動したあと、ESXiシェルからesxcliを実行してドライバがロードされているかを見ます。<br /><blockquote>~ # esxcli software vib list | grep Mellanox<br />net-ib-cm 1.8.1.0-1OEM.500.0.0.472560 Mellanox PartnerSupported 2002-02-26<br />net-ib-core 1.8.1.0-1OEM.500.0.0.472560 Mellanox PartnerSupported 2002-02-26<br />net-ib-ipoib 1.8.1.0-1OEM.500.0.0.472560 Mellanox PartnerSupported 2002-02-26<br />net-ib-mad 1.8.1.0-1OEM.500.0.0.472560 Mellanox PartnerSupported 2002-02-26<br />net-ib-sa 1.8.1.0-1OEM.500.0.0.472560 Mellanox PartnerSupported 2002-02-26<br />net-ib-umad 1.8.1.0-1OEM.500.0.0.472560 Mellanox PartnerSupported 2002-02-26<br />net-memtrack 2013.0131.1850-1OEM.500.0.0.472560 Mellanox PartnerSupported 2002-02-26<br />net-mlx4-core 1.8.1.0-1OEM.500.0.0.472560 Mellanox PartnerSupported 2002-02-26<br />net-mlx4-ib 1.8.1.0-1OEM.500.0.0.472560 Mellanox PartnerSupported 2002-02-26<br />scsi-ib-srp 1.8.1.0-1OEM.500.0.0.472560 Mellanox PartnerSupported 2002-02-26</blockquote><br /><br />　一番下に待ちわびたsrpドライバがいたら成功です。これで、ESXiシェルを抜けます。<br /><br /><h2>SRP イニシエータの接続</h2><br /><h3>SRP Targetの準備</h3><br />　 <a href="comments.php?y=13&amp;m=05&amp;entry=entry130513-131436" > 前回 </a> の通りtargetcliの初期設定は出来ている前提で、いつものように受け入れるセッションIDを追加するため、 SRPターゲット側でいつものように tailf /var/log/syslog します。tail(f| -F)したら、vSphereClientを起動し、構成→左側の「ハードウェア」カラム→ストレージアダプタ　から、ConnectX2がいると思うので、右クリックし「再スキャン」をします。<br /><br /><a href=images/VMware5_IB_SRP1.PNG class=lb><img src=images/VMware5_IB_SRP1.PNG width=500px></a><br><br /><br />すると、いつも通りにターゲット側にメッセージが上がると思います。<br /><blockquote>May 19 21:27:21 SRP kernel: [ 425.419379] Session : kernel thread ib_srpt_compl (PID 3662) started<br />May 19 21:27:21 SRP kernel: [ 425.419436] Rejected login because no ACL has been configured yet for initiator 0x8119bbffff00d8c50002c903000e7855.<br />May 19 21:27:21 SRP kernel: [ 425.419493] Session 0x8119bbffff00d8c50002c903000e7855: kernel thread ib_srpt_compl (PID 3662) stopped</blockquote><br /><br />　この 0x8119bbffff00d8c50002c903000e7855 という長いセッションIDをコピーしたら、targetcliからACLを追加します。<br /><blockquote>/&gt; cd ib_srpt/0xfe800000000000000019bbffff00d8c5/acls/<br />/ib_srpt/0xfe...ff00d8c5/acls&gt; create 0x8119bbffff00d8c50002c903000e7855<br />Successfully created Node ACL for 0x8119bbffff00d8c50002c903000e7855<br />Created mapped LUN 0.</blockquote><br /><br />　これで、再度vSphereClientから再スキャンをかけると、接続されます。<br /><br /><blockquote>May 19 21:29:21 SRP kernel: [ 545.118200] Received SRP_LOGIN_REQ with i_port_id 0x8119bbffff00d8c5:0x2c903000e7855, t_port_id 0x19bbffff00d8c4:0x19bbffff00d8c4 and it_iu_len 580 on port 1 (guid=0xfe80000000000000:0x19bbffff00d8c5)<br />May 19 21:29:21 SRP kernel: [ 545.119125] Session : kernel thread ib_srpt_compl (PID 3948) started</blockquote><br /><br /><h3>LUNのフォーマット</h3><br />　接続されたら、ストレージから「ストレージの追加」で今追加したLUNをフォーマットします。いつも通りです。<br /><br /><a href=images/VMware5_IB_SRP2.PNG class=lb><img src=images/VMware5_IB_SRP2.PNG width=500px></a><br><br /><br /><a href=images/VMware5_IB_SRP3.PNG class=lb><img src=images/VMware5_IB_SRP3.PNG width=500px></a><br><br /><br />　これで、ようやく念願のSRPが使えるようになりました。<br /><br /><h2>パフォーマンス</h2><br /><br /><h3>RAM上のディスクパフォーマンス</h3><br />　まず、いつも通りに20GBを割り当てたtmpfsを作りその上にFileIOな物を作ります。targetcliから /backstores/rd_mcp create name=srp_ramtest size=10Gとやることによりこんなことをしなくてもram上にファイルを作れることを知りましたが、一応今までと統一するためにtmpfsを利用します。ファイルを作成したら、通常通りOSを入れ、起動しました。利用したのはWindwos7 UltSP1、ハードウェア割り当てはCPUに2コア、メモリに2G、その他は特にウィザードからいじっていません。<br />　まずはCDMの結果です。<br /><a href=images/VMware_SRP_RAM_DDR_CDM2.PNG class=lb><img src=images/VMware_SRP_RAM_DDR_CDM2.PNG ></a><br><br />何故か実マシンで挿したときより早い…ホストのキャッシュが効いていそうな感じがします。<br />ディスクのIOもどこかで詰まっているようなことはありませんでした。桁が大きすぎるためか、何故かHDTuneのモニタリングが落ちます…。<br /><a href=images/VMware_SRP_RAM_DDR_CDM1.PNG class=lb><img src=images/VMware_SRP_RAM_DDR_CDM1.PNG width=500px></a><br><br /><br />しかし、HD Ttuneだと動きが若干違いました。同期と非同期の動きなのか、VMのキャッシュが効かないような読み方をするのか、何が原因だかはいまいち分かりませんでした。どっちが本当なんでしょうか。。<br /><a href=images/VMware_SRP_RAM_DDR_HDTune.PNG class=lb><img src=images/VMware_SRP_RAM_DDR_HDTune.PNG width=500px></a><br><br /><br />そして、HD Ttuneから書き込もうとしたのですが、RAMのサイズの関係でルートデバイスしか作れなかったので書き込みの実験は出来ませんでした。<br /><br /><h3>ZFS上のディスクパフォーマンス</h3><br />　次に、ZFSのディスクのテストです。上の実験中はZFSのモジュールをアンロードして20GBのRAMをファイルとして割り当てていましたが、今回はまずvmdkをコピーし、RAMのファイルを取り除き、ZFSのディレクトリ上に再びコピーして起動しました。構成は前回と同じく、ディスク6本のraidz構成です。ディスクへの書き込みは時間があるときに追記しようと思います。。<br /><br /><a href=images/VMware_SRP_ZFS_DDR_CDM1.PNG class=lb><img src=images/VMware_SRP_ZFS_DDR_CDM1.PNG width=500px></a><br><br /><br />　CDMとHD Ttuneの差がかなりありますが、今回はディスクの動きが見れたので、CDMのベンチ時はZFSのキャッシュに載っているためほぼReadの時にディスク負荷はかからず、HD Ttuneの時には常にディスクに負荷がかかっている、と分かりました。ディスク直に読んだときとのパフォーマンスの差は、原因がVMFS の特性であったりHDDの特性であったりするので、やはりデータストアにSSDを使わないとこれ以上のパフォーマンスは難しそうです。SSDでのZFS時の動きやL2ARCの動きを見てみたいので、誰かそこそこなSSDを束で貸してください＞＜多分書き込み過多でぶっ壊しそうですが＞＜<br /><br />　とにかく、「元のストレージが早ければそれだけSRPの速度はでる」と言うことが分かったのでよしとします。やはりパフォーマンスは金で買うしかなさそうですね…。]]></description>
	</item>
	<item rdf:about="http://xmms.jp/blog/index.php?entry=entry121210-201131">
		<title>DebianにSCSTをいれてWindows7とLinuxからSRPで接続してみる</title>
		<link>http://xmms.jp/blog/index.php?entry=entry121210-201131</link>
		<description><![CDATA[　SRP転送そのものはもっと前に出来ていたのですが、力尽きて書く気力がありませんでした。ですが、気が向いたので自分用の備忘録と情報共有としてメモします。どこかでSubnetManagerが動いている前提で進みます。貼り付けが多いので長いです。<br /><br /><br /><h2>カーネルの入手</h2><br />　本来であれば、自分でscstに対応したカーネルを作らないといけないのですが、すでにビルド済みの物が配布されているのでそれを使わせて頂きます。<br /> /etc/apt/sources.listに以下を追加します。<br /><br /><blockquote>vi /etc/apt/sources.list<br />deb <a href="http://www.motschke.de/debian/" >http://www.motschke.de/debian/</a> stable main<br />---略---</blockquote><br /><br />追記が終わったらレポジトリのアップデートをします<br /><br /><blockquote>root@ibhack:~# apt-get update<br />Hit <a href="http://ftp.jp.debian.org" >http://ftp.jp.debian.org</a> testing InRelease<br />Hit <a href="http://ftp.jp.debian.org" >http://ftp.jp.debian.org</a> testing/main Sources/DiffIndex<br />Hit <a href="http://ftp.jp.debian.org" >http://ftp.jp.debian.org</a> testing/main amd64 Packages/DiffIndex<br />Hit <a href="http://ftp.jp.debian.org" >http://ftp.jp.debian.org</a> testing/main Translation-en/DiffIndex<br />Ign <a href="http://www.motschke.de" >http://www.motschke.de</a> stable InRelease<br />Ign <a href="http://www.motschke.de" >http://www.motschke.de</a> stable Release.gpg<br />Get:1 <a href="http://www.motschke.de" >http://www.motschke.de</a> stable Release [96 B]<br />Get:2 <a href="http://www.motschke.de" >http://www.motschke.de</a> stable/main amd64 Packages [5,935 B]<br />Ign <a href="http://www.motschke.de" >http://www.motschke.de</a> stable/main Translation-en_US<br />Ign <a href="http://www.motschke.de" >http://www.motschke.de</a> stable/main Translation-en<br />Fetched 6,031 B in 11s (536 B/s)<br />Reading package lists... Done<br /></blockquote><br /><br />　または、ここから必要なものを取ってきてdpkg -iします。<br /><a href="http://www.motschke.de/debian/packages/stable/" >http://www.motschke.de/debian/packages/stable/</a><br /><br />kernel/linux-image-3.2.21-scst-2.2.x-amd64_1.1_amd64.deb<br />SCST/scst-modules-3.2.21-scst-2.2.x-amd64_3.2.21-scst-2.2.x-amd64-1.0_amd64.deb<br />SCST/iscsi-scst_2.2-1.1_amd64.deb<br /><br />これらが必要です。<br /><br />　これでapt-get install をすればいいのですが、scstを入れるとscst組み込みカーネルになるので、自分でカスタマイズしてカーネルを作っている人は注意です。まあそんなことをしてる人はわざわざこんなところ見ないと思いますが…。<br /><br /><blockquote>root@ibhack:~# apt-get install iscsi-scst<br />---中略---<br />Setting up scst-modules-3.2.21-scst-2.2.x-amd64 (3.2.21-scst-2.2.x-amd64-1.0) ...<br /></blockquote><br /><br />　すると、ごりごりとinitramfs等のアップデートが行われるので、再起動してscst組み込み済みカーネルになっているか確認します。<br /><br /><blockquote>root@ibhack:~# uname -r<br />3.2.21-scst-2.2.x-amd64</blockquote><br /><br /><h2>SCSTの設定</h2><br />　scst組み込み済みカーネルでマシンが無事に上がってきたら、カーネルに組み込まれたscstドライバをロードします。一応、ファイルがあるか確認します。<br /><blockquote>root@ibhack:~# modinfo scst_vdisk<br />filename:       /lib/modules/3.2.21-scst-2.2.x-amd64/extra/dev_handlers/scst_vdisk.ko<br />version:        2.2.1-pre<br />description:    SCSI disk (type 0) and CDROM (type 5) dev handler for SCST using files on file systems or block devices<br />license:        GPL<br />author:         Vladislav Bolkhovitin &amp; Leonid Stoljar<br />srcversion:     B0EEADC040B8E1E80F57A67<br />depends:        scst,libcrc32c<br />vermagic:       3.2.21-scst-2.2.x-amd64 SMP mod_unload modversions<br />parm:           num_threads:vdisk threads count (int)</blockquote><br /><br />ファイルがあることを確認したらドライバをロードします。<br /><blockquote>root@ibhack:~# modprobe scst<br />root@ibhack:~# modprobe scst_vdisk<br />root@ibhack:~# modprobe ib_srp<br />root@ibhack:~# modprobe ib_srpt</blockquote><br /><br />そうしたらscstadminと言うコマンドを実行するのですが、何故か自分の環境だとSCST.pmがないと言われ実行できませんでした。<br /><br /><blockquote>root@ibhack:~# scstadmin<br />Can&#039;t locate SCST/SCST.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /usr/sbin/scstadmin line 238.<br />BEGIN failed--compilation aborted at /usr/sbin/scstadmin line 238.</blockquote><br /><br />調べてみると、perlのバージョンが5.14なのに対してSCST.pmが入ってるのが5.10のディレクトリになっているのが原因でした。<br /><br /><blockquote>root@ibhack:~# find /usr/ -name &quot;*SCST*&quot;<br />/usr/local/lib/perl/5.10.1/auto/SCST-SCST<br />/usr/local/share/man/man3/SCST::SCST.3pm.gz<br />/usr/local/share/perl/5.10.1/SCST<br />/usr/local/share/perl/5.10.1/SCST/SCST.pm</blockquote><br /><br />　今回はSCST以下があればいいので、ディレクトリにシンボルリンクを張るか、export PERL5LIBをしてライブラリパスを追加します。5.14でも5.10のライブラリは動きました。これでエラーメッセージが出なければOKです。多分。<br /><blockquote>root@ibhack:~# ln -s /usr/local/share/perl/5.10.1/SCST/ /usr/lib/perl/5.14/SCST<br />(または)#export PERL5LIB=/usr/local/share/perl/5.10.1/<br />root@ibhack:~# scstadmin<br /><br />Collecting current configuration: done.<br /><br />No valid operations specified.<br /></blockquote><br /><br /><h2>SCSTadminの初期設定</h2><br />　scstadminを使ってLUNを作っていくわけですが、慣れるまで少々分かりづらいです。今回は、まずramfsでメモリに10Gの領域を確保して、そこに10G分DDをして、fileioなイメージを作ります。<br /><blockquote>root@ibhack:~# mount -t ramfs -o size=10G ramfs /a<br />root@ibhack:~#  dd if=/dev/zero of=/a/10G.img bs=1M count=10000</blockquote><br /><br />次に、SCSTのドライバにib_srptが登録されているか確認します。無ければ、modprobe ib_srptしてください。<br /><br /><blockquote>root@ibhack:~# scstadmin -list_driver<br /><br />Collecting current configuration: done.<br /><br />        Driver<br />        -------<br />        ib_srpt<br /><br />All done.</blockquote><br /><br />次に、scst_vdiskがscstadmからみえているか確認します。無ければ、modprobe scst_vdiskしてください。<br /><br /><blockquote>root@ibhack:~# scstadmin -list_handler<br /><br />Collecting current configuration: done.<br /><br />        Handler<br />        -------------<br />        vdisk_fileio<br />        vdisk_blockio<br />        vdisk_nullio<br />        vcdrom<br /><br />All done.</blockquote><br /><br />ramと言う名前のデバイスを作りfileioでアクセスするようにしています。<br /><br /><blockquote>root@ibhack:/ib# scstadmin -open_dev ram -handler vdisk_fileio -attributes filename=/a/10G.img<br /><br />Collecting current configuration: done.<br /><br /><br />-&gt; Making requested changes.<br />        -&gt; Opening device &#039;ram&#039; using handler &#039;vdisk_fileio&#039;: done.<br />        -&gt; Done.<br /><br />All done.</blockquote><br /><br />デバイスが追加されたか確認します。<br /><br /><blockquote>root@ibhack:/ib# scstadmin -list_devi<br /><br />Collecting current configuration: done.<br /><br />        Handler           Device<br />        ---------------------<br />        vdisk_nullio     -<br />        vdisk_fileio     ram<br />        vdisk_blockio    -<br />        vcdrom           -<br /><br />All done.</blockquote><br /><br />現在あるターゲットポータルを確認します。<br /><br /><blockquote>root@ibhack:/ib# scstadmin -list_targ<br /><br />Collecting current configuration: done.<br /><br />        Driver  Target<br />        ------------------------<br />        ib_srpt ib_srpt_target_0<br /><br />All done.<br /></blockquote><br /><br />このターゲットにibhack_srpという名前のグループを作ります。<br /><br /><blockquote>root@ibhack:/ib# scstadmin -add_group ibhack_srp -driver ib_srpt -target ib_srpt_target_0<br /><br />Collecting current configuration: done.<br /><br /><br />-&gt; Making requested changes.<br />        -&gt; Adding new group &#039;ibhack_srp&#039; to driver/target &#039;ib_srpt/ib_srpt_target_0&#039;: done.<br />        -&gt; Done.<br /><br />All done.<br /></blockquote><br /><br />Lun0にib_srpt_target_0ポータルのibhack_srpグループのramと言うデバイスを関連づけ、readonly=0でマウントします。<br /><br /><blockquote>root@ibhack:/ib# scstadmin -add_lun 0 -driver ib_srpt -target ib_srpt_target_0 -group ibhack_srp -device ram -attributes read_only=0<br /><br />Collecting current configuration: done.<br /><br /><br />-&gt; Making requested changes.<br />        -&gt; Adding device &#039;ram&#039; at LUN 0 to driver/target/group &#039;ib_srpt/ib_srpt_target_0/ibhack_srp&#039;: done.<br />        -&gt; Driver/target is not a fibre channel target, ignoring.<br />        -&gt; Done.<br /><br />All done.</blockquote><br /><br />こうすると、/var/log/systemまたはdmesgにデバイスをアタッチしたよ！と言うメッセージが来ます。(貼り付けたメッセージはdmesg)<br /><br /><blockquote>[17715.372975] dev_vdisk: Registering virtual vdisk_fileio device ram<br />[17715.372999] dev_vdisk: Attached SCSI target virtual disk ram (file=&quot;/a/10G.img&quot;, fs=10000MB, bs=512, nblocks=20480000, cyln=10000)<br />[17715.373053] scst: Attached to virtual device ram (id 2)<br />[18180.879669] scst: Added device ram to group ibhack_srp (LUN 0, rd_only 0)</blockquote><br /><br /><br />Fileioに使うパスなどを間違えていないことを確認したら、ターゲットを有効化します。<br /><br /><blockquote>root@ibhack:/ib# scstadmin -enable_target ib_srpt_target_0 -driver ib_srpt<br /><br />Collecting current configuration: done.<br /><br /><br />-&gt; Making requested changes.<br />        -&gt; Enabling driver/target &#039;ib_srpt/ib_srpt_target_0&#039;: done.<br />        -&gt; Done.<br /><br />All done.</blockquote><br />ここで、tailf (or tail -F)/var/log/systemをした状態でターミナルを開いておき、一旦target側を離れます。<br /><br /><h2>Windows SRP Initiatorの設定</h2><br />　Initiator側として、まずWindows7から接続してみます。OFED For Windowsを<a href="http://www.openfabrics.org/downloads/Windows/v3.1/" >ここ</a>からダウンロードし、インストールするときにSRPパッケージを入れます。<br /><br /><a href=images/SRP_OFED.png class=lb><img src=images/SRP_OFED.png ></a><br><br /><br />　すると、デバイスマネージャにInfiniband SRP miniportというのが追加されます。この段階では！マークがついていますが、これはターゲットにログインできない為についてるものです。！がつく場合は、scstadmin -enable_targetをしていないか、SMが起動していないか、ケーブルが繋がっていないと思われます。原因を特定した後、SRP miniportを無効化して有効にすると再接続しに行きます。<br /><br /><a href=images/SRP_OFED_miniport.png  class=lb><img src=images/SRP_OFED_miniport.png  width=500px></a><br><br /><br />　SRP miniportを入れたら、SCSTに戻ります。<br /><br /><h2>SCSTに接続するイニシエーターの追加</h2><br /><br />　SCSTに戻ったら、Miniportドライバを有効にしたタイミングでtailfしているターミナルに何かが流れると思います。よく分からなかったら、Windows側に戻りSRP　Miniportドライバを無効にしたり有効にしたりしてみてください。すると、以下のようになります。<br /><blockquote>Dec 10 14:57:45 ibhack kernel: [28606.571026] ib_srpt: Received SRP_LOGIN_REQ with i_port_id 0x5ad00000bf4d4:0x5ad00000bf3d0, t_port_id 0x5ad00000bf4d4:0x5ad00000bf4d4 and it_iu_len 4148 on port 1 (guid=0xfe80000000000000:0x5ad00000bf4d5)<br />Dec 10 14:57:45 ibhack kernel: [28606.571898] scst: Using security group &quot;ib_srpt_target_0&quot; for initiator &quot;0x0005ad00000bf4d40005ad00000bf3d0&quot; (target ib_srpt_target_0)<br />Dec 10 14:57:45 ibhack kernel: [28606.572222] ib_srpt: Received IB MRA event</blockquote><br /><br />この、真ん中にある<br /><blockquote>initiator &quot;0x0005ad00000bf4d40005ad00000bf3d0”</blockquote><br /><br />と言うのが、接続しようとしているイニシエーターIDです。これをコピーします。<br /><br />　接続するイニシエーターIDが分かったら、add_initでそれをscstに追加します。<br /><blockquote>root@ibhack:/ib# scstadmin -add_init  0x0005ad00000bf4d40005ad00000bf3d0 -driver ib_srpt -target ib_srpt_targe<br />t_0 -group ibhack_srp<br /><br />Collecting current configuration: done.<br /><br /><br />-&gt; Making requested changes.<br />        -&gt; Adding new initiator &#039;0x0005ad00000bf4d40005ad00000bf3d0&#039; to driver/target/group &#039;ib_srpt/ib_srpt_target_0/ibhack_srp&#039;: done.<br />        -&gt; Driver/target is not a fibre channel target, ignoring.<br />        -&gt; Done.<br /><br />All done.<br /></blockquote><br /><br />正しいInitIDが追加できると、dmesg(or /var/log/system)にこのように出ます。<br /><br /><blockquote>[28683.068321] scst: Added name 0x0005ad00000bf4d40005ad00000bf3d0 to group ibhack_srp<br />[28683.068505] scst: Processing thread ram0_0 (PID 3790) started<br />[28683.068715] scst: Processing thread ram0_1 (PID 3791) started<br />[28683.068895] scst: Processing thread ram0_2 (PID 3792) started<br />[28683.069015] scst: Processing thread ram0_3 (PID 3793) started<br />[28683.069141] scst: Processing thread ram0_4 (PID 3794) started<br />[28683.069266] scst: Processing thread ram0_5 (PID 3795) started<br />[28683.069371] scst: Processing thread ram0_6 (PID 3796) started<br />[28683.069480] scst: Processing thread ram0_7 (PID 3797) started<br />root@ibhack:/ib#</blockquote><br />　<br />　正しくスレッドが走ったら、再びWindows側に戻ります。<br /><br /><h2>Windowsでディスクの再スキャン</h2><br />　マシンそのものを再起動しても良いですが、コンピューターの管理からディスクの管理→ディスクの再スキャン　をすることにより、追加したディスクがみえるようになるはずです。あとはいつも通りのディスクとして扱えるので、煮るなり焼くなりご自由に。<br /><br /><a href=images/WinOFED_SRP.PNG class=lb><img src=images/WinOFED_SRP.PNG width=500px></a><br><br /><br /><h2>パフォーマンスについて</h2><br />　とりあえず主要ベンチを走らせてみたところ、DDRなInfinihost IIIという古い構成であっても、10Gbit近く出ました。iSCSIでは4-5Gb/sでネックになっていたのに比べ、2倍近く速くなりました。CPU使用率はシーケンシャル読みをしたときの負荷です。<br /><br /><a href=images/WinOFED_SRP_perf.PNG class=lb><img src=images/WinOFED_SRP_perf.PNG width=500px></a><br><br /><br />ちなみに、ib_write_bwをscstサーバ側で立ち上げ、Windows側から接続したときのパフォーマンスは最大1500MB/s程度出ていたので、あと2Gb/s程度の余地はありそうです。<br /><blockquote>------------------------------------------------------------------<br />                    RDMA_Write BW Test<br />Number of qp&#039;s running 1<br />Connection type : RC<br />Each Qp will post up to 100 messages each time<br />Inline data is used up to 400 bytes message<br />  local address:  LID 0x01, QPN 0x100407, PSN 0x777cc6 RKey 0xe4002a00 VAddr 0x007fe0519e7000<br />  remote address: LID 0x02, QPN 0xd0407, PSN 0xa9d4db, RKey 0x4e002700 VAddr 0x007fcda6d13000<br />Mtu : 2048<br />------------------------------------------------------------------<br /> #bytes #iterations    BW peak[MB/sec]    BW average[MB/sec]<br />      2        5000               2.21                  2.21<br />      4        5000               4.51                  4.50<br />      8        5000               9.01                  8.98<br />     16        5000              17.62                 17.58<br />     32        5000              35.05                 35.03<br />     64        5000              69.48                 68.30<br />    128        5000             133.97                133.95<br />    256        5000             206.10                205.86<br />    512        5000             576.27                573.69<br />   1024        5000            1035.02               1034.46<br />   2048        5000            1207.47               1206.42<br />   4096        5000            1336.65               1336.36<br />   8192        5000            1407.50               1407.48<br />  16384        5000            1453.84               1453.76<br />  32768        5000            1482.45               1482.44<br />  65536        5000            1495.00               1494.99<br /> 131072        5000            1501.55               1501.51　　　//MAX値<br /> 262144        5000            1471.14               1471.13<br /> 524288        5000            1468.67               1468.55<br />1048576        5000            1469.21               1468.62<br />2097152        5000            1468.69               1468.66<br />4194304        5000            1471.43               1471.43<br />8388608        5000            1471.54               1471.53<br />------------------------------------------------------------------<br /></blockquote><br /><br /><h2>LinuxでSRPに接続する</h2><br />　そろそろ文字の羅列に(主に自分が)疲れてきたところですが、まだ続きます。2回に分けるべきだったかもしれませんがそれほどの内容でもないのでまとめてしまいます。<br /><br />　LinuxでSRPイニシエーターを使うには、OFEDスタックを入れるか、srptoolsをDLしてきます。イニシエーター側は特にカーネルを作り直す必要はありません。<br /><a href="http://www.openfabrics.org/downloads/srptools/" >http://www.openfabrics.org/downloads/srptools/</a><br />　多分、Debianならいつも通りconfigure --prefix=/usr/ --mandir=/usr/share/man/manでcheckinstall -Dで通ると思います。よく覚えてないです。<br /><br />　どうにかしてsrptoolsが入ったら、 srp_daemonを実行します。なお、srp_daemonを実行するにはib_umadドライバがロードされている必要があります。また、SRPを使うのでib_srpもロードする必要があります。<br />　一度Windowsから接続できている状態であれば、srp_daemon -a -oしたときに何かしらの文字が帰ってくると思います。srp_daemonの詳しい引数は<a href="http://linux.die.net/man/1/srp_daemon" >ここ</a>やman srp_daemonでみれますが、-a -oは全てのターゲットを一回だけスキャンする、と言う引数です。<br /><blockquote>root@ib0:~# modprobe ib_umad<br />root@ib0:~# modprobe ib_srp<br />root@ib0:~# srp_daemon -a -o<br />10/11/12 19:39:51 : Class Port Info set returned status 0x000c<br />10/11/12 19:39:51 : Warning: set of ClassPortInfo failed<br />IO Unit Info:<br />    port LID:        0001<br />    port GID:        fe800000000000000005ad00000bf4d5<br />    change ID:       0001<br />    max controllers: 0x10<br /><br />    controller[  1]<br />        GUID:      0005ad00000bf4d4<br />        vendor ID: 000005<br />        device ID: 006274<br />        IO class : 0100<br />        ID:        SCST SRP target<br />        service entries: 1<br />            service[  0]: 0005ad00000bf4d4 / SRP.T10:0005ad00000bf4d4</blockquote><br /><br />　何も帰ってこない場合はターゲットが動いていないので、ターゲット側でtailf /var/log/systemして、***WARNING***等の文字列をみて、それっぽいエラーを見つけてください。だんだん適当になってきてるのは多分気のせいです。<br />　上のような文字が帰ってきたら、/sys/class/infiniband_srp/srp-&lt;device&gt;-&lt;port&gt;/add_target file に書き込みます。今回はmthca0のポート1がイニシエーターに使うポートなので、そこにリダイレクトします。<br /><br /><blockquote>root@ib0:~# srp_daemon -c -o &gt; /sys/class/infiniband_srp/srp-mthca0-1/add_target<br />10/11/12 19:39:24 : Class Port Info set returned status 0x000c<br />10/11/12 19:39:24 : Warning: set of ClassPortInfo failed</blockquote><br />　このコマンドを発行したタイミングで、イニシエーターがSCSTターゲットに接続するので、Windowsの時と同じ要領でdmesgかtailf /var/log/messageしてイニシエーターIDを調べます。<br /><blockquote>Dec 10 19:39:27 ibhack kernel: [ 4609.618429] ib_srpt: Received SRP_LOGIN_REQ with i_port_id 0x0:0x5ad00000bf3d0, t_port_id 0x5ad00000bf4d4:0x5ad00000bf4d4 and it_iu_len 260 on port 1 (guid=0xfe80000000000000:0x5ad00000bf4d5)<br />Dec 10 19:39:27 ibhack kernel: [ 4609.619471] scst: Using security group &quot;ib_srpt_target_0&quot; for initiator  これ→&quot;0x00000000000000000005ad00000bf3d0&quot; (target ib_srpt_target_0)<br /></blockquote><br /><br />イニシエーターIDが判明したら、ターゲット側でadd_initで追加します。<br /><blockquote>root@ibhack:~# scstadmin -add_init 0x00000000000000000005ad00000bf3d0 -driver ib_srpt -target ib_srpt_target_0 -group ibhack_srp<br /><br />Collecting current configuration: done.<br /><br /><br />-&gt; Making requested changes.<br />        -&gt; Adding new initiator &#039;0x00000000000000000005ad00000bf3d0&#039; to driver/target/group &#039;ib_srpt/ib_srpt_target_0/ibhack_srp&#039;: done.<br />        -&gt; Driver/target is not a fibre channel target, ignoring.<br />        -&gt; Done.<br /><br />All done.</blockquote><br /><br />Initiatorを追加したら、一度ib_srpをアンロードし、もう一度ロードし、またSRP接続します。<br /><blockquote>root@ib0:~# rmmod ib_srp<br />root@ib0:~# modprobe ib_srp<br />root@ib0:~# srp_daemon -c -o &gt; /sys/class/infiniband_srp/srp-mthca0-1/add_target</blockquote><br /><br />イニシエーター側でdmesg等をして接続できたか確認します。<br /><br /><blockquote>Dec 10 20:05:10 ib0 kernel: [ 3054.245465] scsi9 : SRP.T10:0005AD00000BF4D4<br />Dec 10 20:05:10 ib0 kernel: [ 3054.245936] scsi 9:0:0:0: Direct-Access     SCST_BIO ram               220 PQ: 0 ANSI: 5<br />Dec 10 20:05:10 ib0 kernel: [ 3054.246132] sd 9:0:0:0: Attached scsi generic sg1 type 0<br />Dec 10 20:05:10 ib0 kernel: [ 3054.246262] sd 9:0:0:0: [sdb] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)<br />Dec 10 20:05:10 ib0 kernel: [ 3054.246267] sd 9:0:0:0: [sdb] 4096-byte physical blocks<br />Dec 10 20:05:10 ib0 kernel: [ 3054.246783] sd 9:0:0:0: [sdb] Write Protect is off<br />Dec 10 20:05:10 ib0 kernel: [ 3054.247088] sd 9:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn&#039;t support DPO or FUA<br />Dec 10 20:05:10 ib0 kernel: [ 3054.248428]  sdb: unknown partition table<br />Dec 10 20:05:10 ib0 kernel: [ 3054.249145] sd 9:0:0:0: [sdb] Attached SCSI disk</blockquote><br /><br />これで無事にブロックデバイスとして見れました。簡単なベンチです。<br />シーケンシャル読み込み<br /><blockquote>root@ib0:~# dd if=/dev/sdb of=/dev/null bs=1M<br />10240+0 records in<br />10240+0 records out<br />10737418240 bytes (11 GB) copied, 9.41218 s, 1.1 GB/s</blockquote><br /><br />シーケンシャル書き<br /><blockquote>root@ib0:~# dd of=/dev/sdb if=/dev/zero bs=1M<br />dd: writing `/dev/sdb&#039;: No space left on device<br />10241+0 records in<br />10240+0 records out<br />10737418240 bytes (11 GB) copied, 9.24043 s, 1.2 GB/s</blockquote><br /><br />　大体Windows7と同じ値が出ました。bonnie+＋とかFIOとかしんどいので今度します。<br /><br /><h2>SCSTの設定の保存とサービス登録</h2><br />　驚いたことにまだ続きます。今回はramfsで構築してしまったので再起動したらどのみち消えてしまうのですが、その設定で問題なければ設定を保存します。保存せず再起動するとtargetの設定は消えます。(ネットワーク機器を設定したあとwrite memoryを忘れてやってしまうあれのように<br /><br /><blockquote>scstadmin -write_config /etc/scst.conf</blockquote><br /><br />また、デフォルトではscstサービスは起動時に立ち上がらないので、起動時にscstが立ち上がるようにします。(もしかしたら最初から立ち上がってたかも？要再検証<br /><br /><blockquote>update-rc.d scst defaults</blockquote><br /><br /><br />次回起動時にscstのドライバにib_srptも使うように/etc/default/scstを編集します。 <br /><br /><blockquote>SCST_TARGET_MODULES=&quot;scst_local iscsi_scst ib_srpt&quot;</blockquote><br />ここのコメントアウトを外し、有効化します。<br /><br /><h3>Debian/squeeze以降での/dev/ramについて</h3><br /><a href="http://d.hatena.ne.jp/n314/20100324/1269429930" >http://d.hatena.ne.jp/n314/20100324/1269429930</a><br />こちらに書いてあるように、brdモジュールをロードすると/dev/ramが作れます。/etc/modulesに<br /><blockquote>brd rd_nr=1 rd_size=10485760</blockquote><br />と書いて、<br /><blockquote>scstadmin -open_dev ram -handler vdisk_blockio -attributes filename=/dev/ram0</blockquote><br />とscstadminをしておけば、再起動の度にramfsを作ってddして…としなくてすみます。毎度メモリを10G持っていかれますが。まあ、困ったときにはrmmod brdすればデータ丸ごと破棄してメモリが解放されます。<br /><br /><h3>LIOについて</h3><br />今回、SCSTの対比としてLIOもやってみようかと思ったのですが、対応ハードウェアがConnect X2以降と書いてあり、対応ハードウェアを持っていない為試していません。<br /><blockquote> following Mellanox InfiniBand HCAs are supported:<br /><br />    Mellanox ConnectX-2 VPI PCIe Gen2 HCAs (x8 lanes), single/dual-port QDR 40 Gb/s<br />    Mellanox ConnectX-3 VPI PCIe Gen3 HCAs (x8 lanes), single/dual-port FDR 56 Gb/s<br />    Mellanox ConnectX-IB PCIe Gen3 HCAs (x16 lanes), single/dual-port FDR 56 Gb/s <br /><br />The InfiniBand/SRP fabric module (srpt.ko, Linux kernel driver database) for the Unified Target was released with Linux kernel 3.3 on March 18, 2012.[1] </blockquote><br /><br /><a href="http://www.linux-iscsi.org/wiki/SRP#Hardware_support" >http://www.linux-iscsi.org/wiki/SRP#Hardware_support</a><br /><br /><h3>個人用メモ</h3><br /><blockquote>modprobe brd rd_nr=1 rd_size=10485760<br />modprobe ib_srpt<br />modprobe scst<br />modprobe scst_vdisk<br />scstadmin -open_dev ram -handler vdisk_blockio -attributes filename=/dev/ram0<br />scstadmin -add_group ibhack_srp -driver ib_srpt -target ib_srpt_target_0<br />scstadmin -add_lun 0 -driver ib_srpt -target ib_srpt_target_0 -group ibhack_srp -device ram -attributes read_only=0<br />scstadmin -enable_target ib_srpt_target_0 -driver ib_srpt<br />scstadmin -add_init　(InitiatorID) -driver ib_srpt -target ib_srpt_target_0 -group ibhack_srp<br />scstadmin -write_config /etc/scst.conf<br /></blockquote><br /><br /><h2>所感</h2><br />　やはり、RDMAは速いです。最初は何をすればいいか全く分かりませんでしたが、何をすれば良いのかが分かれば大して難しくないです。しかし、scstを入れるのが若干めんどくさいというかmake&amp;&amp;make installで済んでくれないかなと思います。<br />　何だかんだでまとめるのに1日かかってしまいました…文の推敲は後日します。<br /><br /><h2>参考</h2><br />素晴らしいHowto（というか、ほぼここの和訳に近いという<br /><a href="http://davidhunt.ie/wp/?p=2291" >http://davidhunt.ie/wp/?p=2291</a>]]></description>
	</item>
	<item rdf:about="http://xmms.jp/blog/index.php?entry=entry121202-085945">
		<title>【HW】DDR InfinibandHCAにおけるIPoIBのパフォーマンス</title>
		<link>http://xmms.jp/blog/index.php?entry=entry121202-085945</link>
		<description><![CDATA[　<a href="comments.php?y=12&amp;m=11&amp;entry=entry121129-050826" >前回</a>にIPoIBが通るようになったので色々テストしてみました。機材は前回のままです。<br /><br />IP<br /> ibhack 10.1.1.1/24<br /> ib1 10.1.1.2/24<br /><br /><h2>iscsitarget+open-iscsiによるパフォーマンス</h2><br />　まあ、もう試した方が居るので今更ではあるのですが一応試してみました。ものすごく参考になるので必読です。自分も動かねえなぁと言うときに参考にさせて頂きました。<br /><a href="http://www.slideshare.net/tyamadajp/infiniband-on-debian#btnNext" >http://www.slideshare.net/tyamadajp/inf ... an#btnNext</a><br /><br /><h3>ターゲットの用意</h3><br />　まず、ramfsでディレクトリを作ります。<br /><blockquote>root@ibhack:~#mkdir /a<br />root@ibhack:~#mount -t ramfs -o size=10G ramfs /a<br /></blockquote><br /><br />　次に、iscsitargetを入れます。<br /><blockquote>root@ibhack:~#apt-get install iscsitarget iscsitarget-dkms</blockquote><br /><br />インストールが終わったら/etc/iet/iet.confを編集します<br /><blockquote>root@ibhack:~# vi /etc/iet/ietd.conf<br /><br />Target test:test<br /> Lun 0 Path=/a/10G.img,Type=fileio,ScsiId=xyz,ScsiSN=xyz<br /></blockquote><br /><br />最後に、/etc/default/iscsitargetの1行目を編集し、サービスを立ち上げます。<br /><blockquote>root@ibhack:~# vi /etc/default/iscsitarget<br /><br />ISCSITARGET_ENABLE=true<br /><br />root@ibhack:~/ib# service iscsitarget start<br />[ ok ] Starting iSCSI enterprise target service:.<br />. ok<br /></blockquote><br /><h3>イニシエーターの用意</h3><br />　ターゲットが用意できたら、それに接続するイニシエーターの設定をします。<br /><blockquote>root@ib1:~# apt-get install open-iscsi<br />---略---<br />root@ib1:~# iscsi_discovery 10.1.1.1<br />iscsiadm: No active sessions.<br />Set target test:test to automatic login over tcp to portal 10.1.1.1:3260<br />Logging out of session [sid: 1, target: test:test, portal: 10.1.1.1,3260]<br />Logout of [sid: 1, target: test:test, portal: 10.1.1.1,3260] successful.<br />Set target test:test to automatic login over tcp to portal 192.168.1.201:3260//←管理用IP<br />Logging out of session [sid: 2, target: test:test, portal: 192.168.1.201,3260]<br />Logout of [sid: 2, target: test:test, portal: 192.168.1.201,3260] successful.<br />discovered 2 targets at 10.1.1.1<br /><br />root@ib1:~# iscsiadm -m node -l -p 10.1.1.1<br />Logging in to [iface: default, target: test:test, portal: 10.1.1.1,3260] (multiple)<br />Login to [iface: default, target: test:test, portal: 10.1.1.1,3260] successful.<br />root@ib1:~# iscsiadm -m node -l -p 10.1.1.1 -T test:test<br /></blockquote><br />　ターゲットが適当な設定なので、IBのインターフェース以外に管理用インターフェースでもリッスンしていますが、今は気にしないことにしましょう。<br /><br /><h3>ddでのテスト</h3><br />　みんな大好きddでのシーケンシャルアクセステストです。<br /><br />　読み込み<br /><blockquote>root@ib1:~# dd if=/dev/sdb of=/dev/null bs=1M<br />10000+0 records in<br />10000+0 records out<br />10485760000 bytes (10 GB) copied, 30.9927 s, 338 MB/s]</blockquote><br /><br />書き込み<br /><blockquote>root@ib1:~# dd of=/dev/sdb if=/dev/zero bs=1M count=10000<br />10000+0 records in<br />10000+0 records out<br />10485760000 bytes (10 GB) copied, 23.3797 s, 448 MB/s<br /></blockquote><br /><br />　やはり先人のテストの結果の通り、4Gb/sで頭打ちになりました。ConnectModeにしてMTUをあげても変わりませんでした。<br /><br /><h2>Windowsでのパフォーマンス</h2><br />　まず、<a href="http://www.openfabrics.org/downloads/Windows/v3.1/" >ここから</a>OFED For Windowsを入れ、Connected modeを有効にします。<br /><br /><a href=images/win_ofed_cm.PNG class=lb><img src=images/win_ofed_cm.PNG ></a><br><br /><br />　そして、MS iSCSI initiatorからLinux iscsiTargetに接続をします。そしてNTFSでフォーマットをして、それからCrystalDiskで計測しました。<br /><a href=images/iet_infiniband_win.PNG class=lb><img src=images/iet_infiniband_win.PNG width=500px></a><br><br />　同じ条件でも、Open-iscsiよりは良い結果が出ました。open-iscsiイニシエータの性能があまりよくない？<br /><br />　もう一つの試験として、試しに両方ともWindows7に切り替え<a href="http://www.ltr-data.se/opencode.html/#ImDisk" >Im Disk</a>でRAMFSを作り、そこを共有フォルダとしてCIFSのテストもしてみたのですが、何気にConnected modeを有効にしただけでそこそこな速度が出ました。window-&gt;Linux Samba3serverもやってみたのですがここまでの値は出ませんでした。適当にやってしまったのでログが残っていないのですが、大体4-500MB/sでした。<br /><a href=images/ib_cifs_ramfs.PNG class=lb><img src=images/ib_cifs_ramfs.PNG ></a><br><br /><br /><br /><h2>まとめ</h2><br />　IBをIBoIPで使うのは、元のIBの帯域を発揮することは出来ませんが、それでもDDRクラスであれば1GbEtherを何本も束ねるよりは速いことが多かったです。場合によっては10Gbに迫る勢いです。<br />　中々いい感じなのですが、現在の問題点としては<br /><br />・スイッチが高い<br />・ケーブルが高い<br />・HCAもそこまで大量にあるわけではない<br />・かなりカーネルでドライバを持っているので殆どそのまま使える物の、Plug and playとまでは行かない<br />・Linuxで使う場合、RH系以外は結構めんどくさい<br />・古いHCAだとESXiやWin2012svr等でドライバを切られてしまって使えない<br /><br />　といったところを感じました。で、IBどうよ？と言われたら、「とりあえず2本くらいかって様子見てみると良いよ」と答えるでしょう。個人的には、これでSAN等のファブリックを固めるのもアリだと思います。<br /><br />　次回はSRPなどについてまとめたいと思います。]]></description>
	</item>
	<item rdf:about="http://xmms.jp/blog/index.php?entry=entry121129-050826">
		<title>【NW】DebianでInfiniband　前編(IBoIPが通るまで)</title>
		<link>http://xmms.jp/blog/index.php?entry=entry121129-050826</link>
		<description><![CDATA[　自宅ラック勉強会5.1にでてから、「なんかがんばればIB動きそう」と思ったので評価用として導入してみました。<br />今回導入したのは、ヤフオクで安かったDDR（20Gb)のシングルポートのCisco　SFS-HCA-320-A1で、InfinihostIII　Lxを搭載したカードです。<br /><br />lshwの結果です。<br /><blockquote>description: InfiniBand<br />product: MT25204 [InfiniHost III Lx HCA]<br />vendor: Mellanox Technologies<br />physical id: 0<br />bus info: pci@0000:02:00.0<br />version: 20<br />width: 64 bits<br />clock: 33MHz<br />capabilities: pm vpd msi msix pciexpress bus_master cap_list<br />configuration: driver=ib_mthca latency=0<br />resources: irq:16 memory:f3e00000-f3efffff memory:f2800000-f2ffffff<br /></blockquote><br />　以前ハンズオンで見たときに、みんな大好きIntel Pro100(/S)だと思ってひょいと持ち上げたらIB HCAだったことがありましたが…改めてみてみるとやっぱり似ています。多分。<br /><br /><a href=images/IMG_0132_R2.JPG class=lb><img src=images/IMG_0132_R2.JPG width=500px></a><br><br /><br />　このHCAで、とりあえずDebian/wheezyでIPが通るようになるまで色々してみました。<br /><br /><br /><h2>PC構成</h2><br /><br /><a href=images/IMG_0135_R2.JPG class=lb><img src=images/IMG_0135_R2.JPG width=500px></a><br><br /><br />ibhack(OpenSMホスト)<br /><blockquote>　MB:Asus RampageGenieII<br />　CPU:Xeon E5620@3GHz<br />　Mem:6 x 4GB@1333MHz<br />　HCA@一番上のPCI-ex 2.0 x16レーン<br /></blockquote><br /><br /><a href=images/IMG_0133_R2.JPG class=lb><img src=images/IMG_0133_R2.JPG width=500px></a><br><br /><br />ib1(クライアント)<br /><blockquote>　MB:DFI LANPARTY UT X58 T3eH8<br />　CPU:Xeon Corei7 920@3.2GHz<br />　Mem:6 x 2GB@1333MHz<br />　HCA@一番上のPCI-ex 2.0 x16レーン<br /></blockquote><br /><br />これらのPCにそれぞれDebian/Squeezeを入れ、/etc/apt/souces.listをsqueezeからtestingに変え、dist-upgradeしました。<br /><br /><blockquote>root@ibhack:~/ib# uname -a<br />Linux ibhack 3.2.0-4-amd64 #1 SMP Debian 3.2.32-1 x86_64 GNU/Linux<br /></blockquote><br /><br /><h2>ただ動かすだけならapt-getで入る</h2><br />必要なものは既にレポジトリにあるので、apt-get install opensmで入ります。が、パッケージのバージョンが2009年付けと少し古いので自分でコンパイルしました。<br /><br /><h2>コンパイル済みdebパッケージ</h2><br /><br />　長いので作るのが面倒な人向けに先においておきます。dpkg -i *.debすれば多分入ると思います。<br /><br /><a href=data/oepnsm-3.5-for-debian_Wheezy-2012-11-29-testing.tgz>oepnsm-3.5-for-debian/Wheezy-2012-11-29-testing.tgz</a><br /><br />内容<br /><blockquote>drwxr-xr-x 3 root root    4096 Nov 29 01:14 etc/<br />-rw-r--r-- 1 root root 8509032 Nov 29 01:10 ibutils_1.5-1_amd64.deb<br />-rw-r--r-- 1 root root  598370 Nov 29 01:10 infiniband-diags_1.6.1-1_amd64.deb<br />-rw-r--r-- 1 root root   35912 Nov 29 01:10 libibcommon_1.2.0-1_amd64.deb<br />-rw-r--r-- 1 root root  272960 Nov 29 01:10 libibmad_1.3.9-1_amd64.deb<br />-rw-r--r-- 1 root root   85520 Nov 29 01:10 libibumad_1.3.8-1_amd64.deb<br />-rw-r--r-- 1 root root 1136658 Nov 29 01:10 opensm_3.3.15-1_amd64.deb<br /></blockquote><br /><br /><h2>OFEDスタックを動かしたかった</h2><br />　既知の事実ですがOFEDの中に含まれるinstall.plは動かないので、SRPMディレクトリの中からrpm2cpioで分解してソースを取り出してmakeしていたりしたのですが、そんなことをしなくてもここに最低限必要な物はありました。ここからいろいろ持ってきます。<br /><a href="http://www.openfabrics.org/downloads/management/" >http://www.openfabrics.org/downloads/management/</a><br /><br /><h2>パッケージのダウンロード</h2><br />ここにある<br />libibumad<br />libibmad<br />libibcommon<br />opensm<br />infiniband-diags<br />をまずDLします。<br /><blockquote>wget <a href="http://www.openfabrics.org/downloads/management/libibumad-1.3.8.tar.gz" >http://www.openfabrics.org/downloads/ma ... 3.8.tar.gz</a> <a href="http://www.openfabrics.org/downloads/management/libibmad-1.3.9.tar.gz" >http://www.openfabrics.org/downloads/ma ... 3.9.tar.gz</a> <a href="http://www.openfabrics.org/downloads/management/libibcommon-1.2.0.tar.gz" >http://www.openfabrics.org/downloads/ma ... 2.0.tar.gz</a> <a href="http://www.openfabrics.org/downloads/management/infiniband-diags-1.6.1.tar.gz" >http://www.openfabrics.org/downloads/ma ... 6.1.tar.gz</a> <a href="http://www.openfabrics.org/downloads/management/opensm-3.3.15.tar.gz" >http://www.openfabrics.org/downloads/ma ... .15.tar.gz</a><br /></blockquote><br /><br /><h2>Make&amp;&amp;checkinstall -D</h2><br />　まず、ビルドに必要になる物を入れます。<br /><blockquote>apt-get install checkinstall flex btyacc build-essential</blockquote><br /><br />　手順としては<br /><br />libibumad→libibmad→libibcommon→infiniband-diags→opensm→infiniband-diags<br /><br />　の順でmakeしていくだけです。ただし、./configure &amp;&amp;make&amp;&amp;make installすると、必要なライブラリが/usr/local/libにインストールされるのですが、<br />DebianとRH系ではusr/binとusr/libの位置が違うので、./configure --prefix=/usrしてインストールするパッケージの位置を変えないと色々困ります。debianでは/usr/local/libにパスが通っていないので、そのまま実行しても<br /><br /><blockquote>root@ibhack:~/ib/opensm-3.3.15# opensm<br />opensm: error while loading shared libraries: libosmvendor.so.3: cannot open shared object file: No such file or directory<br /></blockquote><br /><br />　と言われます。そのまま<br /><blockquote>./configure&amp;&amp;make&amp;&amp;make install<br /></blockquote><br />でインストールして<br /><blockquote>export &#039;LD_LIBRARY_PATH=/usr/local/lib&#039;<br /></blockquote><br />とか、makeするまえに<br /><blockquote>ln -s /usr/ /usr/local<br /></blockquote><br />　とかしても動きますが、おすすめはしません。また、パッケージ管理が出来なくなるのでcheckinstall -Dでdebパッケージを作るべきかと思います…。<br /><br />Configure例：<br /><blockquote>root@ibhack:~/ib/libibumad-1.3.8# ./configure --prefix=/usr<br />checking for a BSD-compatible install... /usr/bin/install -c<br />checking whether build environment is sane... yes<br />ｰｰｰ中略ｰｰｰ<br />config.status: executing libtool commands<br /><br />root@ibhack:~/ib/libibumad-1.3.8# make<br />make  all-recursive<br />make[1]: Entering directory `/root/ib/libibumad-1.3.8&#039;<br />ｰｰｰ中略ｰｰｰ<br />make[1]: Leaving directory `/root/ib/libibumad-1.3.8&#039;<br /><br />root@ibhack:~/ib/libibumad-1.3.8# checkinstall -D<br /><br />checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran<br />           This software is released under the GNU GPL.<br /><br /><br /><br />*****************************************<br />**** Debian package creation selected ***<br />*****************************************<br /><br />This package will be built according to these values:<br /><br />0 -  Maintainer: [ root@ibhack ]<br />1 -  Summary: [ Package created with checkinstall 1.6.2 ]<br />2 -  Name:    [ libibumad ]<br />3 -  Version: [ 1.3.8 ]<br />4 -  Release: [ 1 ]<br />5 -  License: [ GPL ]<br />6 -  Group:   [ checkinstall ]<br />7 -  Architecture: [ amd64 ]<br />8 -  Source location: [ libibumad-1.3.8 ]<br />9 -  Alternate source location: [  ]<br />10 - Requires: [  ]<br />11 - Provides: [ libibumad ]<br />12 - Conflicts: [  ]<br />13 - Replaces: [  ]<br /><br />Enter a number to change any of them or press ENTER to continue:[空エンター]<br /><br />Installing with make install...<br /><br />========================= Installation results ===========================<br />Making install in .<br />make[1]: Entering directory `/root/ib/libibumad-1.3.8&#039;<br />make[2]: Entering directory `/root/ib/libibumad-1.3.8&#039;<br />test -z &quot;/usr/lib&quot; || /bin/mkdir -p &quot;/usr/lib&quot;<br /> /bin/bash ./libtool   --mode=install /usr/bin/install -c   libibumad.la &#039;/usr/lib&#039;<br />libtool: install: /usr/bin/install -c .libs/libibumad.so.3.0.3 /usr/lib/libibumad.so.3.0.3<br />libtool: install: (cd /usr/lib &amp;&amp; { ln -s -f libibumad.so.3.0.3 libibumad.so.3 || { rm -f libibumad.so.3 &amp;&amp; ln -s libibumad.so.3.0.3 libibumad.so.3; }; })<br />libtool: install: (cd /usr/lib &amp;&amp; { ln -s -f libibumad.so.3.0.3 libibumad.so || { rm -f libibumad.so &amp;&amp; ln -s libibumad.so.3.0.3 libibumad.so; }; })<br />libtool: install: /usr/bin/install -c .libs/libibumad.lai /usr/lib/libibumad.la<br />libtool: install: /usr/bin/install -c .libs/libibumad.a /usr/lib/libibumad.a<br />libtool: install: chmod 644 /usr/lib/libibumad.a<br />libtool: install: ranlib /usr/lib/libibumad.a<br />libtool: finish: PATH=&quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sbin&quot; ldconfig -n /usr/lib<br />----------------------------------------------------------------------<br />Libraries have been installed in:<br />   /usr/lib<br /><br />If you ever happen to want to link against installed libraries<br />in a given directory, LIBDIR, you must either use libtool, and<br />specify the full pathname of the library, or use the `-LLIBDIR&#039;<br />flag during linking and do at least one of the following:<br />   - add LIBDIR to the `LD_LIBRARY_PATH&#039; environment variable<br />     during execution<br />   - add LIBDIR to the `LD_RUN_PATH&#039; environment variable<br />     during linking<br />   - use the `-Wl,-rpath -Wl,LIBDIR&#039; linker flag<br />   - have your system administrator add LIBDIR to `/etc/ld.so.conf&#039;<br /><br />See any operating system documentation about shared libraries for<br />more information, such as the ld(1) and ld.so(8) manual pages.<br />----------------------------------------------------------------------<br /><br /> ---中略---<br /><br />Deleting temp dir...OK<br /><br /><br />**********************************************************************<br /><br /> Done. The new package has been installed and saved to<br /><br /> /root/ib/libibumad-1.3.8/libibumad_1.3.8-1_amd64.deb<br /><br /> You can remove it from your system anytime using:<br /><br />      dpkg -r libibumad<br /><br />**********************************************************************<br />---<br /></blockquote><br /><br />これをそれぞれのディレクトリで繰り返すだけです。<br /><br /><h3>ibutilsのビルドのみ若干面倒</h3><br /><br />ibutilsをビルドするときにそのままやっても、<br /><blockquote>root@ibhack:~/ib/ibutils-1.5# ./configure --prefix=/usr<br />---中略---<br />checking Tcl configuration on what Tcl needs to compile... ./configure: line 20003: /usr/share/tcltk/tcl8.5/tclConfig.sh: No such file or directory<br />configure: error: /bin/bash &#039;./configure&#039; failed for ibis<br /></blockquote><br />と言われ失敗しました。これがどこにあるか探してみると<br /><blockquote>root@ibhack:~/ib/ibutils-1.5# find /usr/ -name &quot;tcl*&quot;<br />/usr/lib/tcl8.5<br />/usr/lib/tcl8.5/tclConfig.sh<br /></blockquote><br />と言われたので、<br /><blockquote>root@ibhack:~/ib/ibutils-1.5# ln -s /usr/lib/tcl8.5/tclConfig.sh /usr/share/tcltk/tcl8.5/<br /></blockquote><br />して追加してしまいました。なんか違う気がしますが。また、manを入れるdirも違うので<br /><blockquote>./configure --prefix=/usr --mandir=/usr/share/man/<br /></blockquote><br />としないといけませんでした。<br /><br /><h2>init.dの作成</h2><br />はめんどくさかったのでapt-get installで入るopensmの物を持ってきました(これはひどい<br />とりあえず動きます。<br /><br /><h2>SMを起動する</h2><br />　まずデバイスドライバをロードします。古いHCAでは既にドライバを持っているので、起動時にドライバがロードされていると思います。多分ib_coreドライバなどもロードされていると思いますが、なければロードします。そうしたら、ib_umadをロードします<br /><blockquote>modprobe ib_umad<br /></blockquote><br />その後にopensmを実行するとこうなります。<br /><br /><blockquote>-------------------------------------------------<br />OpenSM 3.3.15<br />Command Line Arguments:<br /> Log File: /var/log/opensm.log<br />-------------------------------------------------<br />OpenSM 3.3.15<br /><br />Entering DISCOVERING state<br /><br />Using default GUID 0x5ad00000bf4d5<br />Entering MASTER state<br /><br />SUBNET UP<br /><br /></blockquote>ライブラリなどに問題が無く無事起動したら、apt-get installでレポジトリから入るopensmのスクリプトを使って起動します。(パッケージのetc/init.d/opensm)<br /><blockquote><br />root@ibhack:~/ib# /etc/init.d/opensm start<br />Starting opensm on 0x0005ad00000bf4d5:<br /></blockquote><br />そして、ibstatで状態を確認します。<br /><blockquote><br />root@ibhack:~/ib# ibstat<br />CA &#039;mthca0&#039;<br />        CA type: MT25204<br />        Number of ports: 1<br />        Firmware version: 1.1.0<br />        Hardware version: a0<br />        Node GUID: 0x0005ad00000bf4d4<br />        System image GUID: 0x0005ad00000bf4d7<br />        Port 1:<br />                State: Active<br />                Physical state: LinkUp<br />                Rate: 20<br />                Base lid: 1<br />                LMC: 0<br />                SM lid: 1<br />                Capability mask: 0x02510a6a<br />                Port GUID: 0x0005ad00000bf4d5<br />                Link layer: InfiniBand<br /></blockquote><br />activeになっているのを確認したら、ib_ipoibをロードします。これでようやくifconfig -aするとib0が出てきます。<br /><blockquote>root@ibhack:~/ib# ifconfig ib0<br />ib0       Link encap:UNSPEC  HWaddr 80-00-04-04-FE-80-00-00-00-00-00-00-00-00-00-00<br />          BROADCAST MULTICAST  MTU:2044  Metric:1<br />          RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />          collisions:0 txqueuelen:256<br />          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)<br /></blockquote><br /><h2>IPoIBパフォーマンステスト</h2><br />　素の状態だとibはmtuが2024ですが、connectモードにすることにより65520まで拡張できます。これによりだいぶパフォーマンスが上がります。<br /><br /><blockquote>root@ibhack:~/ib# echo connected &gt;/sys/class/net/ib0/mode<br />root@ib0:~/deb# ifconfig ib0 mtu 65520<br /></blockquote><br /><br />　mtuが元の状態だと<br /><br /><blockquote>root@ibhack:~/ib# iperf -c 10.1.1.1 -i 1<br />------------------------------------------------------------<br />Client connecting to 10.1.1.1, TCP port 5001<br />TCP window size: 28.8 KByte (default)<br />------------------------------------------------------------<br />[  3] local 10.1.1.2 port 42139 connected with 10.1.1.1 port 5001<br />[ ID] Interval       Transfer     Bandwidth<br />[  3]  0.0- 1.0 sec   782 MBytes  6.56 Gbits/sec<br />[  3]  1.0- 2.0 sec   789 MBytes  6.62 Gbits/sec<br />[  3]  2.0- 3.0 sec   789 MBytes  6.62 Gbits/sec<br />[  3]  3.0- 4.0 sec   790 MBytes  6.63 Gbits/sec<br />[  3]  4.0- 5.0 sec   851 MBytes  7.14 Gbits/sec<br />[  3]  5.0- 6.0 sec   813 MBytes  6.82 Gbits/sec<br />[  3]  6.0- 7.0 sec   788 MBytes  6.61 Gbits/sec<br />[  3]  7.0- 8.0 sec   801 MBytes  6.72 Gbits/sec<br />[  3]  8.0- 9.0 sec   851 MBytes  7.14 Gbits/sec<br />[  3]  9.0-10.0 sec   851 MBytes  7.14 Gbits/sec<br />[  3]  0.0-10.0 sec  7.91 GBytes  6.80 Gbits/sec<br />root@ibhack:~/ib#<br /></blockquote><br /><br />　ですが、connect modeにしてmtuを65520にした状態では<br /><blockquote>root@ibhack:~/ib# iperf -c 10.1.1.1 -i 1<br />------------------------------------------------------------<br />Client connecting to 10.1.1.1, TCP port 5001<br />TCP window size:  649 KByte (default)<br />------------------------------------------------------------<br />[  3] local 10.1.1.2 port 42141 connected with 10.1.1.1 port 5001<br />[ ID] Interval       Transfer     Bandwidth<br />[  3]  0.0- 1.0 sec  1.22 GBytes  10.4 Gbits/sec<br />[  3]  1.0- 2.0 sec  1.21 GBytes  10.4 Gbits/sec<br />[  3]  2.0- 3.0 sec  1.21 GBytes  10.4 Gbits/sec<br />[  3]  3.0- 4.0 sec  1.21 GBytes  10.4 Gbits/sec<br />[  3]  4.0- 5.0 sec  1.21 GBytes  10.4 Gbits/sec<br />[  3]  5.0- 6.0 sec  1.21 GBytes  10.4 Gbits/sec<br />[  3]  6.0- 7.0 sec  1.21 GBytes  10.4 Gbits/sec<br />[  3]  7.0- 8.0 sec  1.21 GBytes  10.4 Gbits/sec<br />[  3]  8.0- 9.0 sec  1.21 GBytes  10.4 Gbits/sec<br />[  3]  9.0-10.0 sec  1.21 GBytes  10.4 Gbits/sec<br />[  3]  0.0-10.0 sec  12.1 GBytes  10.4 Gbits/sec<br /></blockquote><br />　まででるようになりました。夢の10Gですね。しかし頑張ってもこれ以上は出ず、理論値は16Gbまでは行けるはずなので、やはりオーバーヘッドがあります。ネイティブじゃないので仕方ないですが。<br /><br />　とりあえず、IPは通るようになったのでベンチマークは<a href="comments.php?y=12&amp;m=12&amp;entry=entry121202-085945" >後編</a>後編に回します。<br />参考<br /><a href="http://www.openfabrics.org/downloads/OFED/ofed-1.4/OFED-1.4-docs/ipoib_release_notes.txt" >http://www.openfabrics.org/downloads/OF ... _notes.txt</a><br /><a href="http://inqbus-hosting.de/support/dokumentation/docs/debian-infiniband-howto" >http://inqbus-hosting.de/support/dokume ... band-howto</a><br />]]></description>
	</item>
	<item rdf:about="http://xmms.jp/blog/index.php?entry=entry120728-030127">
		<title>【その他】Flash Live Media Encoderあれこれ</title>
		<link>http://xmms.jp/blog/index.php?entry=entry120728-030127</link>
		<description><![CDATA[　前回の続きなのですが、前回のにまとめると長くなりすぎるので分けました。<br /><br />　Ustreamではより高画質な配信をするときにFlash Media Live Encoder（以下FMLE)を利用するのですが、FMLEでは配信するときにVP6とH2.64を選択することが出来ます。では、どちらがいいのか、と言うのを検証してみました。検証方法は、ゲームマシンでこのMegademoを再生し、同じビットレートでキャプチャするという方法です。<br /><a href="http://www.scene.org/file.php?file=/parties/2009/evoke09/demo/rar.zip&amp;fileinfo" >http://www.scene.org/file.php?file=/par ... p;fileinfo</a><br />　Megademoなので映像の内容はHDRが綺麗だなあ位の内容です<br /><br /><h2>H2.64</h2><br />　H2.64のテスト結果です。<br /><iframe src="http://www.ustream.tv/embed/recorded/24242398" width="500" height="307" scrolling="no" frameborder="0" style="border: 0px none transparent;"></iframe><br />　CPUの使用率は、Core i7（HT有効）で大体4-50%でした。フレームドロップは起きていませんが、大きくシーンが変わるところでかなりノイズを出していました。<br /><br /><h2>VP6</h2><br />VP6のテスト結果です。<br /><iframe src="http://www.ustream.tv/embed/recorded/24242483" width="500" height="307" scrolling="no" frameborder="0" style="border: 0px none transparent;"></iframe><br />　同じくCPUの使用率は4-50%でしたが、大きくシーンが変わるところでフレームが間に合っていないところがあります。その代わり、ノイズは少ないと思います。<br /><br /><h3>比較</h3><br />　特に特徴がよくでたシーンを並べてみます。<br /><br />　H2.64<br /><a href=images/h2.64_encode_megademo.PNG class=lb><img src=images/h2.64_encode_megademo.PNG width=500px></a><br><br /><br />　VP6<br /><a href=images/VP6_encode_megademo.PNG class=lb><img src=images/VP6_encode_megademo.PNG width=500px></a><br><br /><br /><h2>まとめ</h2><br />　大きなノイズが出てもフレームを確保するという特性から、アクションゲームを配信するときはH2.64を使うべきで、逆にVP6は絵描き配信など、ノイズよりも画質を確保するべきときに使うといい感じなのでは、と思います。<br /><br />　まあそんなに配信しませんけどね…。]]></description>
	</item>
	<item rdf:about="http://xmms.jp/blog/index.php?entry=entry120721-073240">
		<title>【ネタ】黒電話をIPPhoneにしてみた</title>
		<link>http://xmms.jp/blog/index.php?entry=entry120721-073240</link>
		<description><![CDATA[　ずいぶん前に中古でRT57iを300円で手に入れたのですが、色々と後回しになっていて中々遊べずにいました。後回しにしすぎて若干忘れつつあったところに、100円で黒電話(600-A1型)を拾ってきたのでVoIPでIP Phone化してみました。<br /><br /><div id="container3"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</div>

    <script type="text/javascript" src="swf/swfobject.js"></script>
	<script type="text/javascript">
		var s1 = new SWFObject("swf/betaplayer.swf","ply","500","300","9","#FFFFFF");
		s1.addParam("allowfullscreen","true");
		s1.addParam("allowscriptaccess","always");
	s1.addParam("flashvars","file=VoIP.mp4&image=swf/voip_kurodenwa.PNG");
		s1.write("container3");
	</script>

<br /><br />　分かる人には分かるネタという<br /><br />　買ったあとに気がついたのですが、黒電話の電話線ははRJ11ではなくプラスとマイナスとアースという導線剥きだしで、壁から直接電話線をとるタイプだったんですね…。電圧などは同じなので被覆を向いてよじるなり半田付けするなりすれば大丈夫でしたが。<br />　設定方法は特に難しいことはなく、VoIPの設定→IP電話サーバの設定 からマニュアルで設定すればサクッとAsteriskに登録できます。<br /><br /><a href=images/RT57sip.PNG class=lb><img src=images/RT57sip.PNG width=500px></a><br><br /><br />　どうでもいいんですが、この黒電話自分より年上なんですよね…。なんか、アナログの象徴とも言えるものがデジタルにのって動くというところにときめきますね。（ねぇよ<br /><br />　…最近自分がどこに向かってるのかよく分からなくなってきました]]></description>
	</item>
	<item rdf:about="http://xmms.jp/blog/index.php?entry=entry120625-034653">
		<title>【その他】今更ながら自宅ラック勉強会5.0の内容を復習しました</title>
		<link>http://xmms.jp/blog/index.php?entry=entry120625-034653</link>
		<description><![CDATA[　TwitterでちょくちょくVoIPが(何故か)盛り上がるので、うまくいかずに投げていたAsteriskにまた何となく手を出してみました。<br />　その結果、無事にPR200NEという光電話TAを介してアナログ電話とSIPクライアント間で無事に通話できるようになりました。<br /><br /><a href=images/IMG_0731.jpg class=lb><img src=images/IMG_0731.jpg width=500px></a><br><br /><br />　分かりづらいですが、AndroidのSIPクライアントとアナログ電話の着信です。Androidの画面に出ている996と言うのがアナログ電話のをならすための番号です。99というのが内線であるというプレフィックスで、6と言うのが内線番号です。右側の電話の3という番号は、内線3番から着信が来ているという意味です。家の電話から3と押して外線ボタンを押すと一気に部屋の3つのIP電話が鳴りますw<br />　また、Ekigaと言うPC用SIPクライアントを通して外部に電話がかけられるようになりました。たかが時報ですが、それが聞けたときはようやくここまでこれたという達成感がありました。<br /><br />　最初はExtention.confに書かれている<br />_1.,n,Dial(ほげほげ)<br /> と言うような文字の意味が分からなかったのですが、以下のページがとても参考になりました。<br /><a href="http://www.voip-info.org/wiki/view/Asterisk+config+extensions.conf" >http://www.voip-info.org/wiki/view/Aste ... sions.conf</a><br /> これでやっと何を意味してるのかが理解でき、すっきりしました。最初からこれを調べていればもう少し早かったのですが。<br /><br /> そして、現在は電話機がローカルのicecastサーバーの音楽ストリーミングを再生する何かになりつつあります。<br /><a href="http://www.voip-info.org/wiki/view/Asterisk+cmd+MP3Player" >http://www.voip-info.org/wiki/view/Aste ... +MP3Player</a><br /><br />　これで、やっとVoIPの第一段階が終わりました。とりあえず、<a href="index.php?entry=entry120606-011442" >前回分</a>くらいの内容は消化できたと思います。今度、黒電話を買ってきてならしたいと思いますw<br /><br />ああ次はIHANET上でVoIPを動かすという目標が…。<br />]]></description>
	</item>
	<item rdf:about="http://xmms.jp/blog/index.php?entry=entry120331-230152">
		<title>【仮想化】Remote FXを試してみた</title>
		<link>http://xmms.jp/blog/index.php?entry=entry120331-230152</link>
		<description><![CDATA[　リモートデスクトップは非常に便利なのですが、DirectXやOpenGL等の3Dグラフィック等を実行しようとするとリダイレクトができなくなり実行できないと言う欠点があるのですが、Windows server2008R2 SP1から搭載されたRemote FXを利用すると、リモートデスクトップで高度な3Dグラフィックが扱えると言うことだったので試してみました。<br /><br /><br />概要<br /><a href="http://cloud.watch.impress.co.jp/docs/column/virtual/20100913_392477.html" >http://cloud.watch.impress.co.jp/docs/c ... 92477.html</a><br /><br /><h2>設定ではまった点</h2><br />・最初からRemoteFX用のグラフィックドライバを有効にしてしまっていて、Windowsのインストール段階でHyper-Vのコンソールがのぞけなくなり、強制シャットダウンしてRemoteFXドライバを抜いて再起動したらWindowsが壊れて終わった<br /><br />　最初はドライバを入れずにセットアップするべきでした。Windowsが普通に立ち上がってRDPを受け付けるように設定を有効にしてからRemoteFX用ドライバを入れるのが正しいようです。<br /><br />・Windows7　SP1を入れたらRDPを有効にしてあるにもかかわらず「このユーザーアカウントはリモートログインを許可されていないため、接続は拒否されました。」と言われて繋がらない<br /><br />　RemoteFX用ドライバを抜いた状態では接続できるにもかかわらず、Remote FXを有効にすると何故か上記のエラーが出てしまい接続できなくなりました。対処法は<br />コントロール パネル→すべてのコントロール パネル項目→システム→リモートの設定<br />から、\\PC名\ユーザーと改めて明示してあげることにより繋がりました。<br />参考<br /><a href="http://watery.dip.jp/slash/archives/405" >http://watery.dip.jp/slash/archives/405</a><br /><br />・何故か有効にならないと思ったら接続する側がWindows7の無印でSPが入ってなかった<br /><br />　SP1を入れていたと思っていたのに入っていませんでした…これはただのミスです。<br /><br /><h2>環境</h2><br /><br />サーバー<br />ML115 G5（Phenom II X4 960BE@3GHz、DDR2-800 8GB、Geforce9600GT）<br /><br />VM割り当て<br />Win7 Pro SP1、2CPU、2GB、モニタの最大数1、解像度1900x1200<br /><br />クライアント<br />Thinkpad X61(Core2Duo T7300@2GHz、DDR2-667 4GB）、Win7 Pro SP1<br /><br />接続方法<br />1GbiEでL2接続<br /><br /><h2>パフォーマンス</h2><br />実際に試してみた結果です。編集していないのでgdgdですがご勘弁をw<br />Thinkpad の画面が汚れているのと環境音の騒音がひどいのは仕様ですw<br /><br />注意：音が出ます<br /><a href="http://frontwing.jp/product/timeleap/download.html" ><br />タイムリープベンチ</a><br /><br /><div id="container3"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</div>

    <script type="text/javascript" src="swf/swfobject.js"></script>
	<script type="text/javascript">
		var s1 = new SWFObject("swf/betaplayer.swf","ply","528","300","9","#FFFFFF");
		s1.addParam("allowfullscreen","true");
		s1.addParam("allowscriptaccess","always");
	s1.addParam("flashvars","file=timeleap-fx.mp4&image=swf/timeleap-fx.JPG");
		s1.write("container3");
	</script>

<br /><br />　何故今更これかというと、さくっと動くベンチだったからです。動きに関しては大体30FPS出ているので問題ないです。<br /><br />FlatOut2<br />
<div id="container2"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</div>

    <script type="text/javascript" src="swf/swfobject.js"></script>
	<script type="text/javascript">
		var s1 = new SWFObject("swf/betaplayer.swf","ply","528","300","9","#FFFFFF");
		s1.addParam("allowfullscreen","true");
		s1.addParam("allowscriptaccess","always");
	s1.addParam("flashvars","file=flatuot-fx.mp4&image=swf/flatout-fx.JPG");
		s1.write("container2");
	</script>

<br />　リアルタイム性を求められるゲームは結構つらいです。動画的には結構ゲームのFPSが出ているように見えるので問題なくゲームができそうに見えるかもしれないですが、5-10フレームくらい入力と映像がずれるのでかなり難しいです。あと、このレイテンシによって酔います…<br /><br /><br /><h2>結論</h2><br />　ゲームは確かに動くものの、あくまで技術デモ的な位置に近いしおそらくこういった使われ方は想定していない<br /><br />　ここに動画はないのですが、11aの無線でつないで試した結果、54Mbps(実測20Mbps程度)な無線では明らかに帯域が足りてなくて画面の更新が追いつかない、と言うことがありました。WANを超えてしまうとかなり帯域とレイテンシ的につらいのでは、と思います。まあ、リモートデスクトップを接続するときのオプションでLAN以外ではFXは無効になるので、やはりワイヤードなLANで使うのが限界なのかな、と思いました。]]></description>
	</item>
</rdf:RDF>
