ブロックサイズについて尋ねてみた

はじめに

先日のulimitコマンドに関する記事で、ブロックサイズなんてものが登場したのですが、「ググってもよくわからんお(^q^)」ってことになったので、職場の先輩に聞いてみました。

ブロックサイズはトロッコの大きさと考える

私が尋ねた先輩も、昔よくわからなくて先輩に聞いたことがあるそうなのです。みんな通る道なのでしょうか。

で、その時聞いた例え話というのがトロッコなんだそうです。

例えば、ブロックサイズ1024というのは、トロッコにりんごが1024個入るということなのです。トロッコのサイズは自由に指定できます。なんとなく1024とか決まった数字があるのかなって思ってたんですけど、そんなことはないようです。(データベースのサイズ指定とかよく1024って例文見るし、暗黙の了解的な感じでサイズの指定方法も決まっているのかなーって...)

そして、500個のりんごは1024サイズのトロッコ1つで十分です。1024 - 500 = 524となるように、まだ524個も入るという、もったいない状況ではありますが、1つで十分です。

ブロックサイズはでかけりゃいいってものではない

「えっ、じゃあ10000とかでっかいトロッコにすれば毎回1つのトロッコでよくない!?」って思いますよね。私も思いました。

では、パケット...説明上のトンネルを登場させましょう。トンネルよりでかいトロッコはサイズを小さく...というよりはオリジナルサイズを分割してロッコの全てを通過させなくてはいけません。

では500個のりんごを積んだ10000サイズのトロッコを1000サイズのトンネルに通します。どうなるでしょうか。

先ほど太字で強調した、ロッコの全てを通過させることを想定すると、10000 / 1000で、10000サイズのトロッコは1000サイズのトンネルを10回に分けてつうかしなくてはなりません。りんごは500個だから、実際の中身は1回で済むのに、トロッコのせいで無駄な回数増えます。トンネルはパケットの比喩なので、無駄な通信が増えるということになります。(無駄と言い切っていいのかはちょっと曖昧ですが...)

ここでトロッコのサイズが700だったとしたら...りんごは全部入るしトンネル通過も1回で終わります。なんでもでかけりゃいいってもんではないようです。大は小を兼ねるとはいいますが...それでも適切なサイズというものがあります。

ですから、通信とかそのへんを考えるときはこういう考え方が重要になってくるそうなのです。私はまだ仕事でそこまで考えたことはないのですが...

完全に理解できたわけではないのですが、なんとなくつかめた感じはします。(トンネルのくだりは先輩からの説明には登場しなかったので私の思い込みかもしれません...)