zfs块申请机制研究
来源:互联网 发布:php 清空文件夹内容 编辑:程序博客网 时间:2024/06/05 00:44
看了下面的这个文章,熟悉了zfs的块的申请的机制。
https://blogs.oracle.com/roch/entry/doubling_exchange_performance
首先如果某个zio要请求vdev,申请一个block,他会经过zio流水线的一级 zio_dva_allocate。
在块申请的时候 首先 会选择出top vdev,然后通过这个top vdev,找到一个metaslab,然后再在metaslab当中,找到所要请求块的dva。
(Data Virtual Address),挑选metaslab是系统写性能问题的核心和关键。
一个vdev被分为200个metaslab,每个metaslab可能会在内存当中,可能不会放到内存当中。放到内存当中的部分,将会有一个spacemap与之对应。并且我们可以从中申请块。
同时也有可能不在内存当中,那么我们不能申请不在内存当中的metaslab,但是我们却可以释放(由于copy on write的原因,有些块已经被使用,由于不能overwrite,所以必须要copy到新的块,然后释放掉原来的块)。对于spacemap载入与载出的开销是很大的,所以目标就是缩小这个操作的开销。
申请块的时候,所寻找的slab 是根据一些标准,和每个slab的权值来决定的,寻找权值最大的slab为最终的目标。
标准有两个:重用之前使用过的slab,当然比较容易想到的原因是:由于是刚刚使用过,那么肯定寻道的距离不会很长,这样可以缩短寻道时间,第二个是寻找空闲空间最大的slab。
解释一个名词LBA是(logical block addresses)的缩写。当LBA 越低,那么说明他的位置越靠近磁盘的外侧,性能越好。(不过这样也存在一个问题,就是写磁盘的时候,肯定会先写低LBA,如果不删除该文件,继续写磁盘,那么磁盘的速度肯定会越来越低。)
所以如果空间空间都是一样的话,会优先选择外磁道的slab作为申请的对象。当磁盘的空间近乎满的状态的时候,space map维护了另一个avl树,这个树是按照空闲空间大小来进行组织的。
对zfs的优化不仅仅体现在对数据结构上的优化,而且体现在对他所提供的参数上的优化。
比如之前当slab空间大于70%的时候就才用best fit算法,而如果将threshold改成大于96%才进行best fit算法,能够提高系统写的速度。还有另一个可以优化的地方:之前是当slab的空闲程度为50%的时候,zfs会选择该slab作为申请的对象。而现在是当slab的空闲程度为33%的时候,该slab就会选择。
经过测试发现,修改相关参数后,一些运行在zfs上的应用的性能提升了很多。
- zfs块申请机制研究
- ZFS 文件系统研究
- zfs当中的事务处理研究与探索
- 【转】ZFS读缓存深入研究:ARC
- ZFS
- ZFS
- zfs的同步机制深究(zio层面)
- Plex,内存块的申请
- java“块”的研究
- java“块”的研究
- java 块的研究
- zfs的块设备写操作很慢的原因分析
- NANDFlash坏块管理研究
- android 6.0权限申请机制
- 写基金申请就是在做研究-基金申请体会
- 研究缓存机制
- 工作流代理人机制研究
- SQLServer锁机制研究
- Ext 4.1.1a 在Myeclipse上安装补全插件 spket-1.6.23
- UITableViewCell的选中时的颜色设置
- eclipse hadoop开发环境配置
- 雷·克兹维尔:人工智能正造福全人类
- vi 查看当前文件名和文件路径
- zfs块申请机制研究
- 二维数组的定义与删除
- 高级Swing界面JTable编程
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- UITableViewCell 选中时改变高度
- 对于mfc的关系及调用
- 物联传感网络 智能居家生活
- MyBatis的jdbcType类型
- 五矿系30亿项目未经环评私行上马遭环保部叫停