zfs的写性能很差,zfs on linux 上的写性能个人感觉更差。 而且这种差很难修改,原因是由于在linux内核当中,在zfs当中,对于一个4k块大小的块设备,如果你要重写一个2k的块,你可以发现大量的读操作从内核的上层发起。操作如下
$dd if=/dev/zero of=/dev/zd0 bs=2k count=10000
造成大量的读的原因很简单 由于你要2k,2k的写,而真正的zfs 的块设备块大小为4k,所以他会发起一个读取整个块的操作,从磁盘上读一个4k上来,然后将2k的数据写入这个块上,然后将这个新的4k,封装好bio,以request的形式往底层传递。这样zfs看到的只是一个普普通通的读请求,而无法知道这个请求是异常的为了凑齐的读请求还是什么别的目的的读请求(这个读请求还是有作用的)。
但是我发现的结果却是zfs要么读,读的时候并没有写磁盘的操作发生。这个就很可疑了,我通过阅读代码也没发现这个原因是什么。
阅读(3929) | 评论(0) | 转发(0) |