Slip Ahead Logging

It's not your fault at all.

Akiban

Akiban Technologies | Join For Free

NewSQL 系の DBMS とのことで.Short-Request がキーポイントらしい.

あとで読む.

Akiban highlights : DBMS 2 : DataBase Management System Services

Akiban update : DBMS 2 : DataBase Management System Services

Short-Request に関しては以下を.

Short-request and analytic processing : DBMS 2 : DataBase Management System Services

Emacs のセッションファイルが肥大化したら

個人的なメモ.

何らかの拡張 (emacs-w3m?) が minibuffer-history に突っ込む文字列がプロパティ付きで,これが 10MB 程度と相当でかい.そのため,セッションファイル全体で 60MB 程度となり,読み込みにも書き込みにも相当な時間を要すようになってしまった.

そこで,次のようにして純粋な文字列だけを格納するように変更.

(setq minibuffer-history
      (mapcar (lambda (history-string)
                (substring-no-properties history-string))
              minibuffer-history))

picoev

Kazuho@Cybozu Labs: Picoev: a tiny event loop for network applications, faster than libevent or libev

日本の誇るハッカー OKU, Kazuho 氏によりイベント駆動機構ライブラリ.ベンチマークでは libevent, libev よりも高速であるという.なんでも,libevent や libev がディスクリプタやタイムアウト情報の管理に木構造を利用するのに対し,picoev は Bit Vector による配列・リングバッファを利用しており,これが木の操作よりも高速であるとのこと.

イベント駆動の抽象化機構としては他に mpio もある.使う必要の出てきた時に,色々と詳しく調べて見ることにしよう.

getpagesize(2) はレガシー

ページサイズの取得について getpagesize(2) の map ページには次のようにある.

SVr4, 4.4BSD, SUSv2. In SUSv2 the getpagesize() call is
labeled LEGACY, and in POSIX.1-2001 it has been dropped;
HP-UX does not have this call. Portable applications should
employ sysconf(_SC_PAGESIZE) instead of this call.

getpagesize(2) はレガシーなので sysconf(2) を使いましょうと.

#include <unistd.h>
long sz = sysconf(_SC_PAGESIZE);

ちなみに mmap(2) で設定するメモリのオフセットをページサイズの倍数としなければならない理由を先日知った.これは mmap が OS の用意する仮想記憶の仕組みをそのまま使っているため.メモリの割当先としてスワップ領域ではなくディスクリプタで指定された特定のファイルを用いている.ユーザが mmap により割り当てられたページへアクセスした際にページフォルトが発生し,そこではじめてファイルから特定部分の読み込みがおこなわれると(あれ,書いていて思ったが整数倍でないと都合が悪いのか?).

mmap (メモリマップトファイル) : kei@sodan のスライドが恐ろしくわかりやすい.