ron*_*nag 7 c++ windows boost memory-mapped-files windows-7-x64
在我的软件中,我有4x 500GB文件,我使用boost内存映射文件API以循环方式顺序写入.
我在32MB块中分配区域,并且在最后分配块时,我创建了两个内存映射区域,其中第一个是文件的末尾,第二个是文件的开头,并映射到第一个区域的结束地址.
现在这适用于较小的文件.但是,对于到达终端区域的大文件,磁盘性能会下降,我不知道如何避免它.
我猜测正在发生的是磁盘试图写入文件的两端,主轴必须来回跳转.这是一个相当愚蠢的事情,特别是在进行顺序写入时,我希望操作系统会更聪明一些.
有没有人对如何避免这个问题有任何想法?
我正在考虑升级到Windows 10并希望它能做得更好.但这是一个相当危险的变化,我现在想避免.
我还应该注意,这些文件位于带有2x 3TB Seagate Constallation Enterprise驱动器的软件RAID 1上.这些驱动器的最小顺序写入速度为60MB/s,平均速度为120MB/s,我总共编写了所有文件,速度为30 MB/s.
代码可以在这里找到.
编辑:
事实证明,在写入整个文件然后从一开始就重新开始操作系统实际上开始读回磁盘上的内容,即使它不需要我认为导致问题的内容.
“这些驱动器的最小顺序写入速度为 60MB/s” - 这是无关紧要的,因为您没有进行顺序写入。
使用 SSD 缓存,或重新考虑设计(找到一种方法来防止跨缓冲区环绕进行访问)。
与速度无关:您可以使用直接映射到文件的循环缓冲区,因此您不必使用(专有?)技巧来映射“连续”地址区域。粗略的想法:boost::circular_buffer 相当于文件?
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |