[原创](翻译)FreeBSD下对Raid、SSD和4K设备用分区对齐来提升性能_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3024 | 回复: 0   主题: [原创](翻译)FreeBSD下对Raid、SSD和4K设备用分区对齐来提升性能        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2015-7-23 15:06:45 | [全部帖] [楼主帖] 楼主

原地址

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/sec316 MiB/sec266 per sec
对齐366 MiB/sec388 MiB/sec334 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性能,并且来验证一下对齐所带来的性能是否跟预期的一致。最好在你开始个性调整和安装其他系统之前做完这些事。



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论