一个可能影响IO performance的问题

最近写了一个driver,将一个文件虚拟成SCSI DISK。该驱动程序本质上就是一个HBA driver。在驱动性能测试的时候,发现IO performance很低,在大量数据写的时候只达到了4MB/s的吞吐量,在少量数据写的时候,性能很高。该驱动的IO模型如下图所示:

在驱动中对queuecommand的流程进行了打印分析,发现SCSI Middle Layer发送请求的速度很慢。这就表明SCSI command的queue已经满了,所以SML无法dispatch command。通过分析,问题聚焦在:为什么virtual HBA驱动写文件的速度这么慢呢?难道在内核中访问文件的性能有问题?

仔细分析IO path,结合测试发现,该驱动的性能问题在于内存资源。采用dd工具进行测试时,访问scsi_device的数据会被push到buffer cache,buffer cache中的数据刷新到磁盘时通过virtual HBA驱动抵达page cache中。这种IO关系就会导致scsi device和file对内存资源进行竞争,如果应用存在大量的写数据,那么file将会很难得到page cache,所以IO performance就会很低。

为了验证这个想法,对Linux自带的loop device进行了测试,发现在大量数据写时,loop device同样存在performance剧降的问题。

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/storage/

时间: 2024-10-31 15:35:47

一个可能影响IO performance的问题的相关文章

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.当数据行中的变长列增

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.当数据行中的变长列增长使得原有页无法容纳下数据行时,数据将会移动到新的页中,并在原位置留下一个指向新页的指针,这么做的

javaee-请教各位大神一个用运用IO流统计英文单词的问题

问题描述 请教各位大神一个用运用IO流统计英文单词的问题 编写程序ListWords.java实现从键盘输入一个英文句子,统计该句子中英文单词的个数, 将找出所有单词存放到一个数组中.例如:He said,"Ths's not a good idea."则输出 为 共有8个单词:He said ths s not a good idea 这是本人自己写的可是不对,求帮看看 import java.io.BufferedReader; import java.io.IOException

从李开复对九把刀的推崇 谈如何做一个有影响的网站

中介交易 SEO诊断 淘宝客 云主机 技术大厅 最近,曾担任Google(谷歌)全球副总裁兼中国区总裁一职的李开复在一次演讲说:"创业者如果学习九把刀可以做出极致产品!"九把刀是何许人也?李开复竟然如此推崇他. 九把刀(真名柯景腾),台湾网络作家.代表作品有:<功夫>.<杀手>.<少林寺第八铜人>等.九把刀最早走上写作之路,起源于爱情失败,自己在参加完追求的8年的恋人沈佳仪婚礼后,便把自己初恋的故事写成小说,2007年出版,2011年又把小说拍成了电

影响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

c# 就一个类影响运行速度吗

问题描述 程序就建一个类,所有代码都在里面和分开多个类.运行速度会变慢吗 解决方案 解决方案二:不会有太大的影响,基本上感觉不出来.解决方案三:你想要写C程序吗......解决方案四:你并没有理解类是做什么用的解决方案五:可以写简单的程序但是用类可以更方便地复用代码解决方案六:你倒是写个只有一个类的代码试试?只要稍微复杂点的程序,1个类根本不可能解决方案七:程序运行速度的快慢更主要是跟你写的代码的效率有关,例如使用的for循环次数跟层度,递归的层度等等.代码是采用XX架构什么的更主要的是为了节省

请教一个IO流的File问题

问题描述 请教一个IO流的File问题 package IODemo; import java.io.*; public class java1Test { public static void main(String[] args){ File f=new File("TestFilePRO.java"); File d=new File("Gfei"); System.out.println("f.getName="+f.getName())