ピンポイント進行中一覧
いろいろ同時進行中。
脳って結構マルチタスクなのかなー?と思っていたけど、どうやらシングルタスクらしい。
1. kqueue動かない
select/poll/epoll/kqueue/…を一つのインターフェースで使えるようにする話で、kqueue版を実装中。for 分散ファイルシステム&共有擬似端末。
正しく書いたハズ!なのに動かない。Macだから?
とりあえずpollとepollは実装したから十分かな。
2. メモリプール付きスレッドプール
設計はできているので、あとは書く書く。
3. MPAsyncLogger
マルチスレッド用のLoggerで、今までログを吐くごとにMutexをロックをしていたから、ログを吐く/吐かないで挙動が変わる可能性があったけど、マルチプロセス+パイプにすればロックが要らないんじゃないか?と思った。
パイプはマルチスレッドで同時にwriteして良いのか?という疑問はあるけど、fwriteとかはマズそうだけど、writeならまぁ大丈夫なんじゃないか。
それにaio_write()を使えば、ブロックしない。…パイプに書くのにブロックするのか?という疑問はあるものの…カーネル内のバッファがいっぱいになるとブロックする?
さらに標準出力と標準エラー出力もパイプで繋いでしまえば、例外で落ちたとき(Logger APIを通さないメッセージ)でも、全部記録できる。
それでもって、テスト実行するたびに自動的にログファイルを作って、そこにログを保存していれば、いろいろ嬉しいかもしれない。(daemon toolsがこんなのやってたっけ)
5. 高速IOいろいろをラッピング
sendfileとかspliceとかvmspliceとかteeとかとかをラッピング。
↓たとえばこんなインターフェース。
teyedef {
SOCKET,
FILE,
PIPE
} fd_type;
// sendfile/spliceラッパー
template
void move(int infd, off_t* inoffset, int outfd, off_t* outoffset, size_t len);
// vmspliceラッパー1
template
void move_buffer(int infd, char* outbuffer, size_t len)
// vmspliceラッパー2
template
void move_buffer(int infd, const struct iovec *iov)
// tee + spliceラッパー
template
void move_dual(int infd, int out1fd, int out2fd, size_t len);
// tee + vmspliceラッパー
template
void move_dual_buffer(int infd, int out1fd, char* out2buffer, size_t len);
// move_triple(int infd, int out1fd, int out2fd, int out3fd, size_t len);
// move_n(int infd, int* outfds, size_t numfds, size_t len);
入力ファイルディスクリプタと出力ファイルディスクリプタのタイプをtemplate引数で指定するのがポイント。socket to socketならsplice→pipe→spliceしてくれるとか。(spliceは片方はpipeでないと使えない)
templateなので、インライン化できる。
4. IPAX用VIVER紹介文
締め切り明日。メールでせかされたさ。
VIVER Tシャツ作ろかな。やめよかな。
5. V-FIELD書き直したいんですが
いつやりましょうか。
6. 授業面倒
はっはー
7. ほげほげ
ほげほげ