zfsでブロックサイズを小さめに設定した方がいいんじゃないかというページがあったので、まずは自分のメールボックスがどうなってるか調べてみた。

ファイルのサイズをリストする。

env LANG=C find . -type f -ls | awk '{print $7}' > /tmp/sz

サイズの対数をとる。底2できりあげ。ceil()がなかったので1よりちょっと低い値を足して切り捨て、で代用。

awk '{print int(log($1)/log(2)+0.999999)}' /tmp/sz > /tmp/logsz

度数分布ももとめる。

 sort -n /tmp/logsz | uniq -c | awk '{print $2 " " $1}' > /tmp/mail-size.dat

あとはgnuplotでグラフにするだけ。

% gnuplot
> set log y
> set grid
> set xtic 1
> set xrange [1:]
> plot "mail-size.dat" with step
> set terminal png size 600,400
> set output "mail-size.png"
> replot

累積度数はこんなかんじで計算。

awk '{sum += $2; print $1 " " sum}' /tmp/mail-size.dat >/tmp/mail-size-acc.dat

横軸が log2 したメイルのサイズ、縦軸がメイルの数。左のグラフが度数分布、右は累積したもの。

mail-sizemail-size-acc

これをみたかんじだと2^14=16KiBくらいのブロックサイズにするとちょうどよさそうだ。