NAKAMURA Minoru の日記 (2015年2月)

先月の日記(2015年01月) 今月の日記(2015年02月)
2002 | 10 | 11 | 12
2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2014 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2015 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2016 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2017 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | Google+
slideshare | github | Qiita



2/28 (土)

二回目の歯医者

2回目。 まだ神経が残っているみたいで非常に痛い。


2/21 (土)

歯科医院へ

奥歯に虫歯があるようで20年ぶりぐらいに歯科にかかる。 歯科も随分替わっていて診察台に液晶ディスプレイがついて麻酔が掛るまでの時間に患者に TV を見せたりできるようになっていた。

今回は神経を抜いてチューインと削った後に虫歯菌の殺菌剤を詰めて蓋をしたとのこと。 あと5、6回は繰り返すとな。

[Movie] アメリカン・スナイパー

チネチッタで鑑賞。


2/19 (木)

[Food] 辛口料理 HACHI スズメバチ@新橋

大阪にある辛口カレーの店スズメバチが新橋に支店を出したので日曜日に行ってみたが不定休にぶつかって閉まっていた。 新橋はビジネスマン街なので土日に休むのは当然か。 今日は別件で有給休暇をとったのでリベンジする。

カレーのソースと上に載っている牛肉からハヤシライスを少し連想するが、全体に唐辛子の辛さが決まっている。 デリーのカシミールカレーほどではないが、食後に舌はヒリヒリ感が結構ある。

[Movie] ニンジャ・タートルズ

川崎チネチッタで鑑賞。 これ観るよりエグソダスを観た方がよかったかも…


2/16 (月)

[PostgreSQL] PostgreSQL 9.4 で使える集約のまとめ

PostgreSQL 9.4 で GROUP BY を使って行える集約をまとめてみる。

FILTER 条件の設定

agg_test のようなテーブルがあった場合(SQL)、通常の集約(sum1)に対して、DISTINCT を付けるとグループ内の重複を除去したものだけが集約される(sum2)。 これに FILTER を指定するとグループ内で条件に合致するもののみが集約される(sum3)。

Table agg_test
aggkeyvaluecond
1101
1101
1201
2101
2202
2303
3103
SELECT aggkey, sum(value) AS sum1,
               sum(DISTINCT value) AS sum2,
               sum(value) FILTER (WHERE cond = 1) AS sum3
       FROM agg_test GROUP BY aggkey;
Result
aggkeysum1sum2sum3
1403040
2606010
31010 

ORDER BY 条件の設定

集約は列に対して赤字で書いたような ORDER BY を指定できる。 青字の ORDER BY は集約結果をソートすることを意味するが、赤字の ORDER BY はグループ毎のデータを指定の属性でソートしてから集約を行うことを意味する。 これは string_agg (各行の文字列属性を結合する) のように、処理順序によって結果が変わるような集約に対して指定する。

SELECT aggkey, sum(value) AS sum1,
               sum(value ORDER BY cond) AS sum2,
       FROM agg_test GROUP BY aggkey ORDER BY aggkey;

WITHIN GROUP

WITHIN GROUP と GROUP BY を組み合わせると、グループされた行の集合に対してより深い分析を行うことができる。 ウィンドウ関数を使った場合と異なり、出力はグループごとに1行となる。

例えばクラス番号(1〜10)と2つの試験の結果(0〜100)が格納されたテーブルがあるとする(SQL)。 クラス別にクラスの人数、平均点、最低点、最高点を表示するには以下のようにすればよい。

SELECT class, count(*),
       avg(course1) AS course1_avg, min(course1) AS course1_min, max(course1) AS course1_min,
       avg(course2) AS course2_avg, min(course2) AS course2_min, max(course2) AS course2_min
FROM test GROUP BY class ORDER BY class;

だがクラス別にもっとも多い得点(最頻値)を表示する場合には、集約関数 mode() を使うことになる。 mode() はある属性について並び直して、同じ値が連続している最大行数を探す関数になる。

SELECT class,
       mode() WITHIN GROUP (ORDER BY course1) AS course1_median,
       mode() WITHIN GROUP (ORDER BY course2) AS course2_median
FROM test GROUP BY class ORDER BY class;

また 80 点をとった時に各クラスで何番目になるかを調べるには、集約関数 rank() を使えばよい。 この場合もどの属性で並び替えるかを WITHIN GROUP で指定することになる。

SELECT class,
       rank(80) WITHIN GROUP (ORDER BY course1) AS course1,
       rank(80) WITHIN GROUP (ORDER BY course2) AS course2
FROM test GROUP BY class ORDER BY class;

WITHIN GROUP と一緒に使える集約関数は以下の表のようになる。

WITHIN GROUP と一緒に使える集約関数
関数説明
mode()モード(最頻値)を返す。
percentile_disc(p)p で与えれたパーセンタイルにあたる値を返す。p には 0〜1 の数値を指定する。p のパーセンタイルと順位の数え方との対応関係を具体的に説明すると 0〜9 の 10 個の数値があり、これを WITHIN GROUP で昇順に並べたとする。この時、percentile_disc(p) の p が [0.0, 0.1] なら 0 を返す。p が (0.1, 0.2] なら 1 を返す。p が (0.2, 0.3] なら 2 を返す。… (0.8, 0.9] なら 8 を返し、(0.9, 1.0] なら 9 を返す。 p のパーセンタイルで指定する順位と一致する値がなければ、p を越えない最後の値が返る
percentile_cont(p)p で与えれた連続型分散に基づくパーセンタイルにあたる値を返す。p には 0〜1 の数値を指定する。percentile_disc(p) との違いは、percentile_disc(p) は常に実際に存在する属性値を返すのに対して、percentile_cont(p) は存在する 2 つの属性値から補間された値を返す点にある。
rank(n)与えられた値 n の順位を返す。ただしグループ内の重複値もカウントした場合の順位になる。値 n が指定したキーの中にある値よりもソート順が前の場合、順位は 1 になる。
dense_rank(n)与えられた値 n の順位を返す。rank(n) との違いは重複した値はまとめて順位を付けている。
percent_rank(n)与えられた値 n の順位を 0〜1 の範囲の小数で返す。
cume_dist(n)与えられた値 n が累積分布の中でどの位置にあたるかを 0〜1 の範囲の小数で返す。

rank()、dense_rank()、percent_rank()、cume_dist() は同名の関数がウィンドウ関数にもあったが、それとは使い方が異なる。 ウィンドウ関数の場合は引数をとらずウィンドウ範囲内の行に順位などを割り振っていたが、WITHIN GROUP の関数は指定した引数の順位の「値」を返すことになる。


2/15 (日)

[Food] MALINS@六本木

MALINSというフィッシュ & チップスの専門店。 英国国際フィッシュアンドチップス協会公式認定店らしい。

イモはこの前食べたベルギーフリットよりも好みだ。 今度はイモだけ頼もう。


2/14 (土)

[Movie] 劇場版ムーミン 南の海で楽しいバカンス

川崎 TOHO シネマズで『劇場版ムーミン 南の海で楽しいバカンス』(原題:MOOMINES in RIVIRA)を観る。 川崎では TOHO シネマズでのみ上映。

ムーミンパパが「我々はカバではない」と強く言うシーンと、ビキニのフローレンスにムーミンが「やめてよ裸みたいな格好は」というシーンで劇場内に笑いが漏れる。


2/12 (木)

[MyWeb] pib を SEND with Invalidate、Local Invalidate、Fast Register Physical MR に対応させた

pib を Base Memory Management Extensions に対応させた。 具体的には SEND with Invalidate、Local Invalidate、Fast Register Physical MR オペレーションが使えるようになった。 バージョン 0.4.6 に。

この機能追加で SRP と iSER が使えるようになったはずなのだが、SRP と iSER 自身の設定の難しさによって、未だ動作していない。

SRP の設定メモ

現在のところ動作しないが、pib を使って IPoIB が確立している 2 VM 間で、以下ように SRP の接続テストをしている。

SRP Target

SRP Target (ストレージを公開する側)は ib_srpt.ko モジュールをロードする。

# modprobe ib_srpt

1GB のファイルを作って、それを公開することにする。

# dd if=/dev/zero of=/export/raid/fileio.img count=0 bs=1 seek=1G

targetcli パッケージに入っている targetcli コマンドを使う。

# targetcli
> /backstores/fileio create name=f_disk1 file_or_dev=/home/nminoru/fileio.img size=1G
> cd /srpt
> create 0xfe80000000000000000c298fdd750301 このホストの IB ポートの GID を指定する
> cd ib.fe80000000000000000c298fdd750301 上のコマンドを実行すると自動的に作成される
> cd luns
> create /backstores/fileio/f_disk1 0
> cd  ../acls/
> create 0x000c2925551e0301 通信相手の IB ポート の GUID を指定する
> saveconfig
> exit

SRP Initiator

SRP Initiator (公開されたストレージをマウントする側)は ib_srp.ko モジュールをロードする。

# modprobe ib_srp

srptools パッケージをインストールするなら ibsrpdm コマンドが使える。 このコマンドを打つと、InfiniBand サブネット内の SRP Target が表示される。

# ibsrpdm -c
id_ext=000c298fdd750300,ioc_guid=000c298fdd750300,dgid=fe80000000000000000c298fdd750301,pkey=ffff,service_id=000c298fdd750300

この出力結果を /sys/class/infiniband_srp/srp-<hca>-<port>/add_target へ追加する。

# echo -n id_ext=000c298fdd750300,ioc_guid=000c298fdd750300,dgid=fe80000000000000000c298fdd750301,pkey=ffff,service_id=000c298fdd750300 > /sys/class/infiniband_srp/srp-pib_0-1/add_target

2/11 (水)

[Movie] ANNIE アニー

109 シネマズ川崎で『ANNIE アニー』を観る。 ミュージカル映画なのだが、それほど歌って踊るわけではない。 ウィル・スミスも年だし、あまり激しい運動はむりなのか? アニーが福祉局から帰る時に Tomorrow を歌うシーンで、アニーが覗き込むショッピングウィンドウや車のガラスに家族連れが移りこむとか映画的な演出的には面白い箇所が多かった。

エンディングの Tomorrow は平井堅が歌っていたみたいだが、スタッフロールの尺に足らなくて別の曲を継ぎ足していたのだけはどうにかならなかったのかしら?


2/7 (土)

[Movie] チャーリー・モルデカイ 華麗なる名画の秘密

『チャーリー・モルデカイ 華麗なる名画の秘密』(原題 Mordecai)をチネチッタで観る。

作品自体は締りのないコメディーなので退屈だ。 最初に出てきた香港マフィアは偽物を掴ませた落とし前としてチャーリーの指を詰めようとしたのが気になったが、中国系でもヤクザみたいな習慣があるのかしらん。

[Food] つけ麺専門店 三田製麺所@川崎

川崎の銀柳通りに新しくできたつけ麺屋なので行ってみる。 麺がお湯に浸かっている点が新しい。


2/4 (水)

Fast Register Physical Memory Region(FRPMR) と Fast Memory Region(FMR)

pib の iSER & SRP 対応のために FMR 機能を実装しようとしたが、私が FMR と想定していた機能は Fast Register Physical Memory Region(FRPMR)Fast Memory Region(FMR) という別個の機能だったようだ。 両方とも "Fast"、"Memory Region" という語が入っているので迷い易い。

FRPMR にしても FMR にしても、インターフェイスの違いをのぞけば目的・効果は同じ機能である。 従来の Memory Region 機能の不足を補うためにある。 そしてどちらのインターフェイスも今のところカーネルランドからしか使えない。

従来の InfiniBand は RDMA 対象にしたメモリ範囲を ib_reg_mr() を使って登録し、その結果として Memory Region(MR) を割り当ててもらう機能である。 MR は L_Key と R_Key を持っており、RDMA Read/Write 時には R_Key を使って該当するメモリ領域を識別していた。 つまりローカルマシン上でメモリ範囲を ib_reg_mr() → 得られた MR の R_Key をリモートマシンに転送 → リモートマシンからローカルマシンに R_Key を使って RDMA Read/Write という手順になる。 しかし RDMA 対象にしたメモリ範囲を動的に切り替えたい場合、今あるメモリ範囲を ib_dereg_mr() して、別のメモリ範囲を ib_reg_mr() し直すまでは言いのだが、新しく得られた MR には前回とは違う L_Key/R_Key が割り当てられるのでリモートマシンに R_Key を送り直す必要がある。 これは大変面倒だ。

そこで FRPMR や FMR は手順を逆にする。 まずメモリ範囲を指定しないフリー状態の MR を新規に割り当てる。 このフリー MR にも L_Key/R_Key は存在するので、リモートマシンに R_Key を送ることはできる。 ローカルマシンではメモリ範囲をフリー状態 MR に登録することで有効状態の MR を作ることができる。 いったいメモリ範囲が割り当てられた MR は、無効化操作を行うことで元のフリー状態の MR に戻すことも可能だ。

ということで FRPMR や FMR はキーを変更せずに、メモリ範囲だけを切り替えることが可能になっている。 後は FRPMR と FMR は API の違いになる。

FRPMR は InfiniBand Architecture Specification Volume 1 Release 1.2.1 に Base Memory Management Extensions に記載されている機能で、メモリ範囲の割り当てに ib_post_send() に Fast Register Physical MR 操作(IB_WR_FAST_REG_MR) を与えることで行う。 この操作は実際にはパケットを送出することなく HCA のパラメータを変更するだけで完了する。 FRPMR の機能の有無自体は ibv_query_device() の Table 2 に書いた MEM_MGT_EXTENSIONS というビットが立っていれば有効と判断できる。

一方、FMR は仕様書には定義されておらず、機能の有無を表面的に確認する手段はないようだ。 専用の API が用意されており、

機能名 FRPMR FMR
MR/FMR の割り当て ib_alloc_fast_reg_mr() ib_alloc_fmr()
MR/FMR の回収 ib_dereg_mr() ib_dealloc_fmr()
メモリ範囲のマップ IB_WR_FAST_REG_MR を ib_post_send() ib_map_phys_fmr()
メモリ範囲のアンマップ IB_WR_LOCAL_INV を ib_post_send()
あるいはリモートから IB_WR_SEND_WITH_INV を受け取る
ib_unmap_fmr()
その他の API ib_alloc_fast_reg_page_list() IB_WR_FAST_REG_MR で渡す物理ページのリストを作成
ib_free_fast_reg_page_list() リスト構造を回収。
 

2/1 (日)

[Android] Sony Xperia Z3 Tablet Compact

2012年11月に購入した Nexus 7 2012 年モデルだが、OS のバージョンアップの度に速度が低下してアプリを切り替える度に固まるようになった。 メモリが 1 GB しかないのが、昨今の OS とアプリのメモリ量の増大についていけなくなった。

7 インチ、メモリ 2 GB 以上、内蔵ストレージ 32GB 以上、miniSDXC 内蔵可を条件に探して、Sony Xperia Z3 Table Compact を購入した。 Nexus 7 のアプリを全てインストールして同様の使い方をするが全然遅くならない。 やはりメモリ量は偉大だ。 とはいえサイズが 8 インチと縦に長くなり、持って歩くにはちょっと大きい。

[Movie] ビッグ・アイズ

川崎109シネマズで『ビッグ・アイズ(Big Eyes)』を観る。 昨年のティム・バートン展を観に行った時にポスターが展示されていて注目していたが、川崎ではチネチッタではやらないようで上映館は少ないのかも。

実話を忠実に再現したとあるが、ウォルター・キーン

隣のおじさんいびきをかいて寝ているので辛い。


先月の日記(2015年01月) 今月の日記(2015年02月)
2002 | 10 | 11 | 12
2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2014 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2015 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2016 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2017 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | Google+
slideshare | github | Qiita


Written by NAKAMURA Minoru, Email: nminoru atmark nminoru dot jp, Twitter:@nminoru_jp