10/30 (火)
[時事] 米国東海岸にハリケーン
ハリケーン Sandy が米国の東海岸に上陸、ニューヨークを直撃し、600万戸停電が停電、地下鉄が水没した。 特に地下鉄は海水が浸入して水没したので、電気設備等の絶縁にダメージが心配になるよね。
10/27 (土)
神田古本まつり
神保町の古本街で神田古本まつりが開催されていた。 神田カレーグランプリに行くついでに観て行く。 いろいろ本を物色して10冊ばかり買い込む。
2012 神田カレーグランプリ
今年もやってきた神田カレーグランプリ。 昨年は10月29日に第一回が開催された。
カレーグランプリの外側で今年も岩手の物産展をやっていた。 牛タンつくね串というのを食べるが、牛タン分が少ない。
今日見たへんな幟
神田カレーグランプリの会場の神田 小川広場公園で見た幟。 これはカレーグランプリとは無関係に立っているんだろうなぁ。
10/26 (金)
[Food] ラーメン専門店「日吉で一番ウマいのはあびすけさんだと思うので、当店営業時間外はぜひともあびすけさんをご利用ください。」@日吉
日吉に出来たラーメン店『ラーメン専門店「日吉で一番ウマいのはあびすけさんだと思うので、当店営業時間外はぜひともあびすけさんをご利用ください。」』に行ってみる。 冗談のようだがこれが店名だ。
いつきても閉まっているが、土曜・日曜・祝日が定休日らしい。
天下一品風のどろっと濃厚なスープのラーメン。 カウンターに置かれた味の素の説明がすがすがしい。
お味はいまいちでした。
10/25 (木)
[MyWeb] 「RADOS の概略 (RADOS と CRUSH と Placement Group の関係)」を更新
「RADOS の概略 (RADOS と CRUSH と Placement Group の関係)」のページに tree bucket のマッピングアルゴリズムを追加。 Tree bucket は性能はよくないのだが、使われている 2 分木のデータ構造が面白い。
10/21 (日)
美術にぶるっ! ベストセレクション 日本近代美術の100年@新国立美術館
竹橋の新国立美術館でやっている「美術にぶるっ! ベストセレクション 日本近代美術の100年」を観てきた。 明治以降の日本の近代美術の西洋画を取り込んでいく過程が見れて面白い。 本展は写真撮影可能なのも珍しい。
ハロウィンのバルーン
ハロウィン飾りのこのバルーンをいろんなところで見かけるけど、どっかで売っているのかしらん。
10/20 (土)
Ceph のストローアルゴリズム(straw algorithm)
スケーラブルな分散ファイルシステムはディスクを追加した時に、古いディスクの内容を新しいディスクに移して容量の均一化を行う。 この際に、分散ファイルシステムの採用しているアルゴリズムが重要になる。
たとえば同じ 15 台のディスク構成でも、最初から 15 台のディスクで構成した場合のデータ分散のパターンと、最初は 10 台で組んで後に 5 台追加して 15 台になった場合のデータ分散のパターンでは異なるはずだ。 このアルゴリズムが下手だと古いディスクから新しいディスクへの移動が起きるだけでなく、古いディスク間で移動が起きてしまう。
実際に GlusterFS が採用している Elastic Hash Algorithm はリバランス処理が苦手でバージョンによって多少改善されるが、それでもかなりひどい。
一方、Ceph はリバランスにかなり強いことを実験的に確かめたことがある。 Ceph のアルゴリズムは CRUSH(Controlled Replication Under Scalable Hashing) だが、このアルゴリズムのどこからこの特徴が生まれているのか謎だった。 どこかにコンシステント・ハッシュ(Consistent Hash)が使われているのかとかいろいろ悩んでいたがついにこの理由が分かった。
Ceph はファイルデータを 4MB 単位のチャンクに区切り、これを OSD と呼ばれるディスクサーバに分散配置させる。 これはファイルの i ノード番号とファイルのオフセットから決まるチャンク番号から合成したオブジェクトID(OID)が元になる。 これがやや技巧的な Placement Group(PG)にマッピングされる(RADOS の概略 (RADOS と CRUSH と Placement Group の関係)。 オブジェクト単位で OSD へのマッピング方法を決めると細かすぎるため、同じ OSD に割り付けるグループを適当に用意したものである。 OID % (PG 数) が PG 番号となり、PG 番号によってどの OSD (ディスク)に分散配置されるかが決まる。
ちなみに OSD 数の 100 倍ぐらいの PG を用意する。 100 倍に意味はなく、この程度の PG を用意すればデータの分散が均一になるだろうというヒューリスティックによって決まっている。 またクラスタを組んだ後は OSDを追加しても PG 数は変えないので(変えることはできる)、最初の PG 数は (想定するされる最大 OSD 数) ×100 程度にしておく。
問題は PG 番号がどの OSD に配置するかを決めるのに CRUSH を使うのだが、CRUSH のデフォルトのバケットアルゴリズムである Straw bucket がリバランス特性を支えていたようだ。 Straw bucket は Drwaing straws、藁の長さを比べて一番大きな藁を採用するといものだ。 CRUSH はある PG 番号がどの OSD(ディスク) に割り付けられるのかを、PG 番号に対して各 OSD でハッシュ値をとったものを「藁」にして長さを比べている。
実際に使うハッシュは Jenkins のハッシュ関数で以下のようなもの。
#define crush_hash_seed 1315423911 #define crush_hashmix(a, b, c) do { \ a = a-b; a = a-c; a = a^(c >> 13); \ b = b-c; b = b-a; b = b^(a << 8); \ c = c-a; c = c-b; c = c^(b >> 13); \ a = a-b; a = a-c; a = a^(c >> 12); \ b = b-c; b = b-a; b = b^(a << 16); \ c = c-a; c = c-b; c = c^(b >> 5); \ a = a-b; a = a-c; a = a^(c >> 3); \ b = b-c; b = b-a; b = b^(a << 10); \ c = c-a; c = c-b; c = c^(b >> 15); \ } while (0) static uint32_t crush_hash32_rjenkins1_3(uint32_t a, uint32_t b, uint32_t c) { uint32_t hash = crush_hash_seed ^ a ^ b ^ c; uint32_t x = 231232; uint32_t y = 1232; crush_hashmix(a, b, hash); crush_hashmix(c, x, hash); crush_hashmix(y, a, hash); crush_hashmix(b, x, hash); crush_hashmix(y, c, hash); return hash; }
Straw bucket はある PG 番号(pg_id)に対して、OSD 番号(osd_id) に 0、1、2 という数字を入れて crush_hash32_rjenkins1_3(pg_id, osd_id, r) & 0xFFFF
を計算する。
r
はレプリケーションをとる場合の調整値で、本質的でないので常に 0 とする。
PG 番号の 0〜6 に関してハッシュ値を計算したの下の表になる。 それぞれ一番大きい値を赤字で示してみた。 ここが割り付け先となる。 つまり PG 番号 0、1、3、5 は OSD 0 に、PG 番号 2 と 4 は OSD 1 に、PG 番号 6 は OSD 2 に割り付けると決定できた。
pg_id=0 | pg_id=1 | pg_id=2 | pg_id=3 | pg_id=4 | pg_id=5 | pg_id=6 | |
---|---|---|---|---|---|---|---|
osd_id=0 | 62386 | 28542 | 44565 | 60963 | 21810 | 37274 | 1173 |
osd_id=1 | 28691 | 10905 | 54092 | 37545 | 32692 | 22271 | 8163 |
osd_id=2 | 32439 | 19538 | 17678 | 33041 | 31391 | 24439 | 32687 |
osd_id=3 | 43321 | 48894 | 33574 | 38061 | 29187 | 62656 | 30270 |
もしこの 3 台構成に 1 台追加され OSD 3 が加わったとしたら、PG 番号に対応するハッシュ値は下段の1行になる。 このうち青字で示した PG 番号 1 と 5 のハッシュ値は、古い OSD 0 〜 2 のハッシュ値よりも大きい。 そのため OSD 0〜2 のクラスタに OSD 3 を加えると PG 番号 1 と 5 のオブジェクトが、OSD 0 から OSD 3 へ移動することになる。
これが Ceph のリバランスになる。 移動しない古いデータは元の OSD (ディスク)に、移動するデータだけ新しい OSD(ディスク)へ移動するので、最小移動が保証される。 しかもこのアルゴリズムはコンシステント・ハッシュ法のようなハッシュ域の区割りを記録する必要もない。
この基本以外に、CRUSHでは以下のような工夫がしている。
- OSD 間の容量が均一になるように藁の長さに対して、OSD 容量を基準にした重み付けを行う。
つまり
(crush_hash32_rjenkins1_3(pg_id, osd_id, r) & 0xFFFF) * (重み付け)
で比較を行う。もし重み付けが変わった場合でも OSD が増えた場合と同様に、最小限の移動で済ますことが可能だ。 - OSD(ディスク)の数が数百〜数千になると、全ての OSD に対してハッシュを計算するのがコストになる。CRUSH はそのためバケットを階層化することで、対応している。
[MyWeb] 「RADOS の概略 (RADOS と CRUSH と Placement Group の関係)」を更新
「RADOS の概略 (RADOS と CRUSH と Placement Group の関係)」のページに straw bucket と list bucket のアルゴリズムの話を追加してみた。 Tree bucket と uniform bucket の話もおいおい加筆して行こう。
10/14 (日)
横浜オクトーバフェスト2012@赤レンガ
今日は最終日なので赤レンガで今年も開催された横浜オクトーバフェスト(公式)に行ってみる。
小雨だが雨が降っているのが難儀なので、ソーセージの盛り合わせを食べて振り出す前に帰った。
象さんの像があるぞう。
[Movie] 魔法少女まどか☆マギカ 後編/永遠の物語
先週公開の前編に引き続き後編も昨日から公開。 川崎チネチッタで見てきた。 前編の時と同様に劇場のほとんどの席が埋まっている。 川崎のシネコンの中でまどか☆マギカをやっているのがチネチッタだけというのも大入りの理由かしらん。
映画は TV の9話から最終話までの編集版だけど、4話分しかないのでほとんどのシーンが上映される。
TV 番からのサプライズはほとんどないが、やはりエンディング後の「劇場版まどか☆マギカ 新章/叛逆の物語」が映ると観客からどよめきがあがっていた。
10/13 (土)
[Movie] 推理作家ポー 最期の5日間
川崎チネチッタで鑑賞。 原題はThe Raven。 ポーのゴシックホラー作品をベースにした模倣犯をポーが追うというもの。 史実でポーが死ぬ前日に叫んでいた「レイノルズ」というキーワードに繋がるように出来ている。
10/11 (木)
GlusterFS 3.3.0 の RMDA (InfiniBand) の使われ方
GlusterFS 3.3.0 の RDMA(ibverbs) コードを見ている。
RDMA コードは glusterfs-3.3.0/rpc/rpc-transport/rdma/src/ の下に入っている rdma.c の rpc_transport_ops
あたりが取っ掛かりか。
4820 struct rpc_transport_ops tops = { 4821 .submit_request = gf_rdma_submit_request, 4822 .submit_reply = gf_rdma_submit_reply, 4823 .connect = gf_rdma_connect, 4824 .disconnect = gf_rdma_disconnect, 4825 .listen = gf_rdma_listen, 4826 };
気づいた点を箇条書きにしてゆく。
- 通信は Reliable Connection (RC) を使っている。
- 最初の LID/QPN/PSN の交換は TCP のソケットを使う。
- GlusterFS が TCP 接続の際に、クライアント側は
connect
を出すタイミングで QP を作成している。サーバ側はaccept
のタイミングで応答的に QP を作成している。
- GlusterFS が TCP 接続の際に、クライアント側は
- Shared Receive Queue を使っている。
- Send-receive と RMDA write & read の両方を使っている。
- Scatter/gather は送信が 2 で受信が 1。RMDA Write の時に s/g が 2 になる。
- Completion event channel を使っている。
- 完了イベントは
channel->fdで
マルチプレクサせずにibv_get_cq_event
を直に呼び出している。ibv_get_cq_event
はタイムアウト指定ができずイベントが起きるまで永遠に待ち続けるという動作のため、それぞれ専用スレッドを立てている。このため送信 channelと受信 channel で 2 つスレッドが必要。 ibv_create_cq
の第3引数のcq_context
をちゃんと使ってgf_rdma_device_t
を引っ掛けている。これはibv_get_cq_event
で取り出す。
- 完了イベントは
__gf_rdma_write
の中でiovec
を ibverbs の s/g に詰め替えようとしているが、いまいち意図が読めない。GlusterFS は rmda 時に writev がちゃんと動くのかしらん。あらかじめ RDMA 用のメモリ領域を用意するのではなく、転送要求がくる度にその領域をibv_reg_mr
して、すぐにibv_unreg_mr
しているのぉ。あまり効率がよくない書き方だなあ。
10/9 (火)
ツタンカーメン展@上野の森美術館
今日は有給休暇をとって「ツタンカーメン展 〜黄金の秘法と少年王の真実〜」(公式)を観に行く。 休日だというのにかなりの混雑ぶり、13:30 に到着して 15:00 からの整理券を渡される。
ツタンカーメンの王墓から出てきた品を中心に展示をされているが、どちらかというと小品が多い。 料金が高い割にはいまいちだった。 同種のエジプト展では森アーツセンターギャラリーでやっていた大英博物館 古代エジプト展の方がミイラのマスクや木棺など展示が多く、解説も充実していた。
ただツタンカーメンの DNA 鑑定による系統図など最新の研究の成果が観られるのはよい。
[Food] Tapas Blanco@秋葉原トリム店
タパスブランコ 秋葉原トリム店(ぐるなび、食べログ)で晩飯。 前回は8月18日に来ている。
一応、パエリアは全種類食べたのでオーソドックスな魚介のパエリアを食べる。 これが一番美味しい。
10/8 (月)
特撮博物館展@東京都現代美術館
昨日のリベンジで「館長 庵野秀明 特撮博物館 ミニチュアで見る昭和平成の技」(公式、東京都現代美術館)を見てくる。
券は事前にコンビニで買ったが、120分待ちである。 行列に並んだのが 11:30 頃。
並んでいる間に見渡すといろいろオブジェが並んでいる。
ようやく入場できたのは 13:00 頃だった。
入場するとすぐ分かったのだが普段と客層が違う。 若い人が男女ともに多い。 聞き耳を立てていると会話が恐ろしくマニアック。 年配の人や家族連れも多い。 年配者は昔の特撮にさかんに関心している。 ただ美術展の主流のおばさん層がほとんどいない。
撮影に使われたミニチュアの街は写真撮影が可能。 ここも爆心地まで入ってみるには行列に並ぶ必要がある。 私は外側からの撮影で我慢した。
[Food] 深川釜匠
深川と言えば深川飯なので、深川資料館通りのお店に適当に入ってみる。
深川釜匠はどうも民家を改造した料理屋のようね。 2階は公文式の塾を連想させる。
これで千円は高いです。
案山子
深川資料館通りにはなぜか案山子が並べられている。 MOT の道案内をしている案山子も多い。
お台場オクトーバーフェスト2012 〜リターンズ〜
お台場オクトーバーフェスト2012 〜リターンズ〜(公式)に行く。
このオクトーバフェストは主催者や出展者が同じなのでフォーマットがほぼ同じなのだが、ドイツ名物スパゲッティーアイスクリームが食べれるのではないかという淡い期待をして見に来ている。 残念ながら今回もダメだった。
[Movie] 魔法少女まどか☆マギカ 前編/始まりの物語
チネチッタで 20:40 の部を鑑賞。 普段と客層がぜんぜん違う。 チネチッタは封切日でも客席が半分程度しか埋まらないのが常なのに、今回はレイトショーというのに席がほぼ満員だ。
映画は TV の8話「あたしって、ほんとバカ」までの編集版。 いくつかシーンが描き直されていた。
10/7 (日)
特撮博物館展@東京都現代美術館に来てはみたが…
東京都現代美術館でやっている特撮博物館展の会期が明日までと知り、慌ててきてみるが人大杉。 券を買うまでに30分。並んで120分というのを聞いて萎えました。
周辺を散策して退散する。
後で気づいたのだが東京都現代美術館は9月30日にミャンマーの祭があった木場公園の中にあったのね。
メトロポリタン美術館展@東京都美術館
特撮博物館展はあきらめたので、上野の東京都美術館でやっている「メトロポリタン美術館展 大地、海、空 ― 4000念の美への旅」(公式)へ行った。
「自然」をテーマとした MET のコレクション。 フランス・オランダ・アメリカの絵画が多い。 ゴッホなど有名作も来ているが、テーマがしっくりこないのでそれほどぐっとくる作品はなかった。 ただヘリ・メット・デ ブレスの『聖アントニウスの誘惑』が見れたのはうれしい。 ヒエロニムス・ボスをはじめとしてオランダ画家が『聖アントニウスの誘惑』を描いているけど、日本ではなかなか見られないのね。
美術館を見たと後で上野公園を散策するけど、全国都市緑化フェアTOKYO というのをやっていた。
10/6 (土)
10/4 (木)
眼鏡のフレームがまた壊れた
職場で眼鏡のフレームが壊れてしまった。 数日前に就寝中に眼鏡を下敷きにしてフレームが曲がったのを無理矢理直したが、限界だったようだ。
日記を読み直すと眼鏡を壊すのは3年ぶりのようだ(2009年10月17日の日記)。
追記:10/6
綱島のメガネストアーで眼鏡のフレームを買い換えた。