draveness / blog-comments

面向信仰编程
https://draveness.me
140 stars 6 forks source link

为什么 CPU 访问硬盘很慢 - 面向信仰编程 · /whys-the-design-cpu-and-disk #213

Closed draveness closed 2 years ago

draveness commented 4 years ago

https://draveness.me/whys-the-design-cpu-and-disk/

wutz commented 4 years ago

👍

yzhaoyu commented 4 years ago

大神好久没发文章了

draveness commented 4 years ago

大神好久没发文章了

最近事情比较多

solarhell commented 4 years ago

数据先落到Page Cache上,还需要调用fsync()才能真的写入到硬盘上。

solarhell commented 4 years ago

内存断电数据清空,猜测是因为需要靠通电保持电位(即数据),断电后就重置了?

fengzhenxing commented 4 years ago

先来评论一下,博主好久没更新了

yuchanns commented 4 years ago

两个月了,时不时来刷新看看有没有更新

snakeliwei commented 4 years ago

每次看你的文章都有新收获, 不错, 加油

nonacosa commented 4 years ago

nice

auntyellow commented 3 years ago

磁头从0磁道(磁盘最边缘)移动到最大磁道(磁盘最内侧)的耗时大约在30-40ms,为何寻道时间一般认为是10ms?

draveness commented 3 years ago

磁头从0磁道(磁盘最边缘)移动到最大磁道(磁盘最内侧)的耗时大约在30-40ms,为何寻道时间一般认为是10ms?

30 ~ 40 ms 的数据是从哪里来的呢

auntyellow commented 3 years ago

磁头从0磁道(磁盘最边缘)移动到最大磁道(磁盘最内侧)的耗时大约在30-40ms,为何寻道时间一般认为是10ms?

30 ~ 40 ms 的数据是从哪里来的呢

可以用程序访问磁盘文件测出来的,具体步骤是:

  1. 准备一块大的HDD(例如2T),远比内存大(例如内存只有16G);
  2. 对HDD做分区,第一、最后一分区尽量小,保证分区远大于内存但远小于整个磁盘大小(例如各128G);
  3. 在第一分区用随机数写满文件A,最后一分区用随机数写满文件B(即A和B各128G),这样A就接近磁盘最边缘,B就接近磁盘最内侧;
  4. 程序交替读取A和B中的随机块(4K、8K、16K均可),使得绝大部分情况下不会读到缓存,而是让磁盘做长距离寻道操作;
  5. 根据循环N次耗时,可以算出磁头移动的平均耗时。
draveness commented 3 years ago

磁头从0磁道(磁盘最边缘)移动到最大磁道(磁盘最内侧)的耗时大约在30-40ms,为何寻道时间一般认为是10ms?

30 ~ 40 ms 的数据是从哪里来的呢

可以用程序访问磁盘文件测出来的,具体步骤是:

  1. 准备一块大的HDD(例如2T),远比内存大(例如内存只有16G);
  2. 对HDD做分区,第一、最后一分区尽量小,保证分区远大于内存但远小于整个磁盘大小(例如各128G);
  3. 在第一分区用随机数写满文件A,最后一分区用随机数写满文件B(即A和B各128G),这样A就接近磁盘最边缘,B就接近磁盘最内侧;
  4. 程序交替读取A和B中的随机块(4K、8K、16K均可),使得绝大部分情况下不会读到缓存,而是让磁盘做长距离寻道操作;
  5. 根据循环N次耗时,可以算出磁头移动的平均耗时。

你这里说的是最长时间不是平均耗时,相关资料

auntyellow commented 3 years ago
  1. 根据循环N次耗时,可以算出磁头移动的平均耗时。

你这里说的是最长时间不是平均耗时

是我表述得不恰当。这种测试算出的是 长距离寻道操作(往返边缘和内侧) 的平均耗时,不是 平均寻道时间

另外,这种测试对硬盘损伤较大,听到硬盘发出的咔咔声就能体会到了,一旦测试过程中有较大震动,硬盘可能就废掉了~~~