影响IO性能的request queue

最近一段时间在做IO性能对比测试分析的时候发现Linux-3.2的IO性能要比Linux-2.6.23差。在内核中,并发顺序读的情况下(绕过设备的buffer cache),Linux-3.2的性能比Linux-2.6.23有很大差别,性能降低了15%左右。这是为什么呢?

首先看一下 Linux-3.2中测试的IO Stack模型,如下图所示:

这个IO Stack由DM设备和SD设备堆叠而成,DM设备完成multipath的功能,SD设备是一个SCSI块设备。从这个模型中可以看出Linux-3.2的DM-Multipath设备层拥有一个磁盘SD设备相同的request Queue,BIO达到该层之后需要进行IO的调度处理。这个request Queue是Linux-3.2与Linux-2.6.23不同的地方。Linux-2.6.23中的device mapper机制仅仅起到转发BIO的作用,具体功能由device mapper的target完成。不同之处在于Linux-3.2中的device mapper机制提供了两种类型的转发机制:一种是REQUEST_BASED的转发机制;另一种是BIO_BASED的转发机制。这两种转发机制的差别在于REQUEST_BASED类型会采用request queue进行IO调度,然后统一处理request中的BIO。BIO_BASED类型和传统的device mapper中的转发机制是一样的。

在一般的存储设备上,如果在DM层再做一层request queue进行IO调度,必然会导致读请求处理比Linux-2.6.23中的延迟长,因此,会导致读IO性能的剧降。我的测试结果是在并发多流顺序读的情况下,Linux-3.2内核的读性能降低了15%左右。写性能的影响并不十分明显,但是,如果调度算法选择不好,写性能还是有一定影响。

由于我采用的是系统默认的DM-multipath驱动,在Linux-3.2中该multipath只支持REQUEST_BASED类型,因此,如果想要把这一层的request Queue移除,那么只能修改Linux-3.2中的代码将DM-multipath改成BIO_BASED类型。个人认为Linux中的Multipath驱动应该保留BIO_BASED的模式,这样对基于磁盘的multipath应用会有一定的性能提升。

时间: 2025-01-29 17:50:13

影响IO性能的request queue的相关文章

SQL Server中的Forwarded Record计数器影响IO性能的解决方法_MsSql

一.简介      最近在一个客户那里注意到一个计数器很高(Forwarded Records/Sec),伴随着间歇性的磁盘等待队列的波动.本篇文章分享什么是forwarded record,并从原理上谈一谈为什么Forwarded record会造成额外的IO. 二.存放原理     在SQL Server中,当数据是以堆的形式存放时,数据是无序的,所有非聚集索引的指针存放指向物理地址的RID.当数据行中的变长列增长使得原有页无法容纳下数据行时,数据将会移动到新的页中,并在原位置留下一个指向新

SQL Server中的Forwarded Record计数器影响IO性能的解决方法

一.简介 最近在一个客户那里注意到一个计数器很高(Forwarded Records/Sec),伴随着间歇性的磁盘等待队列的波动.本篇文章分享什么是forwarded record,并从原理上谈一谈为什么Forwarded record会造成额外的IO. 二.存放原理 在SQL Server中,当数据是以堆的形式存放时,数据是无序的,所有非聚集索引的指针存放指向物理地址的RID.当数据行中的变长列增长使得原有页无法容纳下数据行时,数据将会移动到新的页中,并在原位置留下一个指向新页的指针,这么做的

Forwarded record:SQL Server中一个隐性的IO性能杀手

简介 最近在一个客户那里注意到一个计数器很高(Forwarded Records/Sec),伴随着间歇性的磁盘等待队列的波动.本篇文章分享什么是forwarded record,并从原理上谈一谈为什么Forwarded record会造成额外的IO. 存放原理 在SQL Server中,当数据是以堆的形式存放时,数据是无序的,所有非聚集索引的指针存放指向物理地址的RID.当数据行中的变长列增长使得原有页无法容纳下数据行时,数据将会移动到新的页中,并在原位置留下一个指向新页的指针,这么做的原因是由

SQL Server中一个隐性的IO性能杀手-Forwarded record

原文:SQL Server中一个隐性的IO性能杀手-Forwarded record 简介     最近在一个客户那里注意到一个计数器很高(Forwarded Records/Sec),伴随着间歇性的磁盘等待队列的波动.本篇文章分享什么是forwarded record,并从原理上谈一谈为什么Forwarded record会造成额外的IO.   存放原理     在SQL Server中,当数据是以堆的形式存放时,数据是无序的,所有非聚集索引的指针存放指向物理地址的RID.当数据行中的变长列增

Linux系统中使用iostat分析IO性能

对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量.系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈. 下面通过iostat命令使用实例,说明使用iostat查看IO请求下发情况.系统IO处理能力的方法,以及命令执行结果中各字段的含义. 1.不加选项执行iostat 我们先来看直接执行iostat的输出结果: linux # iostat Linux 2.6.16.60-0.21-smp (linux) 06/12/12 avg-c

【转】Orion - oracle提供的测试io性能的工具

Orion是oracle提供的测试io性能的工具.它可以用来模拟Oracle数据库IO,也可以用来仿 真ASM的条带化的功能. Orion可以支持下列IO负载 1. 小的随机的IO:OLTP的应用主要是随机的读写,大小和数据的块大小一样(一般是8K).这样的应用主要是关注的吞吐量是IOPS和一个请求的平均延时时间.Orion可以仿真一个随机IO负载.指定的读写百分比,指定的IO大小,指定的IOs,IOs是分布在不同的磁盘上. 2. 大的连续的IO:数据仓库的应用,数据装载,备份,和恢复会产生连续

Linux系统中使用iostat命令检测磁盘的IO性能

  iostat命令可以提供丰富的IO性能状态数据.iostat可以收集和显示系统输入/输出存储设备方面的统计信息.经常用于追查存储设备性能方面的问题,包括设备,本地磁盘和nfs等远程磁盘. iostat提供几个用于定制输出的开关.最有用的有: -c 只显示CPU行 -d 显示设备(磁盘)使用状态 -k 以千字节为单位显示磁盘输出 -t 在输出中包括时间戳 -x 在输出中包括扩展的磁盘指标 rrqm/s: 每秒进行 merge 的读操作数目. wrqm/s: 每秒进行 merge 的写操作数目.

IO读取以及request和response问题

问题描述 IO读取以及request和response问题 小弟最近做了个图片服务器.类似与淘宝,可以通过request的url来进行图片的压缩和等比例缩放. 过程就是: 1.获取原图时直接response.WriteFile(图片物理路径); 2.获取压缩图片时,先判断该尺寸是否压缩过,没有压缩过的话进行压缩,并**保存为图片文件(压缩过的)**,然后response.WriteFile(图片物理路径); 这种方式在使用时没有什么问题. 但是突发奇想,为什么我要保存一次图片文件? 为何不用二进

影响数据库性能的因素

论坛上的数据库爱好者们,对于数据库底层的各种细节,内幕,等待事件,隐藏参数等津津乐道,对于调整好一条SQL语句使之在查询优化器/查询引擎下能高性能运转具有巨大的满足感成功感,仿佛自己掌握了天下最有价值的真理,驾驭了天下最有难度的技术.但对于设计和开发出这个数据库系统的人来说,他们看到此情此景,只好躲在一边偷偷的笑了.那么问题来了,使用别人数据库的人被称为大师(如:OCM),那么自己写出一个数据库来的人又该称为什么呢?到底谁才是真正的高手呢? 数据库系统优化中的一些观点: "系统性能出现问题进行优