sma*_*ins 35 solid-state-drive disk hard-drive
我准备发布一个只对常规硬盘有效的工具,而不是SSD(固态硬盘).实际上,它不应该与SSD一起使用,因为它会导致大量读/写而没有实际效果.
任何人都知道检测给定驱动器是否为固态的方法?
Shn*_*sel 37
终于可靠的解决方案!其中两个,其实!
检查/ sys/block/sdX/queue/rotation,其中sdX是驱动器名称.如果它是0,那么你正在处理SSD,1表示普通的硬盘.
我不能把它放在引入它的Linux版本上,但是它存在于Ubuntu的Linux 3.2和vanilla Linux 3.6中,并且不存在于vanilla 2.6.38中.Oracle还将其向后移植到了Unbreakable Enterprise内核5.5,该内核基于2.6.32.
还有一个ioctl来检查驱动器是否自Linux 3.3以来是旋转的,由此提交引入.但是,使用sysfs通常更方便.
你实际上可以很容易地确定旋转延迟 - 我曾经做过一次大学项目的一部分.本报告对此进行了描述.您将要跳到第7页,在那里您可以看到一些很好的延迟图表.它从大约9.3毫秒到1.1毫秒 - 下降8.2毫秒.这直接对应于60 s / 8.2 ms = 7317 RPM.
它是用简单的C代码完成的 - 这是测量位置之间a和b临时文件的部分.我们用更大和更大的b值来做这件事,直到我们一直在圆柱体周围徘徊:
/* Measure the difference in access time between a and b. The result
* is measured in nanoseconds. */
int measure_latency(off_t a, off_t b) {
cycles_t ta, tb;
overflow_disk_buffer();
lseek(work_file, a, SEEK_SET);
read(work_file, buf, KiB/2);
ta = get_cycles();
lseek(work_file, b, SEEK_SET);
read(work_file, buf, KiB/2);
tb = get_cycles();
int diff = (tb - ta)/cycles_per_ns;
fprintf(stderr, "%i KiB to %i KiB: %i nsec\n", a / KiB, b / KiB, diff);
return diff;
}
检测 SSD 并不像 dseifert 所说的那么不可能。Linux 的 libata ( http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-04/msg03625.html )已经取得了一些进展,尽管它似乎还没有为用户做好准备。
我绝对理解为什么需要这样做。这基本上是链表和数组之间的区别。对 SSD 进行碎片整理等通常会适得其反。
| 归档时间: |
|
| 查看次数: |
35788 次 |
| 最近记录: |