那么写入1000字节的文件需要用到一个簇(共两个扇区),共使用2t的时间~
再假如一个扇区就是一个簇,每次写一个扇区依然需要t的时间。
那么写入1000字节的文件需要用到两个簇(共两个扇区),使用时间依然是2t啊
顺便问下,所谓4k对齐就是指的一个簇占4k大小吗?
那闪存里的块与页和磁盘的扇区与簇是同样的关系么?
5 个解决方案
#1
望前辈指点。
#2
严格来说,簇是硬盘的一个概念,不是文件系统的概念,但是MS为了后向兼容,用了这个概念。
为了避免歧义,这里用 “block” 代替簇,块是文件系统概念。
对于硬盘来说,两次写硬盘,每次写512字节所用的时间,要远远比一次写入1024字节的时间要长,甚至于接近2倍。
这就是为什么说,大的block能提升硬盘吞吐量的原因。
4k对齐包含两种可能:
其一是处理器MMU的概念,因为硬盘同时作为系统的交换分区,所以,如果处理器的页大小是4k,那么,
对于交换分区的访问,必然是按照4k每block进行访问的。
其二是在SSD中,硬盘厂商会强调一些,诸如:4k以上的block能达到更高性能,这里与SSD内部flash结构
相关。
一般来说,闪存中block不对应任何文件系统概念,闪存中page,对应文件系统的block概念,闪存中没有概念
对应扇区。
闪存中,每个block要远远大于page,通常64或128 pages对应一个block。
而闪存中每个block则512 到 16k 大小不等。
文件系统通常来说block在512到32k不等,更大的则比较少见。
为了避免歧义,这里用 “block” 代替簇,块是文件系统概念。
对于硬盘来说,两次写硬盘,每次写512字节所用的时间,要远远比一次写入1024字节的时间要长,甚至于接近2倍。
这就是为什么说,大的block能提升硬盘吞吐量的原因。
4k对齐包含两种可能:
其一是处理器MMU的概念,因为硬盘同时作为系统的交换分区,所以,如果处理器的页大小是4k,那么,
对于交换分区的访问,必然是按照4k每block进行访问的。
其二是在SSD中,硬盘厂商会强调一些,诸如:4k以上的block能达到更高性能,这里与SSD内部flash结构
相关。
一般来说,闪存中block不对应任何文件系统概念,闪存中page,对应文件系统的block概念,闪存中没有概念
对应扇区。
闪存中,每个block要远远大于page,通常64或128 pages对应一个block。
而闪存中每个block则512 到 16k 大小不等。
文件系统通常来说block在512到32k不等,更大的则比较少见。
#3
不太理解,往一个包含两个扇区的簇里写内容为什么比往两个包含一个扇区的簇里写内容快。
操作的单元都是扇区,操作的都是两个扇区。为什么把两个扇区作为一个簇来处理就能获得更快的写入速度
#4
交易开销大,好比,你买瓶醋和酱油,你觉得你跑两趟花的时间长还是跑一趟花的时间长?
#5
其实很简单。
1 Flash 的页大小现在都是 4KB 或 8KB 了。而写 NAND Flash 必须先整块(一般 128 页)擦除,再逐页写入,每页只能写一次。
2 文件系统的系统部分所占用的长度,与扇区大小有关。当扇区大小等于 4KB 时,系统部分的长度(也就是数据部分的起始点)就一定是页长度的整数倍。而扇区大小为 512B 时,这个起点就可以落在某一页的中间。
3 当逻辑簇的边界都是在 Flash 物理页的中间时,每一个写命令不是只写不完整的页,就是对 Flash 页的覆盖写,而不是写一个整个新页。但 Nand Flash 每次整块擦除后每页只支持一次写。这样,就要将该页中已有的内容和新写入的内容缓存起来,写入一个新页。这样,原本一次可以完成的页写,就要分成多次,并占用多页。一般是两倍。
4 更麻烦的是,一个新擦除的块(一般是 128 页)很快就被一个个不完整的页消耗完了。这样又需要擦除一个新块,再将有效的页 Copy 过去(这叫做 Merge)。
所以,使用小扇区不仅性能差,Flash 也会更快地耗尽它的可用擦写周期。
避免这样做也有一些办法,例如微调整个 U 盘的容量(减少一点),使系统区的长度恰好是 Flash 页的整数倍。
1 Flash 的页大小现在都是 4KB 或 8KB 了。而写 NAND Flash 必须先整块(一般 128 页)擦除,再逐页写入,每页只能写一次。
2 文件系统的系统部分所占用的长度,与扇区大小有关。当扇区大小等于 4KB 时,系统部分的长度(也就是数据部分的起始点)就一定是页长度的整数倍。而扇区大小为 512B 时,这个起点就可以落在某一页的中间。
3 当逻辑簇的边界都是在 Flash 物理页的中间时,每一个写命令不是只写不完整的页,就是对 Flash 页的覆盖写,而不是写一个整个新页。但 Nand Flash 每次整块擦除后每页只支持一次写。这样,就要将该页中已有的内容和新写入的内容缓存起来,写入一个新页。这样,原本一次可以完成的页写,就要分成多次,并占用多页。一般是两倍。
4 更麻烦的是,一个新擦除的块(一般是 128 页)很快就被一个个不完整的页消耗完了。这样又需要擦除一个新块,再将有效的页 Copy 过去(这叫做 Merge)。
所以,使用小扇区不仅性能差,Flash 也会更快地耗尽它的可用擦写周期。
避免这样做也有一些办法,例如微调整个 U 盘的容量(减少一点),使系统区的长度恰好是 Flash 页的整数倍。
#1
望前辈指点。
#2
严格来说,簇是硬盘的一个概念,不是文件系统的概念,但是MS为了后向兼容,用了这个概念。
为了避免歧义,这里用 “block” 代替簇,块是文件系统概念。
对于硬盘来说,两次写硬盘,每次写512字节所用的时间,要远远比一次写入1024字节的时间要长,甚至于接近2倍。
这就是为什么说,大的block能提升硬盘吞吐量的原因。
4k对齐包含两种可能:
其一是处理器MMU的概念,因为硬盘同时作为系统的交换分区,所以,如果处理器的页大小是4k,那么,
对于交换分区的访问,必然是按照4k每block进行访问的。
其二是在SSD中,硬盘厂商会强调一些,诸如:4k以上的block能达到更高性能,这里与SSD内部flash结构
相关。
一般来说,闪存中block不对应任何文件系统概念,闪存中page,对应文件系统的block概念,闪存中没有概念
对应扇区。
闪存中,每个block要远远大于page,通常64或128 pages对应一个block。
而闪存中每个block则512 到 16k 大小不等。
文件系统通常来说block在512到32k不等,更大的则比较少见。
为了避免歧义,这里用 “block” 代替簇,块是文件系统概念。
对于硬盘来说,两次写硬盘,每次写512字节所用的时间,要远远比一次写入1024字节的时间要长,甚至于接近2倍。
这就是为什么说,大的block能提升硬盘吞吐量的原因。
4k对齐包含两种可能:
其一是处理器MMU的概念,因为硬盘同时作为系统的交换分区,所以,如果处理器的页大小是4k,那么,
对于交换分区的访问,必然是按照4k每block进行访问的。
其二是在SSD中,硬盘厂商会强调一些,诸如:4k以上的block能达到更高性能,这里与SSD内部flash结构
相关。
一般来说,闪存中block不对应任何文件系统概念,闪存中page,对应文件系统的block概念,闪存中没有概念
对应扇区。
闪存中,每个block要远远大于page,通常64或128 pages对应一个block。
而闪存中每个block则512 到 16k 大小不等。
文件系统通常来说block在512到32k不等,更大的则比较少见。
#3
不太理解,往一个包含两个扇区的簇里写内容为什么比往两个包含一个扇区的簇里写内容快。
操作的单元都是扇区,操作的都是两个扇区。为什么把两个扇区作为一个簇来处理就能获得更快的写入速度
#4
交易开销大,好比,你买瓶醋和酱油,你觉得你跑两趟花的时间长还是跑一趟花的时间长?
#5
其实很简单。
1 Flash 的页大小现在都是 4KB 或 8KB 了。而写 NAND Flash 必须先整块(一般 128 页)擦除,再逐页写入,每页只能写一次。
2 文件系统的系统部分所占用的长度,与扇区大小有关。当扇区大小等于 4KB 时,系统部分的长度(也就是数据部分的起始点)就一定是页长度的整数倍。而扇区大小为 512B 时,这个起点就可以落在某一页的中间。
3 当逻辑簇的边界都是在 Flash 物理页的中间时,每一个写命令不是只写不完整的页,就是对 Flash 页的覆盖写,而不是写一个整个新页。但 Nand Flash 每次整块擦除后每页只支持一次写。这样,就要将该页中已有的内容和新写入的内容缓存起来,写入一个新页。这样,原本一次可以完成的页写,就要分成多次,并占用多页。一般是两倍。
4 更麻烦的是,一个新擦除的块(一般是 128 页)很快就被一个个不完整的页消耗完了。这样又需要擦除一个新块,再将有效的页 Copy 过去(这叫做 Merge)。
所以,使用小扇区不仅性能差,Flash 也会更快地耗尽它的可用擦写周期。
避免这样做也有一些办法,例如微调整个 U 盘的容量(减少一点),使系统区的长度恰好是 Flash 页的整数倍。
1 Flash 的页大小现在都是 4KB 或 8KB 了。而写 NAND Flash 必须先整块(一般 128 页)擦除,再逐页写入,每页只能写一次。
2 文件系统的系统部分所占用的长度,与扇区大小有关。当扇区大小等于 4KB 时,系统部分的长度(也就是数据部分的起始点)就一定是页长度的整数倍。而扇区大小为 512B 时,这个起点就可以落在某一页的中间。
3 当逻辑簇的边界都是在 Flash 物理页的中间时,每一个写命令不是只写不完整的页,就是对 Flash 页的覆盖写,而不是写一个整个新页。但 Nand Flash 每次整块擦除后每页只支持一次写。这样,就要将该页中已有的内容和新写入的内容缓存起来,写入一个新页。这样,原本一次可以完成的页写,就要分成多次,并占用多页。一般是两倍。
4 更麻烦的是,一个新擦除的块(一般是 128 页)很快就被一个个不完整的页消耗完了。这样又需要擦除一个新块,再将有效的页 Copy 过去(这叫做 Merge)。
所以,使用小扇区不仅性能差,Flash 也会更快地耗尽它的可用擦写周期。
避免这样做也有一些办法,例如微调整个 U 盘的容量(减少一点),使系统区的长度恰好是 Flash 页的整数倍。