专栏首页北京马哥教育4KB 扇区磁盘上的 Linux:实际建议

4KB 扇区磁盘上的 Linux:实际建议

为何更改为 4096 字节扇区?

如果您熟悉磁盘结构,就知道磁盘是被分解成扇区 的,大小通常是 512 字节;所有读写操作均在成倍大小的扇区中进行。仔细查看,就会发现硬盘事实上在扇区之间包括大量额外数据,这些额外字节由磁盘固件使用,以检测和纠正每个扇区内的错误。随着硬盘变得越来越大,越来越多的数据需要存储在磁盘的每一单位面积上,导致更多低级别错误,从而增加了固件纠错功能的负担。

解决该问题的一个方法是将扇区大小从 512 字节增加为更大的值,以使用功能更强大的纠错算法。这些算法可使每个字节使用较少的数据,从而比使用 512 字节扇区能纠正更多严重问题。因此,更改为较大尺寸的扇区有两个实际好处:提高可靠性且增加磁盘容量 — 至少从理论上讲是这样。

不同于增加的显示器大小或提高的中央处理单元(CPU)速度,对终端用户的现实获益可能没有这么明显。不过,专用于奇偶检验的空间减少了,可能加快较大磁盘的引入或提高磁盘可靠性。

遗憾的是,关于 512 字节扇区的假设潜藏在整个软件链中,在基本输入/输出系统(BIOS)、引导装载程序、操作系统内核、文件系统代码和磁盘工具等工具中。尽管向 4096 字节扇区的转变已经酝酿了多年,有些工具仍未做好准备。Microsoft? Windows? XP 经常被提出有故障隐患,即使在 Linux 中,有些问题也只是暂时得到纠正。

为帮助实现这种过渡,带 4096 字节分区的第一批磁盘将每个物理 扇区转换成 8 个 512 字节的逻辑 扇区。对于 BIOS、操作系统和所有磁盘工具,磁盘看起来有 512 字节扇区,但实际上底层物理扇区大小是 4096 字节。Western Digital 是第一家生产这种磁盘的制造商,它使用术语 Advanced Format 来代表带 4096 字节物理扇区且向 512 字节逻辑扇区转换的磁盘。本文对 Western Digital 的磁盘和使用类似技术的其他制造商的磁盘都使用同一术语。

回页首

为何有性能影响?

遗憾的是,在固件中改变表面扇区大小会降低性能。要了解个中原因,首先应了解文件系统数据结构以及如何进行磁盘分区。

最新的文件系统使用 4096 字节或更大尺寸的数据结构。因此,大部分磁盘 I/O 操作占用成倍数量的大小。想一下,当 Linux 想在一个带 4096 字节扇区的新磁盘上读写这些数据结构时,会发生什么事情。如果文件系统数据结构正好与底层物理分区大小一致,对 4096 字节数据结构的读写会产生对单一扇区的读写。硬盘的固件不需要做任何特别的事;但是当文件系统数据结构与底层物理扇区不完全一致时,读写操作必须使用两个物理扇区。对于读操作,这基本上不会花费很多额外时间,因为磁盘上的读/写头极可能连续通过两个扇区,且固件可丢弃它不需要的数据。另一方面,对不一致数据结构的写操作需要磁盘的固件首先读取两个扇区,修改两个扇区的分区,然后写两个扇区。该操作所需时间比 4096 字节占用一个扇区时所需时间多。因此,性能下降。

如何判断数据结构是否得到合理对齐? 大多数文件系统将其数据结构与包含其本身的分区开头对齐。因此,如果一个分区起始于一个 4096 字节(8 个扇区)边界,则表示它得到合理对齐。遗憾的是,直到最近,大多数 Linux 分区工具还没有创建以这种方式对齐的分区。下一小节 对齐分区,描述如何使用普通 Linux 分区软件对齐分区。

回页首

基准测试结果

您可能不了解合理的分区对齐有多重要。为此,我们对已对齐和未对齐分区以及若干 Linux 文件系统使用了一个 1TB Western Digital WD-10EARS Advanced Format 驱动。磁盘是通过全局唯一标识符(GUID)Partition Table (GPT) 系统进行分区的,其中已对齐的分区起始于逻辑扇区 40,而未对齐的分区起始于逻辑扇区 34(使用 GPT 磁盘与默认大小的分区表时的第一个可用扇区)。受测试的文件系统是 ext3fs、ext4fs、ReiserFS(第 3 版)、JFS、XFS 和 Btrfs。计算机运行一个 64 比特 2.6.32.3 Linux 内核。

一个脚本执行了一系列磁盘 I/O 操作,包括创建一个新文件系统、提取一个未压缩的 Linux 内核原始码到测试驱动上、复制原始码到驱动、读取测试驱动上刚才未压缩的文件、从驱动上读取原始码、删除 Linux 内核目录。源 Linux 内核原始码存储在另一个磁盘上,对于读测试,输出指向 /dev/null。在每个写测试之后,测试磁盘被卸载,以确保在 Linux 的磁盘缓存中没有操作。所报告的数字包括执行卸载操作所需的时间。内核原始码的大小是 365MB — 远远大于磁盘 64MB 的缓存。每个测试序列对每个文件系统运行 6 次,对合理对齐的分区运行 3 次,对未合理对齐的分区运行 3 次。隔次操作的变动很小。用平均未对齐时间除以平均对齐时间所得的值来确定所应用的不合理对齐对性能的影响程度。大于 1.00 的值表示不合理对齐产生一些性能损失。

许多测试产生适度的损失。针对文件系统创建的值介于 0.96(对于 XFS)到 7.94(对于 ReiserFS)之间,平均值为 2.79。由于文件系统不常创建,所以该损失不是那么重要。读测试生成的值介于 0.95 到 1.25 之间,这表示速度损失不超过 25%,如图 1 中所示。值为 1.00 时表示没有损失;更高的值则意味着性能下降。

图 1. 使用未对齐分区的读性能损失

大型文件写性能也受到适度损失。这些值介于 1.10(对于 XFS 和 JFS)到 6.02(对于 ReiserFS)之间,平均值为 2.10。一般情况下该值较高都归咎于 ReiserFS 的敏感性。删除它之后,其余 5 个文件系统的平均值为 1.31。文件检测效果类似,从 1.04(对于 XFS)到 4.78(对于 JFS),平均值为 1.97。将 JFS 作为离群值删除之后,平均值变为 1.40。

小型文件创建操作会产生最大的写性能影响(提取内核原始码)。对原始码提取的影响范围为 1.04(对于 ext4fs)到 25.53(对于 ReiserFS),平均值为 10.9。该测试中第二大性能影响者是 XFS,值为 1.82。由于这些数字是未对齐性能与对齐性能之比,值为 10.9 时表示一个原始码提取在合理对齐的分区上需时 10 秒,而在未合理对齐的分区上需时 109 秒 — 一个巨大的差别!对于 XFS,值为 1.82 时表示这个 10 秒钟的操作在未合理对齐的分区上需要花 18.2 秒的时间。

图 2 总结了所有文件系统的这些写性能损失。与前面相同,值为 1.00 时表示没有性能损失;更高的值表示性能下降。

图 2. 使用未对齐分区的写性能损失

注意,这些测试不反映文件系统的总体性能。例如,您不应该因为 ReiserFS 产生一些最大的性能差异,就认为它对性能的影响不好。不过,ReiserFS 对不合理的对齐比其他文件系统更敏感。

除了在分区中对文件系统运行测试之外,在一个 LVM 配置中还对文件系统执行了抽样检查,不管 LVM 分区是否经合理对齐。这些结果类似于原始分区结果。

实际情况是,到底这一切意味着什么?您应该首先确定您磁盘的物理扇区大小。如果您有 Advanced Format 驱动,就应该合理对齐您的分区。

回页首

确定物理扇区大小

从理论上,Linux 内核应该在 /sys/block/sdX/queue/physical_block_size pseudo-file 中返回物理扇区大小相关信息,在 /sys/block/sdX/queue/logical_block_size pseudo-file 中返回逻辑扇区大小相关信息,其中 sdX 是您设备的节点名称(通常为 sda、sdb 等)。但是在实践中,物理块大小信息是假的,至少对于第一代 Western Digital Advanced Format 驱动是这样的。遗憾的是,这表示磁盘工具不能合理检测这种磁盘的存在。

那么从实际来看,您必须在制造商的 Web 站点或通过其他方式查找您的驱动的规格。/sys/block/sdX/device/model 伪文件含有设备型号,因此您可以在这里查找,然后与制造商核对。

对于目前的第一代 Advanced Format 驱动,Western Digital 在驱动上贴有标签,以表明它们是 Advanced Format 驱动。遗憾的是,这些标签表示,只有 Windows XP 上的这些驱动有问题。以上基准测试结果显示,Linux 用户必须非常谨慎地对待这些驱动。

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2014-08-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • shell十三问,为linux学习打基础(一)

    本文整理并转自CU上的帖子[学习共享] shell 十三問?,此贴是2003年发表的,但却是相当不错的linux基础知识汇集贴,原帖主使用的台湾风格,本文加以简...

    小小科
  • 史上最全的Python面向对象知识点疏理

    ? 面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。class 类变量:类变量...

    小小科
  • Linux性能调优,从优化思路说起

    Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的apache、tomcat、mysql、php等...

    小小科
  • DG、ADG、OGG的解析

    以oracle 11G版本为准进行解析 Data Guard Architecture Overview (Data Guard架构概述) Data Guard...

    孙杰
  • 数据库的基本构成和原理

    数据库包含的种类: 广义数据库:Oracle,Mysql,PostgreSQL,Redis,Hbase 应用场景 比如说,电商网站:用户账号信息,商品信息...

    运维小白
  • 云计算对BAT来说是一次飞跃

    云时代的来临,对BAT来说是一次飞跃。百度,阿里、腾讯借助其产业优势以云计算为核心技术发展在行业中占尽先机。那么,云时代只属于BAT吗? 不容置否,云时代的到来...

    静一
  • 批处理中的IF详解

    这种用法现在很少用了,因为它需要使用到CHOICE命令,这个命令现在被set /p代替了,它是判断CHOICE命令选择的选项的,CHOICE命令是一个提供选项功...

    HUC思梦
  • SharePoint 2013混合模式登陆中 使用 自定义登陆页

    接前一篇博客《SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用》,当...

    用户1161731
  • 千万别以为自动化测试多容易,看看这五个灵魂拷问,是你你也懵

    说起自动化测试,在这个软件吞噬世界的时代里,早不是什么高端技术了。从基本的单元测试,到复杂的系统测试,几乎都可以使用自动化测试来代替原本的手动测试。

    博文视点Broadview
  • 环境与工具篇:建立高效的macos环境

    你的工作与生活离不开电脑,电脑是一个工具,也是一个环境。环境是不是绿水青山,是不是得心应手,这是很重要的事情。小程平时使用macbook来学习跟娱乐,最近重装了...

    用户5021203

扫码关注云+社区

领取腾讯云代金券