Cache Craftiness for Fast Multicore Key-Value Storage
Citation
@inproceedings{10.1145/2168836.2168855,
author = {Mao, Yandong and Kohler, Eddie and Morris, Robert Tappan},
title = {Cache Craftiness for Fast Multicore Key-Value Storage},
year = {2012},
isbn = {9781450312233},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/2168836.2168855},
doi = {10.1145/2168836.2168855},
booktitle = {Proceedings of the 7th ACM European Conference on Computer Systems},
pages = {183–196},
numpages = {14},
keywords = {multicore, key-value, persistent, in-memory},
location = {Bern, Switzerland},
series = {EuroSys ’12}
}
- 著者による実装: kohler/masstree-beta
どんなもの?
- 名称: Masstree
- 速いインメモリ Key-Value Store
- 並行実行してもスケールすること
- 特にメモリアクセスの遅さに注目して、キャッシュに乗りやすい構成に
- キーの長さは可変長
- キーの範囲を指定してデータを取得することができる
- 実際のワークロードでは、キーの前方が一致することがよくあることに注目
先行研究との比較
ハッシュテーブルとの比較
ハッシュテーブルは、キーに対するデータの取得が O(1) で行え、最速の方法である。しかし、例えばキーが i 以上 j 以下の範囲の値をすべて取得する、といった操作を行うのは困難である。
B+木との比較
ロックの要らないB+木として、 PALM があったが、キーが固定長である必要があった。
この技術の重要なポイント
構造
Masstreeは、Trie木(interior node)と、B+木の葉(border node)を組み合わせた木構造である(Figure 1)。各レイヤーは、1個以上の border node と0個以上の border node を持つ。
1レイヤーでキーの8バイトを表し、 interior node によって、前方が一致するキー同士が同じ枝を通る構造になっている。
border node に含まれるキーは、メモリ上の近い場所に置かれるので、キャッシュが有効に働く。また、兄弟ノード同士が二重リンクリストになっているので、範囲検索にはこれを使うことができる(これはB+木の利点)。
並行処理のための工夫
著者の主張によれば、 Compare-and-Swap しても、どうせメモリバリアでオーバーヘッドがあるんだし、スピンロックでもいいでしょ(4.5節の最後)ということで、ノードごとにバージョンと状態を持ち、もしロック状態だったら解放されるまで待つという戦略を取る。バージョンが変化した場合、再読み込みが必要ということで、ルートから読み直す。
課題
並列ルックアップに対応して、大量のルックアップを効率的に行いたい。