原地址FreeBSD下对Raid、SSD和4K设备用分区对齐来提升性能
注:下面这些命令在下面系统中测试通过:FreeBSD9.1,FreeBSD9.2,FreeBSD10.0以及FreeBSD10.1。
默认情况下,FreeBSD安装程序不会对下面的设备进行正确的分区对齐:Raid阵列、SSD、或其他4K设备(有时叫AdvancedFormat)。
在应用这些设备的时候,这将导致一个突出的性能问题,因为一个系统层面的I/O操作,在磁盘或控制器上将被转化为两次或更多次的操作,并且这些操作是毫无意义的。
如上图片示,当中一个USF block处于两个Raid block中间,这样的结果中:操作系统中的一个OS block,将在产生四次I/O操作。
(译注:比如UFS读一次,将被分成raid中的两次读,而每次Raid读操作,要分别在两个磁盘上再产生一次读操作,由于就UFS的一次读写,就被放大为磁盘上的四次读写)
对于分区对齐所有下层设备边界的情况下,设备block浪费的I/O将被减半。对于Raid控制器来说,这意味着strip size和下层磁盘的block sizes,对于SSD和其他AdvancedFormat磁盘来说,这就是block size(一般是4K):
当分区对齐时,你会发现一次操作仅产生了一次Raid I/O操作。
其中关键的边界问题:文件系统(OS),Raid阵列的strip size(如果你使用raid的话),以及最终的磁盘物理block size。
这里有一个简单的性能对比表,系统为:FreeBSD9.0;存储系统是:LSI 3ware 9750-8i,六块6Gb/s的SATA磁盘,RAID10:
分区 | 写速度 | 读速度 | 随机寻道 |
未对齐 | 250 MiB/sec | 316 MiB/sec | 266 per sec |
对齐 | 366 MiB/sec | 388 MiB/sec | 334 per sec |
在上面的示例中,我们能看到提升的比例:写46%,读22%,以及25%的寻道。
好消息
幸运的是,我们可以在安装过程中直接对齐分区。
在这个教程中,我们将在FreeBSD的Installer中,手动创建一个GPT分区表,再创建我们需要的对齐分区,然后再格式化我们的root文件系统。
第一步:启动FreeBSD安装程序
按正常步骤启动FreeBSD的安装程序。当被问到你想怎么样对磁盘进行分区时,选择:“Shell”:
第二步:设置分区
一旦进入shell,执行下面的命令对两块磁盘设置GPT分区和Slice。
这些示例假设你的磁盘“da0”(SCSI)使用了1MiB的对齐。关键的操作是-a参数,它的作用是对UFS分区指定对齐点(开始和结束会同时指定)。我们推荐1Mib对齐是因为这不仅适用于4K设备,并且可以适用于其他任何RAID strip size不大于1MiB的设备。这将会导致在磁盘的结束有少量的剩余空间——这也有一个好处,就是当你更换磁盘的时候,可以选择这段空间更少的厂家。
# ---- Setup the GPT and partitions
gpart create -s gpt da0
gpart add -s 128k -t freebsd-boot -l boot0 da0
gpart add -a 1m -s 8G -t freebsd-swap -l swap0 da0
gpart add -a 1m -t freebsd-ufs -l root0 da0
# -- Install boot code
gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da0
你会注意到:我没有对boot和swap分区对齐,这是因为它们不是“真正的”拥有blcks的文件系统。另外如果你使用了单独的/var、/usr、/tmp等分区,你要使用-a参数来进行对齐。
第三步:创建并挂载Root(/)文件系统
我们在这里格式化root文件系统,启用soft update(-U)功能。我还使用了“-L root”来标识这个文件系统,但这不是必需的。然后,我们把这个新的文件系统挂载到/mnt(这就是安装程序所需要的目标文件系统)。
如果你使用的是SSD,在newfs时需要再添加一个-t 参数,用来启用TRIM功能,像下面的例子:
# -- For HDDs:
newfs -U -L root /dev/da0p3
# -- For SSDs:
newfs -t -U -L root /dev/da0p3
mount /dev/da0p3 /mnt
到这儿,我们需要创建一个fstab文件,把它放到安装程序需要的位置:
vi /tmp/bsdinstall_etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/da0p2 none swap sw 0 0
/dev/da0p3 / ufs rw 1 1
exit
离开分区shell,并且继续安装:
第四步:继续安装
对,像正常安装一样,继续剩下的安装步骤就行了。
后续的考虑
如果你正在使用RAID阵列、SSD或者其他4K设备来安装FreeBSD,我强烈建议安装用几个像bonnie(在ports里)的工具,用来测试I/O性能,并且来验证一下对齐所带来的性能是否跟预期的一致。最好在你开始个性调整和安装其他系统之前做完这些事。