百科问答小站 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带我们到地狱 将在2020年全面拥抱Windows》? 
  Linux系统有哪些缺点? 
  Intel 为什么会成为 Linux 内核最大的贡献者? 
  为什么桌面领域没有一款 Linux 或 UNIX 能与 Windows 鼎足而立? 
  为什么 Python(或 Ruby、Perl 等)没有取代 Bash 成为系统 Shell? 
  用 VS Code 替代 Vim 可行吗? 
  Linux 内核的 C 代码风格是怎样的? 
  为什么Linux下要把创建进程分为fork()和exec()(一系列函数)两个函数来处理? 
  为什么 KaiOS 超越 iOS 成为印度第二大移动操作系统? 
  为什么服务器上没有HDMI接口? 

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





© 2024-05-17 - tinynew.org. All Rights Reserved.
© 2024-05-17 - tinynew.org. 保留所有权利