Ext4系统从设计上就认为数据局部性是文件系统的文件系统的一个理想品质。

在机械硬盘上,相关联的数据存放在相近的blocks上,可以使得在访问数据时减少磁头驱动器的移动距离,从而加快IO访问。

在SSD上,没有像磁头一样的移动组件。但是数据局部性可以增大请求大小从而降低请求数量。同时可以尽可能的集中擦写块,从而提高重写速度。对减少碎片也很有帮助。

Ext4解决碎片问题的第一个方法是,multi-block allocator。当创建文件时,块分配器会分配8K的磁盘空间给文件,当然,这样做有个假定——8K空间很快被写数据。当文件被关闭后,没有使用的空间会被释放掉。但是,如果这种推测(就是刚才的假定)是正确的,那么这块数据就被写入了这个简单的extent(8K空间)中。

Ext4解决碎片问题的第二个方法是,delayed allocation。根据这个策略,当文件需要更多的块进行写操作时,文件系统会推迟确定在磁盘上的写入位置,直到脏数据要写入磁盘。除非必要,否则不写入磁盘(Timeout或sync或内核out of memory)。这样可以更好的是文件进行位置决策。

Ext4解决碎片问题的第三个方法是,尽可能使得一个文件的数据和其inode在相同的块组中。这种方法减少了data寻址耗时。特别是刚刚读取inode后就访问数据这种场景。

Ext4解决碎片问题的第四个方法是,整个卷被分割为大小为128M的groups。这样可以最大限度的保证数据局部性。然而,当在根目录创建文件时,inode分配器会扫描块组,从inode最空闲的group中分配inode空间。这种方式会扫描整个卷。但是一般而言,都是按照顺序往下创建的。

最新文章

  1. 从贝叶斯到粒子滤波——Round 2
  2. AngularJs学习总结-了解基本特性(-)
  3. Java集合容器简介
  4. bzoj 2818: Gcd GCD(a,b) = 素数
  5. Qt之QPauseAnimation
  6. VisualSVN SERVER的安装和使用
  7. QRCode.jar生成二维码
  8. [SSH服务]——一个SSH无密码登陆实验
  9. linux和windows文件名称长度限制
  10. 判断用户是pc访问还是手机访问
  11. C#中数组、ArrayList和List三者的区别(转)
  12. EXCEL 数字统一转换成文本
  13. JavaScript跨域总结与解决办法 什么是跨域
  14. U8g2库I2C总线再次突破性调试成功
  15. C++ 异常小记
  16. 循环队列和链式队列(C++实现)
  17. pytorch查看CUDA支持情况,只需要三行代码,另附Cuda runtime error (48) : no kernel image is available for execution处理办法
  18. 多种Timer的场景应用
  19. java idea 代码规范插件
  20. shell运算符与流程控制-2

热门文章

  1. 解决ecshop进入后台服务器出现500的问题
  2. DLL:无法解析的外部符号 "__declspec(dllimport)
  3. 在x64位的操作系统客户端如何连接oracle ?
  4. javascript中的字符串编码、字符串方法详解
  5. 为什么你应该抛弃Express的视图渲染引擎
  6. SpringMVC参数校验(针对`@RequestBody`返回`400`)
  7. 生成 HTMLTestRunner 测试报告学习总结
  8. ReentrantLock源码分析与理解
  9. 02 nodejs命令参数(NodeJS基础入门)
  10. 【Hexo】(一)使用HEXO配置环境,创建Hello World