位置: 主页 > 网页游戏公益服 >

聊聊磁BT页游sf盘I/O那些事

引入 Cache 层的目的是为了提高 Linux 操作系统对磁盘访问的性能。Cache 层在内存中缓存了磁盘上的部分数据。当数据的请求到达时,如果在 Cache 中存在该数据且是最新的,则直接将数据传递给用户程序,免除了对底层磁盘的操作,提高了性能。Cache 层也正是磁盘 IOPS 为什么能突破 200 的主要原因之一。

块设备驱动层

在面对更复杂的读场景(比如按 key)时,如何来保证读操作的性能呢?简单的方式是像 Kafka 那样,将文件数据有序保存,使用二分查找来优化效率;或者通过建索引的方式来进行优化;也可以采用 hash 的方式将数据分割为不同的桶。以上的方法都能增加读操作的性能,但是由于在数据上强加了数据结构,又会降低写操作的性能。比如如果采用索引的方式来优化读操作,那么在更新索引时就需要更新 B-tree 中的特定部分,这时候的写操作就是随机写。那么有没有一种办法在保证写性能不损失的同时也提供较好的读性能呢?一个好的选择就是使用 LSM-tree。LSM-tree 与 B-tree 相比,LSM-tree 牺牲了部分读操作,以此大幅提高写性能。

日志结构的合并树 LSM(The Log-Structured Merge-Tree)是 HBase,LevelDB 等 NoSQL 数据库的存储引擎。Log-Structured 的思想是将整个磁盘看做一个日志,在日志中存放永久性数据及其索引,每次都添加到日志的末尾。并且通过将很多小文件的存取转换为连续的大批量传输,使得对于文件系统的大多数存取都是顺序的,从而提高磁盘 I/O。

IBM developerWorks,从文件 I/O 看 Linux 的虚拟文件系统 (https://www.ibm.com/developerworks/cn/linux/l-cn-vfs/),2007。

VFS 中包含着向物理文件系统转换的一系列数据结构,如 VFS 超级块、VFS 的 Inode、各种操作函数的转换入口等。Linux 中 VFS 依靠四个主要的数据结构来描述其结构信息,分别为超级块、索引结点、目录项和文件对象。

聊聊磁BT页游sf盘I/O那些事

聊聊磁BT页游sf盘I/O那些事

2. 索引结点(Inode):

通用块层的主要工作是:接收上层发出的磁盘请求,并最终发出 I/O 请求。该层隐藏了底层硬件块设备的特性,为块设备提供了一个通用的抽象视图。

采用追加写

I/O 调度层

虽然 15000rpm 的磁盘计算出的理论最大 IOPS 仅为 166,但在实际运行环境中,实际磁盘的 IOPS 往往能够突破 200 甚至更高。这其实就是在系统调用过程中,操作系统进行了一系列的优化。

为了进一步提高查找效率,Kafka 为每个分段后的数据建立了索引文件,并通过索引文件稀疏存储来降低元数据占用大小。一个段中数据对应结构如下图所示:

大多情况下,数据的传输通过 DMA 方式。旧的磁盘控制器,仅仅支持简单的 DMA 操作:每次数据传输,只能传输磁盘上相邻的扇区,即数据在内存中也是连续的。这是因为如果传输非连续的扇区,会导致磁盘花费更多的时间在寻址操作上。而现在的磁盘控制器支持“分散 / 聚合”DMA 操作,这种模式下,数据传输可以在多个非连续的内存区域中进行。为了利用“分散 / 聚合”DMA 操作,块设备驱动必须能处理被称为段(segments)的数据单元。一个段就是一个内存页面或一个页面的部分,它包含磁盘上相邻扇区的数据。

聊聊磁BT页游sf盘I/O那些事

空闲内存页已经回升,超过了阈值。

Linux Kernel Exploration,Linux 通用块设备层 ()。

Ttransfer 是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前 IDE/ATA 能达到 133MB/s,SATA II 可达到 300MB/s 的接口数据传输率,数据传输时间通常远小于前两部分消耗时间。简单计算时可忽略。

热门文章
最新文章
Copyright © 2011-2018 超变态网页游戏 版权所有