我正在按顺序将实时数据写入空的旋转磁盘.(编辑:它不必是连续的,只要我可以读回,如果它是顺序的.)在100 MB的速率的数据到达/ s和盘具有120 MB的平均写入速度/秒.
有时(特别是当可用空间开始减少时)磁盘速度低于100 MB/s,具体取决于磁盘写入盘片的位置,我必须丢弃重要数据.
有没有办法以一种模式(或其他方式)写入磁盘,以确保接近平均速率的恒定写入速度?无论磁盘上当前有多少数据.
编辑:
关于为什么我认为这应该成为可能的一些注释.
当通常写入磁盘时,它从盘片的快速部分开始,然后写入较慢的部分.但是,如果我可以将一半数据写入快速部分,将一半数据写入慢速部分(即1秒钟可以写入50MB到快速部分,50MB写入慢速部分),它们应该在中间相遇.我可以达到一个恒定的速度?
作为一名程序员,我不知道如何确定数据写在盘子上的位置,或者即使操作系统可以实现类似的功能.
如果我必须在常规Windows系统上执行此操作,我会使用具有更高平均写入速度的设备来为我提供更多空间.期望在整个磁盘上平均写入速度为100MB/s(额定速度为120MB/s)会给您带来麻烦.旋转硬盘在整个磁盘上没有恒定的写入速度.
这个问题的通常解决方案是在RAM中缓冲以掩盖不频繁的减速.您用作缓冲区的RAM越多,您可以处理的缓慢范围就越长.这些都是你必须做出的权衡.如果您的问题是已知的旋转磁盘内部扇区减速,那么您的设备速度不够快.
可能有帮助的另一件事是尽可能直接访问磁盘并确保它不被系统的其他部分共享.使用单独的物理设备,不要使用文件系统对其进行格式化,直接写入分区空间.是的,你必须处理文件系统为你解决的一些问题,但你也跳过一堆你无法控制的代码.即使这样,您的应用程序也可能会遇到Windows的调度问题.Windows不是RTOS,在时间上没有保证.再次,这将有助于更多文件系统清理临时减速,刷新脏页等.它可能无助于"最后100GB写入80MB/s"问题.
如果你真的遇到了从120MB/s - > 80MB/s的外部到内部的磁盘(你应该用你自己的代码进行测试,不要相信制造商的规格,这样你就知道你在处理什么)那么你将不得不像别人建议的那样玩分区游戏.在机械磁盘上,这将引入一些严重的头部搜索,这可能会耗费你的改进.为了最大限度地减少搜索,确保它是操作系统不用于其他任何东西的专用磁盘将更加重要.此外,在寻找磁盘末尾之前,使用大缓冲区并一次写入许多兆字节.您可以直接写入块设备并控制写入的块,而不是分区.我不知道如何在Windows中执行此操作.
要在Linux上解决这个问题,我很想在同一个驱动器上的两个分区上测试mdadm的raid0,看看是否有效.如果是这样,那么工作就完成了,你不必编写和测试一些复杂的写机制.
将磁盘分区为两个大小相等的分区.在分区之间交替写入几秒钟的数据.这样你几乎可以得到所有常用的顺序速度,很好地平均.每隔几秒就有一次磁盘搜索几乎没有时间吃掉.每秒一次搜索将可用时间从1000毫秒减少到约990毫秒,这是吞吐量减少约1%.你可以用来缓冲的内存越多,就越少.
使用更多分区来增加平均效果.
我担心这可能比你意识到的更困难:
我会看一些具体的事情来解决你的问题:
归档时间: |
|
查看次数: |
1255 次 |
最近记录: |