当前位置:  技术问答>linux和unix

求测试linux下最大io读写的方法

    来源: 互联网  发布时间:2017-04-12

    本文导语:  在linux下,现在有个项目是这样的,我要用到多线程,获取很多路视频,然后保存到本地硬盘... 我现在就是想测试下系统最大同时读写多少路效率是最高的呢?? 我自己写了一个简答的测试程序,就是同时开多路线...

在linux下,现在有个项目是这样的,我要用到多线程,获取很多路视频,然后保存到本地硬盘...
我现在就是想测试下系统最大同时读写多少路效率是最高的呢??
我自己写了一个简答的测试程序,就是同时开多路线程来同时进行io读写,比如我同时开16路线程;8路线程读,读的都是同一个文件;8路线程写,分别写到8个文件中,没做同步互斥...为什么我测出来的io读写速率只有10M/s左右,我用hdparm命令测试,理论上应该达到100多M/s的样子......怎么才能获取更高效的读写速率呢?????
求有经验的指导...!感激不尽!!

|


在读一个文件的情况下,8个线程同时读为什么速度慢?
   八个线程都去读文件,相当于对同一个文件读了八次,
   既然文件是同一个文件,就是说数据都是一样的,那么
   只需要将文件的内容读进内存中,然后共享,让八个线程
   都能访问这部分数据,这样一方面只用复制一次文件的数据,
   一方面少维护了7个线程,效率肯定高很多。
  
实际工作中,会获取多个视频流,8路线程同时分别读8个不同的文件会不会快一点?
    如果有多个文件需要访问,肯定是不能用单线程模型进行文件阻塞读写了。这个时候
    使用多线程,每个数据通路都有两个线程,一个是in,一个是out
    文件.in1--in1->内存1---out1-->文件.out1
    文件.in2--in2->内存2---out2-->文件.out2
    ...
    但是这样的话,程序会变得很复杂,你要非常小心的处理线程间的同步,和互斥问题,我也不是很赞成这样的做法。

针对楼主的问题,我觉得可以使用I/O多路转接
    在系统内分配一块内存做缓冲器,(如果有8路数据,就分成八个缓冲区)
    输入线程只需要一个,这个线程用多路转接的方式读取数据,将数据读入相应的缓冲区,
    然后通知相应的线程此时缓冲区有可用数据

|
就是你要测试一个写
你写要测试,那写的数据哪里来,肯定是找内存里的垃圾数据,如果你重文件里来,那不就不能反映速度了
比如你读测试
你读出来的数据不能管他,如果你又写一个地方,那不又浪费了时间和IO,不能反映真实速度。
而且一般不测不多线程读多个文件,一般就是测试下大文件,小文件。

|
大文件读写可以用mmap,内存映射

|
传统硬盘单线程写4BK每write最快,避免文件间频繁交替写引起寻道损耗,尽量在内存缓存足够多的数据后顺序写出,

|
你的读写是什么做测试的,读测试需要把数据丢掉哦,写的话是要从内存中取数才快哦。

|
什么要用多个线程读一个文件?你认为会快吗?相当于本来只需要一次读硬盘的,就变成8次了。速度肯定慢多了

|
假设是一个单核系统有多个线程同时写磁盘,那么不管开多少线程,
在系统内部其实都是线性的写磁盘,并且线程之间还有调度开销。

磁盘的读写速度是由磁盘本身决定的,如果磁盘速度是100M/s,
那么单线程情况下,相当于独享100M/s。
多线程同时写的话,就相当于要共享100M/s。

|
该说的我都都说了,会不会做是楼主从不聪明的问题。

|
你用的什么写? write 还是 fwrite ?
fwrite 比 write 效率高些吧

|
楼主,你能不能把你的代码发出来看一下,就看看你怎么用多线程写的。

    
 
 

您可能感兴趣的文章:

  • Q:IDE硬盘的读写测试
  • linux设备驱动程序 usb-skeleton这个程序,能不能用具体的usb设备测试它的读写功能啊??
  • PHP编程语言介绍及安装测试方法
  • ▲测试JAVABEAN方法▲
  • 谁能提供QA及测试方法的文档资料之类的东西,分数一定给
  • 请问在Ubuntu下用什么方法可以进行代码的性能测试?
  • 各位测试自己的软件的速度,或某个功能块的速度一般用什么方法?互相交流一下
  • 在UNIX中测试函数系统运行时间用什么方法?谢谢!
  • python 字典(dict)遍历的四种方法性能测试报告
  • 经测试最好用的mysql密码忘记的解决方法
  • python 测试实现方法
  • mysql5.0入侵测试以及防范方法分享
  • Android 自动化测试经验分享 UiObejct.getFromParent()的使用方法
  • 谁做过QA,软件测试的自动化方法谁能介绍!
  • mysql中迅速插入百万条测试数据的方法
  • jQuery中get和post方法传值测试及注意事项
  • PHP防范SQL注入的具体方法详解(测试通过)
  • WQL语言简介和WQL测试工具wbemtest.exe使用方法详细介绍
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 软件重构与软件测试
  • 求一个压力测试工具,用来测试dns服务器的处理能力.
  • 测试Python内部类型及type和isinstance用法区别
  • 请教:在solaris下测试C++程序是否存在内存泄漏等问题用什么测试工具?
  • Windows下php 5.3.5和apache2安装配置及测试
  • 在线等。。。使用压力测试工具进行测试有时出现httpd子进程CPU占用率100%,且压力撤除后无法恢复
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • C++ 迷你单元测试和性能测试库 cc-mini-test
  • 在本地测试通过的EJB,如何把测试程序放在另外一台机器上,也可以测试通过。
  • JBuilder2005单元测试体验之测试配置
  • 测试过程管理平台 TestLink
  • C++单元测试框架 CppUnit
  • portlet单元测试框架 portletUnit
  • linux系统测试程序
  • 负载测试工具 Ripplet
  • 晚饭好~大家能谈谈压力测试吗? iis7站长之家
  • Android自动化测试框架 Cafe
  • 自动化测试管理平台 TestMP
  • 网络测试利器 netperf
  • 自动测试工具 QTP
  • 晚饭好~大家能谈谈压力测试吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,