百科问答小站 logo
百科问答小站 font logo



为什么 Linux 系统删除文件那么快? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

测试性能之前,需要明确几点:

1. 数据是真正更新到硬件上,而不是缓存里;
2. 真正的性能数据不应该大于硬件总线速度(比如总线带宽是1GB/s,测试出2GB/s的数据必然是测试方法有问题);
3. 文件系统性能数据应该指的是底层API数据,至少是命令行上,而不是图形界面的数据

Windows和Linux的一大区别就是缓存机制不同。

1. Windows的缓存是基于盘(分区的),Linux是整个操作系统有一套统一的缓存管理机制
2. Linux的缓存很大,/dev/shm一般情况下是系统内存的一半,Windows的缓存机制与Linux不同,每个分区的缓存通常在几十MB左右(WIN7时代数据,新版本不了解)。

下面是测试环节:

同样一款U盘,同样的PC,新盘格式化FAT32以后,把coreutils-8.31拷贝进去(46M,约3000个文件),在Windows 10命令行删除,需要33.24秒,在Linux 19.04上删除需要34.636秒,基本上差不多。所以,对于可移动设备,并且是关闭缓存的情况下,二者性能其实差不多。

但是在本地硬盘上(SSD):

1. Windows删除需要0.78秒,Linux只需要0.05秒
2. 首次从U盘复制到本地硬盘,Linux首轮复制过去大概需要几秒钟(<5秒),但第二轮复制只需要0.08秒,46/0.08=575MB/s,即使不考虑写放大,这个数值也超过了我这个入门级的SSD的写速度。
3. Linux在执行写操作(删除、复制)以后,执行一下sync,会有比较明显的延迟
4. Windows从U盘复制到本地,首轮复制需要7秒多,第二轮复制需要5秒
5. Windows图形界面删除文件很慢,每次都要先统计有多少个文件

所以可以得出一些结论:

1. Linux对于本地磁盘的写操作(删除、复制)并没有真正写到盘上,sync才是
2. Windows的文件系统缓存机制做的不好,比Linux性能差的多,尤其是小文件
3. Windows图形界面的开销更大

如果做一些破坏性测试(我不做这个实验了,太费机器,容易把机器搞死),比如删除一个比较庞大的代码树(Linux内核这种级别),执行一下rm -rf,返回以后马上掉电重启(不是软关机),你会发现刚才删的东西大多数都还在。而Windows的NTFS虽然删的慢,但一般情况下不会回滚很多数据。

所以,Windows文件系统性能确实做的不好,但Linux快并不一定是真的删除。

Windows文件系统慢是因为它的缓存机制设计的问题(这个机制也直接影响了Windows无法删除正在打开的文件),想了解的话,去读一下github上的fastfat源码,可以了解个大概。我个人理解是微软不会去改变这个机制,因为这套东西跟Windows内核绑定的太紧密,除非重新设计Windows,否则不太可能有巨大的优化。


user avatar   hillwood-yang 网友的相关建议: 
      

最新消息:陈小武的学生们已经被排成一排,挨个查手机了。




  

相关话题

  为什么国产操作系统总是基于现有 Linux 内核,而不是从零开始开发一个操作系统? 
  linux 的文件管理机制是否比 Windows 更优秀? 
  linux更新后无法启动时你的心情怎样、第一步怎么做? 
  ATM 系统为什么使用 Windows 而不使用 Linux? 
  在Linux下工作的程序员们,你们犯过什么可怕的错误或误操作? 
  弱弱的问一下,android手机为什么不能刷linux? 
  在Windows下用VIM来写代码,会不会很蛋痛? 
  为什么 Linux 系统删除文件那么快? 
  学了三年的 Linux 了,我现在不能立马写出一个简单的 shell 脚本,怎么回事啊? 
  为什么国产操作系统总是基于现有 Linux 内核,而不是从零开始开发一个操作系统? 

前一个讨论
C标准库的行业地位是怎么形成的?
下一个讨论
济南铁路局的D6020次列车为什么开行时间这么早?除动检车外,这是全国最早的一班高铁或动车吗?





© 2024-11-14 - tinynew.org. All Rights Reserved.
© 2024-11-14 - tinynew.org. 保留所有权利