问题描述
前几天,在C#中文件写的性能测试一文中,对C#的文件写的几种不同的方式的性能进行了测试。同时,文章源代码也在Git发布了。但是,经仔细分析,发现在写入时的速度居然达到了4.6GB/s。要知道,一般的机械硬件的速度通常在150MB/s左右,普通SSD的速度为500MB/s左右,而好点的NVME一般为 2000 MB/s 左右。这个测试结果显然是有悖常识的。
为了进一步了解Intel 760P 512 GB 的性能,经查询经查询在官方发现其描述如下(Intel P760性能官方描述地址):
Sequential Read (up to): 3230 MB/s
Sequential Write (up to): 1625 MB/s
实验目的
在对实验数据进行仔细分析以后,发现写入速度在开始写时会非常快,随时写入时间的增加会突然降低,而且这个降低是阶梯式的不是缓慢下降。为了理解这个过程,又追加了一个实验,对写入的次数和数据量进行分析。
实验原理
对硬件进行连续多次写入测量,每次写入相同的数据量,观察每次写入时的速度。
实验代码
参见 https://gitee.com/hwaust/CSharpIOPerformanceTest 。
实验数据
第1次实验,共 50 次,每次将 100 MB 数据写入同一文件。
WritingSpeed (GB/s)
3.861 4.558 4.011 5.013 5.013 5.270 5.277 5.269 5.285 5.006 // 第 1 - 10 次写入速度
5.278 4.775 5.277 5.273 5.277 5.281 5.013 5.277 5.020 5.270 // 第 11 - 20 次写入速度
5.277 5.277 5.020 5.270 5.277 5.270 5.277 5.014 5.277 5.277 // 第 21 - 30 次写入速度
5.277 5.277 1.700 1.567 1.567 1.543 1.567 1.592 1.592 1.519 // 第 31 - 40 次写入速度
1.592 1.567 1.567 1.543 1.567 1.567 1.543 1.567 1.519 1.497 // 第 41 - 50 次写入速度
第2次实验,共 100 次,每次将 50 MB 数据写入同一文件。
WritingSpeed (GB/s)
3.588 4.721 5.013 5.013 4.557 4.547 3.864 4.178 5.000 5.013 // 第 1 - 0 次写入速度
5.013 5.572 5.572 5.013 5.013 5.579 5.021 4.998 5.571 5.013 // 第 11 - 10 次写入速度
5.013 5.029 4.999 5.013 5.571 5.552 5.014 5.013 5.014 5.570 // 第 21 - 20 次写入速度
5.014 5.013 5.016 5.009 5.571 5.570 4.554 5.032 5.552 5.014 // 第 31 - 30 次写入速度
4.558 5.013 5.025 5.002 5.013 5.571 5.566 5.028 4.999 5.014 // 第 41 - 40 次写入速度
5.011 5.030 4.998 5.028 4.169 5.012 5.028 4.999 5.028 4.999 // 第 51 - 50 次写入速度
4.569 5.002 4.568 5.014 5.000 4.569 4.998 2.091 1.520 1.567 // 第 61 - 60 次写入速度
1.519 1.567 1.519 1.567 1.519 1.475 1.567 1.519 1.519 1.519 // 第 71 - 70 次写入速度
1.567 1.475 1.617 1.432 1.567 1.519 1.519 1.519 1.519 1.567 // 第 81 - 80 次写入速度
1.475 1.567 1.567 1.567 1.567 1.519 1.519 1.567 1.432 1.617 // 第 91 - 100 次写入速度
数据分析
根据以上实验数据,可以发现:
- 第1次写入第33和第34次时,即数据量为3.25G以后,写入速度突然降至1.6GB/s 左右。
- 第2次写入第66和第67次时,即数据量为3.3G以后,写入速度突然降至1.6GB/s 左右。
阶梯式写入速度下滑是在数据3.3G左右时,产生速度突然下降。下降前速度为5GB/s,下降后为1.6GB/s。
实验结论
根据以上实验结果,我们可以得出有个推测结论:Intel SSD 760P 有内部缓存机制,数据先写入至缓冲,然后再写到存储芯片上,这个缓存的大小约为3.3G。当数据量小于3.3GB的时候,数据会以内存的速度即约5GB/s的速度写入,而超过这个值以后,数据才以真实的存储芯片的写入速度进行,即约1.6GB/s。
然后郝老师又查询了一下Intel 760P 的芯片结构,根据国外媒体 TOM’s Hardware的文章Intel SSD 760p Review: The New NVMe Value Leader所提供的硬件结构图,发现以下内容:
硬盘中有页缓冲和数据缓存,所以这就直接证实了之前的推测。因此,这块固态硬件在数据量小的时候,在没有带宽限制的前提下,可以达到5GB/s的峰值速度;而在连续写入的测试中,可以达到官方所说的约1.6GB/s的写入速度。