首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QNX6.5中测量硬盘读()、写()速度而不缓存

在QNX6.5中测量硬盘读()、写()速度而不缓存
EN

Unix & Linux用户
提问于 2013-02-04 00:04:55
回答 1查看 2K关注 0票数 3

我正在开发QNX6.5操作系统。QNX6.5支持POSIX API。我正在尝试构建一个用于评估硬盘性能的应用程序。我的应用程序将在用户定义的kB或MB大小的数据缓冲区从开始扇区到结束扇区连续写入硬盘后读取/写/读。所执行的操作(读、写、写后读)取决于用户的选择。每次执行操作时,应用程序将使用ClockCycles()跟踪时间,并计算每个扇区读写操作的速度。

我使用open()调用来像/dev/hd0一样打开设备文件。我使用read()write() API来执行读/写操作。我的问题是:我没有得到正确的速度的实际磁盘读写。实际上,应用程序经常会返回数据读/写到缓存的速度。当我试图在写操作后立即进行读取时,问题就更加明显了。写入操作后读取操作的速度非常高,为1000~1200 MB/S;而正常读取为50-60MB/S,我使用的是O_SYNCO_RDWR等开放标志。我还尝试将标志更改为O_DSYNCO_RSYNC。但是我发现这些标志对应用程序的输出没有任何影响。在Linux中没有类似于O_DIRECT的标志。

我还试图在启动期间禁用硬盘驱动程序中的缓存。在此基础上,获得了MBs级数据大小的读写速度精度。但即便如此,当在立即写入后读取较低的数据大小时,读取速度仍然非常高。我还看到了一些宏,如CACHE_FLUSHCACHE_INVALIDATE,用于需要DMA传输的驱动程序中。但我不知道如何在应用程序中使用这些宏。有谁能帮我绕过缓存,获得硬盘读写操作的速度?我的硬盘可以格式化也可以不格式化.我对这两种情况都进行了测试。

EN

回答 1

Unix & Linux用户

发布于 2013-02-04 03:41:49

HD缓存

关于你的最后一段,我相信当你对驱动器的读写不足1-2米时,驱动器上的缓存会影响性能,目前硬盘的缓存范围通常在200万到16M之间。

最小化HD缓存

效应

假设您成功地禁用了OS级文件系统缓存。为了最大限度地减少HD缓存的影响,您应该至少将数据写成HD缓存的两倍。

假设HD有200万缓存。

用数据写200 of文件进行测试。编写其中的20个文件(单个文件),并丢弃前10个文件的结果,平均最后10个文件。

对于200 20的读取测试,您将需要20个文件。内容可以是相同的,但它们必须是单独的文件。一次又一次读取相同的小文件(<2m)将使用HD缓存。

相似程序

你应该去看看Bonnie++。您可能能够在QNX中编译它。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/63593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档