リアルタイムサーバーでのリソース管理
nodejsで大量のオブジェクトを管理する方法
WEB系のPHPerの人は意外にしらないようなので普通のサーバーアプリケーションのリソース管理方法を記載してみる
下のようにシングルトンのマネージャを作成しマネージャ経由でオブジェクトを生成する
削除もマネージャ経由でやる
この方法だと10000個くらいは管理できる
100000個以上管理するなら自前でハッシュを実装したほうが幸せかも
なぜならdeleteのとき100000個中の一個消すとくっそ遅いから。
var util = require('util'); var events = require('events'); var cls = function(){ this.n = 0; this.h = {}; }; util.inherits(cls, events.EventEmitter); cls.prototype.fire = function(){ this.emit('fire'); }; cls.prototype.create = function(){ var w = new X(++this.n); this.h[w.id] = w; return w; }; cls.prototype.delete = function(w){ delete this.h[w.id]; w.finalize(); }; cls.prototype.lookup = function(id){ return this.h[id]; }; var Singleton = (function(){ var instance = null; var getInstance = function(){ if(instance !== null){ return instance; } instance = new cls(); instance.setMaxListeners(10000); return instance; }; return { instance : getInstance, }; })(); var X = function(id){ this.initialize(id); }; X.prototype = { initialize : function(id){ this.id = id; this.cb = function(){ console.log("hoge %d",this.id); }.bind(this); Singleton.instance().on('fire',this.cb); }, finalize : function(){ Singleton.instance().removeListener('fire',this.cb); }, }; var w = Singleton.instance().create(); var p = Singleton.instance().lookup(w.id); Singleton.instance().delete(p);
※lookupいらないならハッシュで管理する必要ないけどサーバだとあったほうが便利。
サーバーまたぐときIDベースでやり取りできるし。
android4.1のcyanogenmod
いつの間に出てた
そのうち試してみよう
http://download.cyanogenmod.com/?device=maguro&type=nightly
↑のリンクはgaraxy nexus用
M1とついてるのが一応動くバージョンらしい
それ以外は単なるデイリービルド
freenasのvirtioドライバ
freebsdのvirtioドライバはぐぐってみつけたのだけど
http://people.freebsd.org/~kuriyama/virtio/
shellからpkg_addコマンドでインストールしても再起動すると元に戻るようだ
どうにかして入れられないものだろか
node.js
node.js触ってて職業プログラマが仕事で触るにはまだ早いかもなぁと思ってしまう。
以下の2つを何かの言語で習得してないならnode.jsはきついと思う
リアルタイムプログラミング
ネットワークプログラミング
オンラインゲームを支える技術を読んで理解できるなら
node.jsの習得に必要な技術を持ってることになる
オンラインゲームを支える技術 ??壮大なプレイ空間の舞台裏 (WEB+DB PRESS plus)
- 作者: 中嶋謙互
- 出版社/メーカー: 技術評論社
- 発売日: 2011/03/24
- メディア: 単行本(ソフトカバー)
- 購入: 30人 クリック: 1,664回
- この商品を含むブログ (47件) を見る
これとjavascript勉強すればnode.jsが自動的に使えるようになる。
- 作者: David Flanagan,村上列
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/08/10
- メディア: 大型本
- 購入: 4人 クリック: 201回
- この商品を含むブログ (9件) を見る
オンラインゲームを支える技術が理解できないなら今はまだきついと思う。
(リアルタイム通信フレームワークがないので)
まあ、こんなどうでもいいこと書いたのは単にamazonの商品紹介機能がはてなブログにあったから試してみたかっただけなんだけども。
KVMでデスクトップ仮想化でやったことリスト
UBUNTU12.04の場合
・grub
kernelパラメータの設定
IOMMUを使えるようにする
/etc/default/grub
GRUB_CMDLINE_LINUX="amd_iommu=on iommu=on,pt,noaperture pass-through"
・kvm
/etc/modprobe.d/kvm.conf
options kvm allow_unsafe_assigned_interrupts=1
・modprobe
modprobe kvm
問題ないなら
/etc/modulesに
を追加
pci_stubがなければそれも追加
・virsh
virt-managerからできない機能が多いのでいろいろ手動設定
VMVGAがKVM-SPICEで使えないのでKVMに変更(VMVGAが使えないと糞遅い)
RAWディスクをマッピング
・準仮想化ドライバのダウンロードとゲストへのインストール
VirtIO
http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
http://www.linux-kvm.com/content/using-vmware-vga-kvm-windows-guests
PCIパススルー
VMの起動
※追記
ubuntu12.04のKVMはPCIパススルーするときにlspciとかでデバイス一覧だして
スタブドライバに登録する必要はなくなってて
virt-managerで一覧から選んでポチポチやれば簡単にパススルーできるようになってる
GPUパススルーでディアルディスプレイ使うならUSBで二台キーボードとマウスつなげてパススルーするか
synergy使って共有するかなんか考えるしかない
synergy使う場合はiptablesでパケット通さないとならんけど
そういやubuntuでiptablesいじったことないんだけど正式な手順あるのだろうか。
自分はめんどくさいかなとおもって余ってたキーボードとマウスつけた
※追記2
dmesgでAGPのエラーでてたのでカーネルパラメータ直した
不安定な場合はGRUBのパラメータ微調整する
症状はGPUパススルーが一度は大丈夫だがwindowsを再起動すると二度目でBSODがでるなど。