GoobeyGoobs
2020-11-24T15:49:55+00:00
最近看到很多讨论SSD掉速的帖子 心想自己会一点按键精灵(大概就是简化版的VBS) 打算写个“加热”冷数据的软件
不出意外 最终被按键精灵孱弱的磁盘操作打败了(不能读取1G以上的文件 读取文件指定位置数据时不能超过8K字节)
只能请会其它语言的同学来完成了
0.
各参数在界面上可由用户手动修改
可以让用户指定跳过某些扩展名的文件 例如媒体文件压缩包备份等 这些要么用得少要么对速度要求不高还普遍很大 主控总不至于等到冷到读不出来了都不主动挪数据吧
1.获取指定盘符/目录下包含所有子文件夹内的文件
可以通过 dir /a-d /s>"保存位置" 来间接实现 如果有现成的命令或者轮子那就更方便了
2.判断文件速度是否正常及相关操作
只测试文件最前指定长度的内容 例如50MB(当然如果是小于这个大小的文件就读取整个文件) 以节约运行时间
伪代码:
sizetoread=min(文件大小,50M)
starttime=获取系统当前至少精确到毫秒的时间
读取文件前sizetoread个字节
if 当前时间-starttime<=3ms then
//不考虑速度 用时小于3ms就算测试通过 排除掉大多数速度不是特别慢的小文件 同时防止下面一行出错
elseif sizetoread/(当前时间-starttime)<100MB/s then //速度低于100MB/s(感觉所用时间再多减个1-2ms会更好点)
//2个框至少选一个
if checkbox_保存较慢文件的信息 then
将文件信息(全路径 大小 速度 修改时间等 需要前面多设几个变量)保存至文件供用户分析
end
if checkbox_立即修复 then
复制文件到同目录,删除原文件,将复制的文件改回原文件名
end
end
定期进PE运行一次 直到新固件发布
[s:ac:呆]虽然我这两天看,觉得这个问题跟“数据冷热”没关系……
我看大多数人的问题是系统盘,这个你得用macrium reflect之流做镜像+格式化+恢复。
你非信冷数据这种说法的话用shell壳/pyhton派森这种的脚本语言最简单,shell我不会,python写for i in os.listdir(),shutil.copy2(i, i2),shutil.rmtree(i)。不过我家仓库SSD盘当初拷GTA5的时候就会掉速[s:ac:呆]我就不凑这个热闹了
Reply to [pid=473176581,24450238,1]Reply[/pid] Post by [uid=38460730]王胡桃[/uid] (2020-12-03 00:07)
虽然我也觉得跟数据“冷热”应该关系不是很大
但是这几天看不少人发的hdtune图 连续几次的测试曲线包括最低点都几乎完全重叠 而且很多人反映原先读起来很慢的数据重新复制一下就恢复了 有理由相信这些SSD上确实存在一些速度非常慢的文件
按照楼主思路用C++简单实现了一个扫描低速的命令行工具(实现很渣,大佬轻喷),LZ有需要的话可以通过命令行调用然后自行依据输出的结果做进一步处理[s:a2:诶嘿]
不保证没bug,目前中文路径之类的问题应该是没有的
不保证win7可以用
回写文件部分暂未实现主要是基于数据安全的考虑( 毕竟随手码出来的,而且拿来扫整个盘弄不好把数据搞丢了就麻烦大了 [s:a2:惊])。
使用方法:
ColdDataFinder <你要扫描的路径> <速度限制> <结果汇总文件>
例如你要扫D盘,低于100MB/s的就认为是冷数据的问题文件,结果汇总到E:\xxx.txt就是:
ColdDataFinder D:\ 100 E:\xxx.txt
如果结果文件已经存在会有一个提示,确认要覆盖的话输入y然后回车即可。
默认过滤rar 7z zip mp4 avi mkv这几个格式,有需要的可以自己加上然后重新编译。
根据我自己的简单测试,我在代码中加了过滤小于1kb文件的设置,过小的文件计时误差会较大最终结果可能超过3ms了[s:a2:笑]。
随附的exe因为用了一些win10的新特性(主要是命令行界面支持UTF8以较好的支持中文等带Unicode字符路径的输出),所以请至少使用1803(版本号17134)以上的win10。
由于采用了静态链接运行时,所以应该没什么其他的运行库依赖,我在优启通PE下测试过是可以正常使用的。
代码基于GPLV3许可,用了一些C++17的特性,除此之外没有用额外的库,比较新的编译器应该都可以正常编译(我用的MSVC 2019)。
SHA-256:
ColdDataFinder.exe B2B842BBB165A1F0C2C194C3F106D1E269A356658EC52065E7CF8842E404B07E
[attach]./mon_202012/03/9aQ5-2gd8Zd.7z?filename=ColdDataFinder%2e7z[/attach]
[attach]./mon_202012/03/9aQ5-2cq2K3.7z?filename=%E6%BA%90%E7%A0%81%2e7z[/attach]
你说这个方法轮子妈已经第一时间尝试过了
没效果
另外我也倾向于和冷热数据无关
Reply to [pid=473210720,24450238,1]Reply[/pid] Post by [uid=60810552]wtof[/uid] (2020-12-03 07:10)
C++大佬出现!
看了几遍源码 大半都看不懂
不知道是不是系统环境原因(20H2 非PE) 大多数盘符都没有返回任何结果(包括测试机械盘) 7个盘符都是测试几秒就结束了且只有C盘返回了1个结果 测试指定目录有时能返回大量结果 原因查明 CMD需要管理员权限
但是这个参数似乎不能加双引号 导致无法单独测试带空格的目录
Reply to [pid=473211150,24450238,1]Reply[/pid] Post by [uid=6680916]xinxindsq[/uid] (2020-12-03 07:16)
[url]https://bbs.nga.cn/read.php?tid=24455543[/url]
今天看到这个帖子 看起来确实跟数据写入的时间关联非常大
更重要的是 数据重写后速度完全恢复 只不过他用的这个软件效率太低了
[quote][pid=473384349,24450238,1]Reply[/pid] Post by [uid=1698382]死寂天空[/uid] (2020-12-03 17:24):
C++大佬出现!
看了几遍源码 大半都看不懂
不知道是不是系统环境原因(20H2 非PE) 大多数盘符都没有返回任何结果(包括测试机械盘) 7个盘符都是测试几秒就结束了且只有C盘返回了1个结果 测试指定目录有时能返回大量结果 原因查明 CMD需要管理员权限
但是这个参数似乎不能加双引号 导致无法单独测试带空格的目录[/quote]我晚点看一下……我自个测试是没啥毛病的,空格那个我没试,按理说引号我这不感知的,你看下是不是全半角的问题?
[quote][pid=473389210,24450238,1]Reply[/pid] Post by [uid=1698382]死寂天空[/uid] (2020-12-03 17:40):
[url]https://bbs.nga.cn/read.php?tid=24455543[/url]
今天看到这个帖子 看起来确实跟数据写入的时间关联非常大
更重要的是 数据重写后速度完全恢复 只不过他用的这个软件效率太低了[/quote]大概是是因为那个软件在读写之后还有再读取和校验的过程,而且似乎空白数据它也会进行同样的操作。
这个得用低级IO去挪文件页块
拿高级IO没啥用的, 到了底层一样被系统合并掉.......
Reply to [pid=473384349,24450238,1]Reply[/pid] Post by [uid=1698382]死寂天空[/uid] (2020-12-03 17:24)
空格问题我拿GTA V随便测试了一下没有复现,你是带空格的中文路径吗?
[img]https://img.nga.178.com/attachments/mon_202012/03/9aQ5-92dtZeT3cSov-ez.jpg.medium.jpg[/img]
Reply to [pid=473399182,24450238,1]Reply[/pid] Post by [uid=60810552]wtof[/uid] (2020-12-03 18:14)
I:\>ColdDataFinder "I:\Game Record\" 100 "I:\123.txt"
Usage: ColdDataFinder <start path> <speed limit by MB/s> <result file path>
ColdDataFinder D:\ 100 E:\xxx.txt
I:\>ColdDataFinder "I:\Game Record" 100 "I:\123.txt"
Check complete!
Slow file: 0 Total file: 6 Total file size:8.22787 MB
又测试了下 引号是可以用的 看样子是目录后不能带"\"
Reply to [pid=473416498,24450238,1]Reply[/pid] Post by [uid=42768286]CXsAEhR2K9H7[/uid] (2020-12-03 19:22)
这个掉速跟IO或者垃圾回收合并什么的并没有关系 本质上是文件所在的cell距上次写入过久掉电太多(或者其他什么原因)导致主控读取困难
重新复制文件 写入是最新的 速度自然就上来了
Reply to [pid=473491152,24450238,1]Reply[/pid] Post by [uid=62621869]量产型红色小兵[/uid] (2020-12-04 01:02)
固件相当于SSD的操作系统 告诉主控该怎么运行
现在西数爆出的这个掉速事件 说明西数的固件这方面设置得太保守或者干脆就是忘了设置了
正常情况下主控应该在固件的算法指引下定期扫描所有数据 把掉电比较多的数据重写以保证数据安全性和读取速度
Reply to [pid=473211150,24450238,1]Reply[/pid] Post by [uid=6680916]xinxindsq[/uid] (2020-12-03 07:16)
这次官方还没有公开原因吗?
不是冷数据, 总不会是NAND本身质量不统一然后主控靠策略在掩盖吧?
技术上的事儿搞不清楚,实测是D盘用了一年多成狗牙了,最低的掉到几MB,整个剪切走再剪切回来,恢复到四五百(SATA蓝盘),
买了个970EP2T,这盘扔着算了
Reply to [pid=473490739,24450238,1]Reply[/pid] Post by [uid=1698382]死寂天空[/uid] (2020-12-04 01:00)
写的比较简单 检查就直接拿API随便测了一下,多包涵哈[s:ac:哭笑]