次期V-FIELD作るぞ

作るぞーと言わないと作らない気がした。

しかし、ParttyやKazuhiki(そしてFDIO)は、このための準備であったのだ!


これからの時代はシングルスレッド+非同期IO+Event Drivenだと確信したので、それで行く!

…と言うか、もう同期処理に頭を悩ませたくない…結局コンテキストスイッチで遅くなって報われなさそうだし…


Linux AIOの時に作った↓これをもっと作り込んで、基盤に使う。
http://syuki.skr.jp/aioserver/aioserver-0.0.0.tar.gz

Linux AIOは使えないので、そこはFDIO::Multiplexer(つまりはepoll/kqueue/select)に置き換える。


イベントハンドラのコールに関数ポインタ×2は避けられないかなぁ。仮想関数よりはマシ?



次期V-FIELDは、たぶんV-FIELDではない。

まず名前を変える。

それから、たぶんブロックデバイスにはしない。連想配列(map)にする。

ブロックデバイスとして使うには、このmapの上にブロックデバイスなインターフェースを作ることにする。たとえばチャンク単位でキーにするとか。キーにハッシュをかけなければデータ位置は連続するので、そんなにオーバーヘッドは出ないと思う。


データのストア先はtmpfsにする。こうしておくと後々いろいろ良い。
まずカーネル空間で保持するので、sendfile()で高速。

それから、ファイルシステムに簡単に移行できる。むしろtmpfsにストアすることとファイルシステムにストアすることは、ユーザーランドから見ればどちらも同じ。


現在のV-FIELDは書き込み機能を追加できる設計ではないけど、今度は書き込み機能もインターフェースだけは実装しておく。

書き込みはsocketからread()+mmap()にコピー+ASYNCなmsync()かな?
socketからpipeにsplice→pipeからファイルにsplice?
socketからmmapをvmspliceしたpipeにsplice→ASYNCなmsync()?
read()+Linux AIO write()?
socketからvmspliceしたpipeにsplice→Linux AIO write()?