你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
Eidosper - 一粒尘埃/码农/作曲,公众号一埃居(ID:eidosperhome)正在筹建中,欢迎关注。华科论道群342531142
推荐来自: 秋风暖暖 、彷徨少年时 、asayahaku 、YUANYUAN 、ufo5260987423
要回答问题请先登录或注册
世界观/人生观/价值观
1 个回答
Eidosper - 一粒尘埃/码农/作曲,公众号一埃居(ID:eidosperhome)正在筹建中,欢迎关注。华科论道群342531142
推荐来自: 秋风暖暖 、彷徨少年时 、asayahaku 、YUANYUAN 、ufo5260987423
SSD读写都有最小单位,我在做的仿真系统,读的最小单元是4k,写的单元是16k。
打个比方,假设一本书每页都刚好写一个小故事,你在一页中就能看完。但是前言比较长,要一页半。最开始的印刷是像长微博一样,连着印没有问题。但是现在改印书了,要分页,那前言一页半,后面就得往前追,于是每个故事的后一半都在下一页——这样你看一个故事要看两页,麻烦。4k对齐就是把前言的一页半改成两页,这样又恢复了每页刚好一个故事。
本来NTFS最小单元也是4k,但是NTFS系统的头恰好不是4k的倍数,就蛋疼了。传统的机械硬盘这没有任何影响,因为物理上是连续的,读取的时候都一样就像你看长微博一样。但是ssd是分开的,就像你看书一样,所以性能会有所下降。
AHCI主要是支持trim和ncq?网上查到的。
首先trim是什么?我来大体解释一下。
因为最开始的硬盘是机械硬盘,那ssd只能用一些方式来兼容机械硬盘的协议才能生存,所以出现了一个东西叫做FTL。
举个例子,机械硬盘下,你修改一个文件,就直接修改那个文件所在的磁性颗粒的极性就行了,但SSD不能这样,因为SSD只能充电(从1变0)不能放电,也不是说不能放电,放电的时候只能按照一定大小比如4K放电,充电可以按照bit充。这就有个问题,比如我有个数据“1001”存在硬盘上,我想改成“1011”,机械硬盘就直接对第2bit进行磁极翻转就行了,但ssd并不能针对第2个bit放电,只能把全部的1001都放电成1111,然后再对第2bit进行充电成1011。但是放电是很慢的,我们不如找个新的地方来写,然后等硬盘使用了一定程度后统一放电。于是就有了FTL层。
比如你新建一个文件大小4k,我们给个编号001(逻辑地址),首先ntfs会记录“文件001,状态有效”然后找ssd要4k空间,ssd就看自己的ftl表,找个4k的物理地址,比如0002,这样映射是(001,0002)。当你修改了这个文件001,其逻辑地址还是001,但是ssd会找个新的物理地址比如0003,映射就是(001,0003),你要问0002?还存折着老版本的文件。你比较牛逼,编辑了几千次,那映射就是(001,9999),然后接下来没有了,怎么办?就对0001 0002 0003 0004一起放电,擦除(放电)最小可能是16KB,所以一次就擦4个,然后0001就又可以用了。
但是你删除了001,只是ntfs的记录会变成“文件001,状态无效”,ssd的映射还存在,这样ssd还会误以为这个文件有效,假如这个文件只有4k还好说,要是4g那就比较拙计了。trim是删除的时候告诉一下ssd这个文件删除了,没空间了可以回收这里。
这个过程影响什么?假如ssd一共只有16kb,对应0001-0004,ntfs对应001-004。假如ntfs建立了001然后形成了映射(001,0001),然后删除了文件001,那么新写文件ntfs会从001-004中寻找,但是ssd就只能从0002-0004中找了,这样ssd的效率会变低。归根结底是因为ntfs和ssd各自维护一套映射表,导致上下层的数据有效性记录不一致。但是旧的ide接口协议怕是没有留下上下层交换映射表数据的api,所以效率低了。
这个过程其实比较蛋疼,因为以前的硬盘就是裸盘,直接暴露物理地址给操作系统的大概是。所以操作系统上层自己做了文件管理系统。现在ssd因为读写方式和机械硬盘不一样,但是要适应旧的文件管理系统,就只能多增加一个主控来做处理。然后上层也修修补补,增加了trim,大家都凑合用。好在这么多硕士博士堆paper,这个龃龉的部分也被各种策略搞的好了不少。ACHI大概是预留了一些之前没有用到的api什么的,现在用作trim了。毕竟IDE都上个世纪的标准了,我们也不能苛求那时候就预想到ssd会流行。
当然,个人用户已经很满意ssd的性能提升了,但是企业用户不是,所以之前的fusion io(京东在用的)自己设计了一个文件系统贯通了主控和上层,提升了不少性能。现在被sandisk花了几亿刀收购了,其实就一套硬件+文件系统api。
说了这么多,看不懂没关系,程序员和工程师都做好了,你就买个新电脑,新SSD,装个新系统就行了。死磕有我们这堆研究生和工程师呢,交给我们就好,反正我们也有钱赚。
Just enjoy it。