存储基础:磁盘 IO 为什么总叫你对齐?

‍‍

来源 | 奇伢云存储

头图 | 下载于ICphoto

存储 IO 重要的一个知识点

划重点:存储 IO 要对齐。

资深存储人员为啥总叫你注意 IO 对齐的?机械磁盘 IO 为什么要 512 对齐呢,SSD 盘为啥要 4K 对齐?不对齐又会如何?

重要的知识点

  1. 机械盘的 IO 要扇区对齐(绝大部分的扇区是 512 字节大小),磁盘的读写最小单元就是扇区;

  2. SSD 盘的 IO 要 4K 对齐,SSD 盘的读写单元是 page,一个 page 为 4K 大小;

如果不对齐,会有问题问题?

  1. 性能极差;

  2. SSD 寿命缩短;

那你就会想了,出现这个问题的原因又是啥?

本质原因是内部 IO 流量和次数的放大。

那你又会想了,怎么会这样呢,我不就写 1 个字节数据而已嘛,放大个啥?

这个秘密就在于前面提到的,机械盘和 SSD 盘的 IO 都有最小单元的概念。机械盘是以扇区为最小的空间单位,SSD 盘则是 4k 的 page 作为 IO 的最小单元。所以当在机械盘上读 1 个字节的数据,本质上是至少读一个扇区,写 1 个字节则更复杂,先要把这个扇区读出来,然后在内存里 update,最后又把这个扇区写回到磁盘。

你可能又有疑问了:为啥机械盘和 SSD 盘都要按照一个单元来管理呢,为啥不 1 字节 1 字节管理呢?如果这样的话,业务读写不就方便了嘛。

答案是:开销。 考虑以下两个方面:

  • 第一个是存储的开销:数据存储到磁盘上还有 SSD 盘上是会有校验的(比如 ECC 校验),如果每个字节都对应一个校验,存 1T 的数据有 1T 的校验?那这个存储开销无比的大。那如果是现在 512 字节对应一个 1 字节的校验,则开销完全可控;

  • 第二个是性能的开销:物理硬件是跟真实世界的设计匹配的,对于机械磁盘的写是利用磁化介质来存储数据,如果磁盘上是1 个字节,甚至 1 个 bit 来独立存储,那磁盘磁头的次数将无比庞大,性能也将无比的下降(每一次都是写数据+校验)。SSD 的写则更复杂,因为 SSD 由于自身的存储特点,是无法覆盖写的,每次写都是写新位置,旧的位置则是作为垃圾等待后台 GC ,粒度太小则会导致擦写的次数无比的多,性能和寿命都将不可接受;

所以说,在综合因素的权衡下,硬件对于空间管理会划分固定单元,并对 IO 也提出单元对齐的要求。至于磁盘固定单元为 512 字节,SSD 的 IO 单元为 4K 则是经过综合的科学测试和验证的一个数值而已。

举个不严谨的例子

在京东上买东西,你买 1 块钱的货,京东要收费 7 块的运费。对你来讲是不是划不来?因为对京东来讲,如果真是单独送你这 1 块钱的东西也划不来。所以京东要你买的东西满 79 元才给你免运费。

如果说真的有个愣头青,每次都单独买 1 块钱的货,买它 100 次,划得来来不?

当然划不来,运费都要 700 了,加上货本身,总费用 800 元(哈哈,可能京东被你折腾的更惨)。

那如果是 1 次买 100 件这个货呢?

你只需要 100 块。

所以,你再思考下为什么磁盘本身一定有固定大小的存储单元,通俗话叫做:量大从优,专业一点叫做:减少边际效应。

对齐有哪些方面

对齐其实很简单,只有两个维度:

  • 偏移对齐

  • 长度对齐

是不是很简单呀。偏移和长度就是我们常说的 offsetlength,对齐通常就是既要保证偏移对齐也要保证长度对齐。

IO 读写的真实样子

下面以机械盘扇区对齐和非对齐的举例。为了简化,以下例子讨论的的对齐都是偏移和长度双重对齐的。

 1   扇区对齐场景

场景:读 512 个字节数据是怎么做的?

步骤如下:

  1. 磁头摆到指定偏移;

  2. 读取一个扇区的数据到内存;



开销:只需要一次磁盘读 IO。

场景:写 512 个字节数据是怎么做的?

步骤如下:

  1. 磁头摆到指定偏移;

  2. 覆盖写一个扇区的数据到磁盘;



开销:只需要一次磁盘写 IO。

 2   扇区非对齐场景

场景:读 1 个字节数据是怎么做的?

步骤如下:

  1. 磁头摆到这 1 个字节数据所在扇区位置,对齐到扇区开始的偏移;

  2. 读取 1 个完整扇区( 512 字节)的数据到内存;

  3. 从这 512 字节的内存中,copy 出用户要用的 1 个字节,给到用户;



开销:读放大。如果是读 512 字节的数据,但是偏移不对齐,那么可能导致 2 次 IO。

场景:读 512 个字节,但是偏移不对齐?

步骤如下:

  1. 磁头摆到这 512 个字节数据所在 2 个扇区位置,对齐到扇区开始的偏移;

  2. 读取 2 个完整扇区(1024 Bytes)的数据到内存;

  3. 从这 1024 字节的内存中,copy 出用户要用的 512 个字节,给到用户;



开销:读放大。虽然读的是 1 个扇区的数据,但是偏移却没对齐,所以必须要读 2 个扇区,也放大了一倍的流量。

场景:写 1 个字节数据是怎么做的?

写是比较复杂的,用户现在手握 1 个字节的数据,想要写到磁盘,但是磁盘的 IO 单元是扇区,所以本质上是读改写的方式。步骤如下:

  1. 先要把这要改动的 1 字节所在的扇区完整的读到内存;

    1. 磁头摆动到扇区偏移;

    2. 读一个扇区,读到内存;

  2. 然后在内存中,把这 1 个字节对应的位置的数据修改;

  3. 然后重新写回扇区;

    1. 磁盘寻道道扇区偏移;

    2. 覆盖写着一个扇区;



开销:一次磁盘读 IO,内存合并,最后再一次磁盘写 IO。明明是写,却必须要先读,IO 即放大了流量,又放大了次数

所以你看出来了吗,非对齐的 IO 多了很多步骤。存在 IO 流量和次数的放大。这样会极度拖累性能。

本来只需要一次 IO 就能完成的操作,放大了一次,那么性能就至少下降一倍。就这么简单。

场景:写 1 个扇区的数据,但是偏移不对齐会怎么样?

操作步骤

  1. 读 2 个扇区的数据(1024 Bytes)上来;

  2. 合并内存中的数据;

  3. 把这 2 个新的扇区数据,写到磁盘;



开销:所以,我们看到由于不对齐,读的时候导致多读了一个扇区,写的时候导致多写了 1 个扇区。性能自然是极差的。

经常被忽略的事

 1   IO 的代价比你预期的要大

机械盘来说,随机 iops 就是几百的样子,带宽也就几百兆。一次寻道都是 10ms 级别的。所以磁盘读写数据的代价远比你想象中的大。

这个有多慢?cpu 执行指令都是纳秒和微秒级别的,一次 IO 性能和 cpu 或者内存的操作相差十万百千里。所以,但凡你能省 1 次 IO 都是非常大的性能提升。

而对于 SSD 来说,如果你 IO 不对齐,很有可能峰值能跑 5 万 iops 的盘只能跑 2 万甚至更低。大家一定要有个意识:IO 能节省就节省,多一次 IO 性能可能慢 1 倍。

 2   为什么我编程的时候从来不需要注意对齐?

这个时候你可能反问了,我读写文件从没考虑过对齐的问题呀?

是的,你是没考虑过,那是因为有一个苦逼帮你把这个活干了,谁呢?

文件系统。这个世界并不简单,只是有人替你负重前行。

绝大部分的程序员都是基于文件系统之上操作磁盘。文件系统则会使用 buffer cache 自动帮用户对齐 IO ,然后再下发磁盘。一旦你想要深入优化 IO 的性能,IO 对齐一定是第一道要考量的坎。

还有一点要特别注意,一个特别重要的环节:文件系统格式化化的时候。

格式化的时候,一定要注意对齐。 格式化文件系统的时候,一定要注意对齐的偏移,不要故意搞成非对齐的偏移,不然一旦文件系统格式化的时候都不对齐,后面谁也救不了,除非你重新格式化文件系统。

举个例子,本来文件系统从偏移磁盘 0 这个位置格式化,你偏不,你偏要从 3 字节偏移的位置开始格式化。那后面的所有的貌似对齐的 IO 偏移都将是不对齐的,性能也自然是下降的。

总结

  1. IO 对齐是做存储必须要考量的一个因素;

  2. IO 对齐的两个核心是:偏移和长度;

  3. 非 IO 对齐的请求会导致内部 IO 流量和次数的放到,从而性能下降(SSD 则会因为放到而导致擦写次数过多,更会影响寿命);

  4. 程序员一般很少要主动对齐,因为文件系统帮你 hold 住了一层。但是如果程序员自己不注意,还是会踩坑。比如明明是 SSD 盘,你偏要每次发送 512 字节的 IO 请求,那性能肯定惨不忍睹;

  5. 对齐的 IO 简简单单,不对齐的 IO 千奇百怪。

更多精彩推荐
☞5G、射频、奥特曼,这仨有联系吗?☞再见 Nacos,我要玩 Service Mesh 了!☞急!CPU 被挖矿,该怎么找进程?☞立即生效!帕特·基辛格卸任 VMware 所有职务☞云原生除了K8S、微服务,还有...?
点分享点收藏点点赞点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何理解这6种常见设计模式?

简介: 设计模式能够帮助我们优化代码结构,让代码更优雅灵活。有哪些常见的设计模式?如何合理运用?本文分享作者对工厂模式、单例模式、装饰模式、策略模式、代理模式和观察者模式的理解,介绍每种模式的模式结构、优缺点…

构建在线教育弹性高可用视频处理架构实战

简介: 对于负责建设视频处理系统的技术团队而言,这样的业务场景就留给了他们一系列的挑战。 前言 近些年,在线教育行业飞速发展,为整个社会的知识传播提供了前所未有的便利性。通过多种形式的在线教育平台,学员与教师…

一文解开java中字符串编码的小秘密

简介: 在本文中你将了解到Unicode和UTF-8,UTF-16,UTF-32的关系,同时你还会了解变种UTF-8,并且探讨一下UTF-8和变种UTF-8在java中的应用。 简介 在本文中你将了解到Unicode和UTF-8,UTF-16,UTF-32的关系,同时你还会了解变种UTF-8&…

Gartner数据劲爆:阿里全球第三,华为中国第二!

看了一份数据,非常振奋人心,给大家分享一下。国外著名信息分析公司 Gartner,4月21号发布了一份数据,瞬间引发了朋友圈是刷屏。这份数据是讲什么的呢?云计算!可能由于疫情,很多公司上云的热情变得…

程序员:写作能收获什么?

简介: 很多程序员已经通过自己的个人博客或者公众号来进行技术沉淀,记录自己的成长。越来越多的程序员们也开始意识到了写作的重要性。程序员为什么需要写作?写作能带来什么收获?又有哪些额外的惊喜?本文介绍三位长期坚…

腾讯云~Redis6.2.6 伪集群 哨兵模式_搭建

文章目录一、redis准备3节点1. 创建目录2. 节点1~配置3. 节点2~配置4. 节点3~配置5. 启动redis二、新增sentinel配置1. sentinel_01.conf2. sentinel_02.conf3. sentinel_03.conf4. sentinel 启动5. sentinel 监控6. 哨兵验证一、redis准备3节点 1. 创建目录 mkdir /usr/loca…

教你 4 步搭建弹性可扩展的 WebAPI

简介: 本文整理自《Serverless 技术公开课》,关注“Serverless”公众号,回复“入门”,即可获取 Serverless 系列文章 PPT。 作者 | 萧起 阿里云云原生团队 本文整理自《Serverless 技术公开课》,关注“Serverless”公…

从 0 到 1,高德 Serverless 平台建设及实践

来源 | Serverless作者 | 邓学祥头图 | 下载于东方IC导读:高德从 FY21 财年开始启动 Serverless 建设,至今一年了,高德 Serverless 业务的峰值超过十万 qps 量级,平台从 0 到 1,qps 从零到十万,成为阿里集团…

看动画学算法之:排序-快速排序

简介: 快速排序也采用的是分而制之的思想。那么快速排序和归并排序的区别在什么地方呢? 归并排序是将所有的元素拆分成一个个排好序的数组,然后将这些数组再进行合并。 而快速排序虽然也是拆分,但是拆分之后的操作是从数组中选出一…

思考、创新、坚持——阿里做了七年前端,我的成长经验分享

在成长的未知道路上,我们总会遇到各种各样的问题,但是,所有的迷茫与逆境都能够帮助我们成长,我们要抓住每一个机会让自己进步,而不是徘徊不前。 淘系前端开发同学——林晚,今天就来和大家分享他这七年的成长…

存储进阶:怎么才能保证 IO 数据的安全?

来源 | 奇伢云存储头图 | 下载于视觉中国写成功了数据就安全了吗?思考一个问题:写数据做到什么程度才叫安全了?就是:用户发过来一个写 IO 请求,只要你给他回复了 “写成功了”,那么无论机器发生掉电&#x…

设计稿生成代码与 Serverless 的前世今生与未来!

简介: 云栖大会云上 Hello World 活动火热进行中!每位参与者都可收获一份阿里云出品的全球唯一序列号纪念证书! 一场脑洞实验 云栖大会云上 Hello World 活动火热进行中!每位参与者都可收获一份阿里云出品的全球唯一序列号纪念证…

ARMS在APM工具选型中的实践

简介: 当前的系统在数字化转型需求以及互联网架构实施的影响下,越来越普遍地使用了微服务架构,我们在享受微服务带来的好处(开发效率高, 独立部署, 水平扩展, 故障与资源隔离等等)外…

无人机、IoT 设备都有漏洞?专访以色列老牌安全公司 Check Point|拟合

从无序中寻找踪迹,从眼前事探索未来。 2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

从零入门 Serverless | 函数计算的可观测性

简介: 本文主要分为三个部分:概述中介绍可观测性的基本概念,主要包括 Logging、Metrics、Tracing 三个方面;然后详细介绍函数计算上的 Logging、Metrics、Tracing;最后以几个常见场景为例,介绍在函数计算中…

宜家:打造新零售时代的智能客户身份管理系统

简介: 宜家选择了阿里云应用身份服务(IDaaS)来为其提供一个包括统一认证、统一账户管理的CIAM解决方案,为所有前端提供统一的安全、可扩展和可靠的身份认证服务,包括灵活的认证配置、单点登录、多因素认证、社交平台登…

生意参谋牵手Quick BI 让数据再次驱动店铺经营

刚刚过去的一周,超两百家店铺体验了阿里巴巴官方全渠道、全链路、一站式数据平台生意参谋推出的全新功能,自助分析。 作为生意参谋联合Quick BI的初次尝试, “自助分析”面向店铺提供自助分析解决方案,支持店铺个性化数据报表制作…

到底是谁发明了物联网?

来源 | 鲜枣课堂作者 | 小枣君头图 | 下载于视觉中国1965年的越南战场,美军正深陷战争泥潭。突然有一天,北越士兵在胡志明小道发现了一些奇怪的东西。这些东西看上去像树枝,但实际上由金属构成,里面包含一些神秘的电子元件。这些士…

八种经典排序算法总结

前言 算法和数据结构是一个程序员的内功,所以经常在一些笔试中都会要求手写一些简单的排序算法,以此考验面试者的编程水平。下面我就简单介绍八种常见的排序算法,一起学习一下。 一、冒泡排序 思路: 比较相邻的元素。如果第一…

docker onlyoffice7.1.1 word excel ppt在线编辑、在线预览_部署01

文章目录1. 创建onlyoffice容器2. 启动在线案例3. 开放防火墙4. 浏览器验证5. 上传文件测试6. 在线编辑7. 测试主页面1. 创建onlyoffice容器 下面命令作用:拉取镜像、映射宿主机端口和docker内部端口、创建宿主机和docker容器挂载目录、拉取指定版本的onlyoffice/d…