我的命令--第C行Windows应用程序--使用fwrite()将接收到的数据连续转储到SSD驱动器上的1GB文件中。数据来自一个大约16 KB的PCIe卡,这是我在调用fwrite()时使用的数据计数。
在这种情况下,每个fwrite()调用通常花费不到100 us (使用测量),但有异常值需要2秒钟或更长时间才能完成,从而导致PCIe卡中的缓冲区溢出。这些零星性能下降的原因是什么?我能做些什么来阻止它们的发生吗?
更新#1:部分问题似乎是由SSD驱动器引起的。当倾倒到一个正常的,机械硬盘,离群值是100毫秒(而不是1000秒)。
更新#2:似乎在写入第一个1.5GB的数据之后,fwrite()的减速就会发生。当转储到1GB文件时,减速发生在第二个文件的中间。当使用512 MB文件时,它是在第三个文件之后。当使用256 MB文件时,它是在第6个文件之后。
发布于 2016-07-19 13:14:23
窃取某物
闪存使用擦除写循环.擦除实际上将内存设置为所有1s。写入将位设置为0,而且只要现有的1被更改为0,就可以写入不同的数据。Flash文件系统可以利用这一特性,因为它允许在不需要长时间和昂贵的擦除周期的情况下执行操作。
对于SSD,您可能没有使用闪存文件系统。我的猜测是,在SSD控制器通过擦除某些扇区来释放空间时,需要周期性地暂停编写。
https://stackoverflow.com/questions/38458129
复制相似问题