Hi! I’m clsung

Hi! I’m clsung

clsung’s blog site

Hi! I’m clsung RSS Feed
 
 
 
 

Suggested block size for a frequently updated postgresql database on FreeBSD

block size/fragment size 用 1M/128K?有沒有搞錯啊!

當然是有啦,Oliver Fromme 的建議是:

In fact,
I wouldn’t trust anything other than 16K/2K and 8K/1K to
work reliably under load. I also remember Matt Dillon
mentioned that larger block sizes are less-than-optimal
for the VM system. … I recommend you leave the bsize
and fsize at the default 16K/2K

有個有趣的問題,一般使用者會不會去注意到 block/fragment/inode size 的差別呢?

以下的預設值是以 FreeBSD 6.0 來看的:

先講 block/fragment size:

block size:一次讀取檔案時所存取的資料量大小。這裡講的 block size 不是實際上磁碟機所讀取的 block 大小,而是 OS kernel 在處理檔案時的 block 大小(或說是 logical block size)。block size 設的愈大, kernel 一次讀的資料量也愈大,若是在存取大檔案的時候就愈快囉。預設是 16384 (bytes),最小不可低於 4096 (bytes)。

fragment size:因為你不可能每個檔案都剛剛是 block size 的倍數,所以 fragment 就派的上用場啦。假設你的 block size 設 4K (4096 bytes),那有個檔案是 4608 bytes,要是只有 block 的話,你就得用兩個 block 去存這個檔案,也就是用了 8192 bytes 去存一個只比一半大小多一點的檔案。運氣不好的話,你的檔案都是這類大小,那麼你的硬碟就浪費快一半的空間啦。那有了 fragment,就可以分擔這種風險,若 fragment size 為 512 bytes,那麼剛剛那個檔案只用了一個 block 加上一個 fragment 就可以儲存啦。
預設是 2048 (bytes),可容許的最小值是 512 (bytes);其實這是因為大小限制在 blocksize/8 到 blocksize 之間。不過除非你的檔案都是超大的,不然 fragment size 設的與 block size 一樣大(這樣應該是會比較快啦)實在沒意義。

所以我們大概可以知道一個通則:block/fragment size 愈大愈快,愈小愈省空間(反之就是各自的缺點啦)。(這裡的 / 不是比例哦)
在 newfs 的 manpage 裡,建議的 block/fragment 比例是 8:1。

再來就是 inode size:

inode:記錄個別檔案的相關資料(像 owner、group、存取權限等等),還有這個檔案在檔案系統的哪裡(靠 inode number 或說是 file serial number)。
inode size:這裡講的不是一個 inode 有多大啦(真要問的話,好像是 128 bytes?),它表示檔案系統內,多大(通常是以 bytes 為單位算)的資料空間(data space)要給一個 inode 記錄它。

所以呢,比較起來 inode 和 block/fragment 比較沒有直接的關係,當然你在規劃硬碟時,這些都是你要考慮的因素啦,很久以前幾篇關於 inode 與 bbs 的古文(快十年了算可以作古了吧)可以參考一下(本文是在 tw.bbs.comp.386bsd 裡,不過現在只存在各 bbs 的精華區裡吧)。

Leave a Reply

噗浪:

  • clsung 說 該來休息了 9 小時 之前
  • clsung 說 本週最後一個上班日囉 18 小時 之前
  • clsung 說 今天 2940, 看來昨天有量錯, 因為前天 2830, 昨天竟然報 2760 .... 2010-03-18

分類

Flickr

    clsung. Get yours at bighugelabs.com/flickr

Blogroll

    馬的警總回來了