我们已经编写了一个应用程序,可以在同一个本地卷(RAID1)上同时执行对多个文件的小(22kB)写入操作(一个线程代表其他线程对多个位置执行asynchronous排队写入操作)。
99.9%的写入是低延迟的,但偶尔(可能是每隔一两分钟),我们会得到一个或两个巨大的延迟写入(我已经看到10秒以上),没有任何真正的解释。
平台:与NTFS的Win2003服务器。
监控:Sysinternals Process Monitor(见下面的链接)和我们自己的应用程序日志logging。
我们已经尝试过多种方法来尝试解决这些从一些网站收集到的问题,例如:
使文件名的第一部分唯一以帮助8.3名称生成
将文件写入多个目录
更改英特尔磁盘写入caching
Windows文件/打印机共享
最小化使用的内存
平衡
最大化文件共享的数据吞吐量
最大化networking应用程序的数据吞吐量
系统 – >高级 – >性能 – >高级
NtfsDisableLastAccessUpdate – 使用fsutil行为集disablelastaccess 1
禁用8.3名称生成 – 使用“fsutil行为设置disable8dot3 1”+重新启动
启用大型文件系统caching
禁用内核代码的分页
IO页面locking限制
closures(或打开)索引服务
但似乎没有什么区别。 还有很多我们还没有尝试过的东西,但是我们想知道是否有人遇到了同样的问题,原因和解决scheme(编程与否)?
我们可以使用IOMeter和一个简单的设置来重现问题:
启动IOMeter并使用断开button删除“拓扑”中除第一个工作线程以外的所有线程。
select工作者线程并在要在磁盘目标选项卡中使用的磁盘旁边的框中放置一个十字,并将“2000000”放入最大磁盘大小(注意:必须至less有1GB可用空间;扇区大小为512字节)
接下来创build一个新的访问规范并将其添加到工作线程:
传输请求大小= 22kB
100%顺序
访问规格百分比= 100%
百分比读取/写入= 100%写入
更改结果显示更新频率为5秒,testing设置运行时间为20秒,并将“自动产生的工人数”设置为零。
在“拓扑”面板中select“工作线程”,然后按“重复工作者”button59次,以创build具有相同设置的60个线程。
点击“开始”button(绿色标志)并监控结果标签。 “最大I / O响应时间(ms)”总是在我们的机器上至less达到3500。 我们的机器不是很慢(至强8核心机架服务器,4GB和板载RAID)。
我有兴趣看看其他人得到什么。 我们有一种感觉,这可能与NTFS文件系统有关(我们现在已经有75%的碎片文件),我们将围绕这个原则尝试一些事情。 但是这也与磁盘性能有关,因为我们没有在RAMDisk上看到它,而且在RAID10arrays上也不那么严重。
任何帮助深表感谢。
理查德
右键点击并select“在新标签中打开链接”:
ProcMon结果
我现在有更多关于这个问题的信息。
在使用各种硬件的12台不同机器上testing了所描述的IOMetertesting后,我将其缩小到一个特定的RAID芯片组(具有相同芯片组的3台不同机器使用RAID1和RAID10performance出这种行为)。 所有其他机器的结果至less要好一个数量级。
芯片组:英特尔631xESB / 632xESB SATA RAID(又名ESB2)
请参阅英特尔网站上的这篇文章,了解更多信息,并希望得到英特尔的回应:
英特尔631xESB / 632xESB SATA RAID(又名ESB2)写入缓慢
理查德