百科问答小站 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 网友的相关建议: 
      

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




  

相关话题

  Windows NT 内核与 Linux 内核相比哪个更安全? 
  你都私藏了哪些牛逼的命令行? 
  如何看待华为高管援引报告,称2020年鸿蒙将超Linux,成为世界第五大操作系统? 
  为什么 Android 要采用 Binder 作为 IPC 机制? 
  还有哪些像 Unix,C/C++ 一样经久耐用的软件技术? 
  想买个域名然后搭建一个网站,需要哪些东西?,特别是主机服务器问题,请有经验的帮指点下,谢谢了 
  把 string 当 enum 用,有性能损失吗? 
  Linux服务器搭建了一个PHP项目,结果内存一直在飙升,进程池里看不到异常,有没有大神帮忙解决下? 
  linux 的文件管理机制是否比 Windows 更优秀? 
  Windows 内核和 Linux 内核谁更复杂? 

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





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