簡単になったGPUパススルー
富士通のFMVじゃなくてprimergy tx100 s3pという安鯖をいまさら買ってみた。
メモリはなんか3月に比べて倍近くになってるようで円安に加えかなり供給を絞ってるから急な値上がりになってる模様。
買う時期が悪いように見えるがそれでも安いと思える安鯖。
primergy tx100 s3p:ヤフオクで6000円(送料込み)
Xeon e3-1230v2(4core8thread):アマゾンで23500円
ECC DDR3 8GB*2=16GB:アマゾンで18500円
pci1:radeon 6570ファンレス
pci2:usb3
pci3:空き
pci4:pt3
OS:VMWARE ESXi5.1
ちなみにヤフオクだと4core*2のハイパースレッド16コア機がたまに3万で出てる。
この安鯖構成のなにがいいかというとGPUパススルー(VGAパススルー)がとても簡単であること。
ハイパーバイザー用のグラボをささなくてもよいことがあげられる。(オンボードがある)
ESXi使いにはやさしいNICが2つあること。
NIC二枚あるといろんなネットワークの実験がやりやすい。
そしてAMD機についてたハードディスク付け替えただけで再インストール無しで環境移行がすんだこと。(esxiすら再インストールいらず)
当然esxi上で動いてたVMもそのまま動く。
簡単すぎて泣けてくる。
GPUパススルーのなにが大変だったかというと
以前の環境ではパススルーしてもドライバ入れたりするとBSOD
パススルーできたと思ってもGPU使う処理(dxvaなど)すると画面が乱れたり崩れたり。
kvmとかだとkernelに渡すbootパラメータ調整とかすれば直ったりしたけど
esxiでは対処の仕様がなかった。
USBのパススルーにまだ少し問題があるとはいえその辺乗りこえれば普通に使えるレベルに達したのがよい
#部材選定に当たって以下のWIKIがとても参考になりました
http://wiki.nothing.sh/page/%C9%D9%BB%CE%C4%CC%20PRIMERGY%20TX100%20S3p
#GPUパススルー上で問題なく使えたアプリ
League of Legends
MPC-HC(dxva)
#アイドル時の消費電力
120w が 50wへ。(グラボささなければもう少し減る)
#サウンド
以前はUSBサウンドを使用してたけど今はhdmiからspdifをとってる。USBと違って音飛びしない
http://item.rakuten.co.jp/donya/84480/
#ESXiの個人的なTIPS集
https://gist.github.com/you21979/6098759
Intel CPU Xeon quad core 3.3GHz 8MBキャッシュ LGA1155 BX80637E31230V2 【BOX】
- 出版社/メーカー: インテル
- 発売日: 2012/08/29
- メディア: Personal Computers
- この商品を含むブログを見る
- 出版社/メーカー: サンマックス・テクノロジーズ
- メディア: エレクトロニクス
- この商品を含むブログを見る
富士通 PRIMERGY TX100 S3 OSレスタイプ PYT10PZD2X
- 出版社/メーカー: 富士通
- メディア: エレクトロニクス
- この商品を含むブログを見る
node.jsで簡単にircへメッセージ送信
https://github.com/you21979/bot-irc-notifier
サーバーからircにサーバー落ちたよとエラーメッセージを通知をするシステムが欲しかったので作ってみた。
ただ作るだけじゃおもしろくないのでtypescriptで作ってみたけど単純な仕組みなので
あまり型の恩恵ない。
さて、実装方法だがredisを使っている
なんで使っているかというと
・redisはコマンドラインから簡単にメッセージを流せる
・redisとircはどちらもチャンネルと言う概念がある
・npmにライブラリがある
チャンネルという共通点を生かしてredisのチャンネルにポストすればirc上の同じチャンネルにポストするようにすればチャンネルも送信時に選べるしお手軽。
(irc側は事前にチャンネルに入っておく必要があるけども)
こういうシステムとシステムを繋げるのにnodeはお手軽にできるからいいね
↓みたいなシェルでircにポストできる
#!/bin/bash CHANNEL="#hogehoge" MESSAGE="テストです" redis-cli publish $CHANNEL $MESSAGE
スキルシート
プログラマの求人みていて思うのだがなぜ言語を最重要視するのだろうといつも思ってた。
言語はたしかに大事だがそれは道具の使い方の話だろうし武器にたとえるならいろいろな流派もあるはずだ。
武人にもしスキルシートがあればこんな感じだろうし
・流派
柳生新陰流(日本刀)
宝蔵院流槍術(十文字槍)
・奥義
無刀取り
活人剣
居合
・型(稽古、基本戦術)
燕飛
三学圓之太刀
奧之太刀
槍しごき
プログラマもこんな感じでいいんじゃね?と思ってしまう。
・流派
・奥義
メタプログラミング
・型(稽古、基本戦術)
オブジェクト指向プログラミング
求人募集をみても流派の募集しかしてないところが多い。
みんな流派(環境)を重視してるのだろうか
システム開発とは流派ありきなんだろうか
戦で兵を募るときは流派で募集かけたりするものだろうか
#厨二病っぽい
re:Ryan Dahl の面接試験:csv データのオブジェクト配列への変換
中島聡さんのブログにある頭の体操をやってみた
所要時間15分くらい
http://satoshi.blogs.com/life/2012/12/ryan-dahl.html
>JavaScript は Node.js の最新バージョンに使われているものを前提としてください(←ヒント)。
とあるがもっと簡単にできるのかな?とりあえず何も考えずに書いてみた。
var http = require('http'); function get(callback){ var opt = { host: 'ichart.finance.yahoo.com', port: 80, path: '/table.csv?s=AAPL&a=11&b=1&c=2007&d=12&e=1&f=2012&g=m&ignore=.csv', method: 'GET', agent: new http.Agent({maxSockets: 1}) }; var req = http.request(opt, function(res) { var data = ''; res.on('data', function(chunk) { data += chunk; }); res.on('end', function() { callback(parsecsv(data)); }); }); req.end(); } function parsecsv(data){ var begin = 1; var count = 0; var header = [ ]; var table = [ ]; data.toString().split('\n').forEach(function(line){ if(line !== ''){ var n = 0; var obj = {}; line.split(',').forEach(function(col){ if(count >= begin){ if(n === 0){ obj[header[n]] = col; }else{ obj[header[n]] = parseFloat(col); } table.push(obj); }else{ header.push(col); } ++n; }); } ++count; }); return table; } get(function(table){ // 最終結果表示 console.log(table); });
ストリーム型通信でプログラマが知らなければいけないこと
基本は3つしかない。
これはバイナリだろうがテキストだろうが同じ。
・バッファリング
一回の受信ではデータが揃わないのでデータが解読できるまで貯めておくこと。
・ディスパッチ
データを解読してイベント処理を発行すること。
・イベント
イベント処理を受け取って必要な処理を行うこと。
■バッファリング
ストリーム型のデータには切れ目がない
だから送信時に切れ目を認識できるようにする
送信時には先頭にパケットデータサイズを入れておく
データが到着したらパケットデータサイズをまず確認して
自身が管理している受信可能最大値と比較して超えていたらドロップする
問題がなければパケットデータサイズ分データが貯まるまでバッファリングする
■ディスパッチ
3つの工程がある
・解析
パケットデータサイズ分のデータがたまったら解析処理を行う。
大抵がパケットサイズのあとに何を処理するかの種別データを埋め込んでおき
種別データを元にイベントを発行する。
・データ組立
なんのイベントかわかったらデータの組立処理を行う。
足りないデータなどがあればそれはおかしなパケット。
・イベント発行
イベント処理用の関数に組み立てたデータを入れて呼び出す。
■イベント
ここまで来たらなんの目的の処理かわかるので処理するだけ。
例:
パケットサイズ;イベント1;データ1;パケットサイズ;イベント2;データ2;パケットサイズ;イベント3;データ3;
nodejsで実行時にスクリプトファイルを読み込んで実行する
C++などでluaを使ってよくやるスクリプトシステムと同等の仕組みを意味があるか別としてやってみた。
new Functionを使うと簡単かつJITが効く速いコードができる。
逆にこういう用途に使うであろうvmモジュールはくっそ遅い上にunstableなので使いにくい
var fs = require('fs'); var txt = fs.readFileSync('./filevm.jss'); var MAX = 1000000; [function(){ var TID = 'newFunction'; var ctx = { hoge : 0, fuga : 0, }; var f = new Function('"use strict";'+txt); var x = f(); console.time(TID); try{ x.init(ctx); for(var i=0;i<MAX;++i){ x.update(ctx); } }catch(e){ console.log(e.stack); } console.timeEnd(TID); console.log(ctx.hoge); console.log(ctx.fuga); }].forEach(function(f){ f(); });
スクリプト側
function init(ctx){ ctx.hoge = 0; ctx.fuga = 0; } function update(ctx){ ctx.hoge+=1; if(ctx.hoge%2===0){ ctx.fuga+=1; } } return { init : init, update : update, };
100万回実行して13ms
newFunction: 13ms
js側で関数やオブジェクト作ってctxに突っ込んでスクリプト側で実行もできる。
この実装方法であればnode.jsを再起動(接続中のユーザーが切断されずに)しなくてもスクリプト部分だけ再読込して実行できる
東京node学園祭2012参加してきました
東京node学園祭2012参加してきました
イントロダクション
基調講演
New Readable Stream in Node 0.10
Nodeコアの歩き方
~Nodeの開発に参加しよう~
Running Node.js in Production
layering distributed systems
ECMAScript tools - composable modules and transpiler infrastructure
全体として自分は英語のリスニングができないので通訳が大変よかったと感じました。
ECMAScriptがWEBのアセンブラのような位置づけになりそうです。
LLVM、CLR、JVM、ECMAScriptサーバー/クライアント/OS問わず激しいシェア闘いがありそうな予感
あとで見てないセッションのUSTREAMの録画をみてみようとおもいます
Mikeal Rogersさんのやつがtweetみるとおもしろそうでした
http://www.ustream.tv/channel/nodefest2012a