使用背景:硬盘是SanDisk E81 容量2T(这个盘里面装的是SN730e,SN730e和 SN730是同一个硬盘,区别是固件不一样 e 表示外置固件)
根据@minsheng 的回复做了如下测试
使用finder右键复制时cpu占用情况,只有两个能效核心在运行
使用finder右键复制时磁盘IO只有几十到400之间
使用终端 cp命令复制时cpu占用情况,能效核心和性能核心均在运行
使用终端 cp命令复制时磁盘IO在2000到5000之间
在finder使用右键复制花了两三个小时,终端cp命令复制耗时13分钟,什么原理呢
1
dingwen07 2022-03-12 00:42:13 +08:00 via iPhone
M1Pro/Max 系统的很多操作都这样
比如安装 Xcode ,要一个小时。。。 |
2
BrettD 2022-03-12 00:45:41 +08:00 via iPhone
瓶颈是文件系统和 IO 而不是 CPU 吧
|
3
GQ1996 2022-03-12 00:55:44 +08:00
瓶颈不是 cpu ,一口气 300G 的话如果是 512G 的版本,SLC 缓存原因,会在 100 多 G 的时候拷贝速度降非常多。1T 的话 300 多 G 没什么问题。
|
4
minsheng 2022-03-12 01:31:25 +08:00 via iPhone
@dingwen07 App Store 安装很迷但是直接下载还是挺快的,这里还有一个高速解压 xip 的项目: https://github.com/saagarjha/unxip
|
6
minsheng 2022-03-12 01:32:48 +08:00 via iPhone
楼主试一下 Terminal 的 cp/mv ? Finder 干啥都挺慢的,删个 Xcode 能删死机……
|
7
minsheng 2022-03-12 01:33:39 +08:00 via iPhone
Spotlight 和 Time Machine 也要适当注意,macOS 小文件多起来各种 hook ,虽然可能比 Windows 杀毒软件好点但真没好到哪里去
|
8
felixcode 2022-03-12 01:37:09 +08:00
大概率 IO 问题,数据量大到一定程度必须写入磁盘时,磁盘的 IOPS 非常低。
https://v2ex.com/t/834674 |
9
GQ1996 2022-03-12 02:21:37 +08:00
@minsheng 对的,还有一个 bug 要注意,如果是用快捷键 command+c 复制的,要小心复制后不要用 iphone 上会读取剪切板的 app 。不然有一个进程会把 command C 的所有文件读取一遍,导致把要复制的那部分 io 都抢完了。随便找段文字复制一下再用手机,这个 universal clipboard 的 bug 已经我一直能复现。
|
10
yoyoyoyolol OP |
11
yoyoyoyolol OP @minsheng 虽然使用 cp 命令复制块很多,但是复制出来的文件大小和源文件大小不一致,测试文件夹 172GB ,使用 cp 复制后的文件夹 358GB ,使用 finder 右键复制出来的大小是一致的 172GB ,移动硬盘格式和 macbook 硬盘格式一致为 APFS 格式
|
12
yoyoyoyolol OP @minsheng 请忽略那个文件大小不一致的问题,那个是因为右键显示简介里面文件大小刷新的太慢了😅
|
13
Pierson 2022-03-12 08:35:07 +08:00
macOS QOS 的问题,记得以前在哪里看到一篇博文提到,macOS 会根据任务的优先级而不是实际性能需要进行调控。
|
14
jdjingdian 2022-03-12 10:09:08 +08:00
m1 系列外接 usb 硬盘,是没法使用 uasp 加速的( Intel 的有),所以我的移动硬盘在 Intel Mac 上能跑 500MB/s ,在 m1 上只能跑到 300MB/s
|
15
minsheng 2022-03-12 11:08:55 +08:00
@GQ1996 那要是 Command C 了一个 Xcode ,iPhone 不就直接卡死了吗😂我记得 Universal Clipboard ,应该说 UIKit 的 Clipboard API 整体都是同步的🤦♂️
|
16
minsheng 2022-03-12 11:16:24 +08:00
@yoyoyoyolol Apple 在 Snow Leopard 的时候引入了一个系统级别的任务队列管理系统,Grand Central Dispatch ,现在想来这东西怕不是也是为了 iPhone 设计的。它的一个功能就是可以创建有优先级的任务队列。你可以选择如 background (清理垃圾?)、userInitiated (导出?)、userInteractive ( UI 任务)这样的优先级。
这个优先级在 macOS 上之前的作用主要是在多个线程同时执行的情况下,低优先级的线程会抢不到计算资源。这还导致了 macOS 用了几十年的 spin lock 被弃用了,因为 spin lock+有优先级的调度会导致死锁😂。 到 Apple Silicon 出来,大家发现,如果你选 background 优先级,那么不只是抢计算资源,低优先级的线程会直接跑在小核上,任何其它系统设置都改不了。其实这个挺好的,因为 MacBook 之前的一大问题就是很多这种后台任务可以触发 Intel 的睿频,导致风扇狂转续航爆炸。但是具体到这里就会导致 Finder 变慢了。 对于你说的 cp 文件大小不一致,其实我觉得可能是会存在的。APFS 是支持文件 COW 的,如果你原地复制一个大文件,APFS 不会真的拷贝任何数据,而是链接回原文件。如果你对两者之一做了修改,才会真正进行文件复制。那如果你原文件 A 、B 其实是一个文件,然后按顺序复制到别的宗卷,就会出现这个情况:复制 A 的时候,发现在第二个宗卷,没法 COW 优化,复制一份;复制 B 的时候,已经忘了自己复制过 A 了,那再复制一份吧。最后导致总文件增大。 注意,如果是同宗卷复制,那不会出现这个情况,因为复制出来的 C 、D 和原来的 A 、B 指向同一个物理意义上的文件。 |
17
yoyoyoyolol OP @minsheng 感谢大佬分享
|
18
yoyoyoyolol OP |
19
neiltroyer849 2022-03-12 16:15:51 +08:00
想要插画问一句 po 主的 cpu 历史记录看不同内核运作情况的那个 app 是啥来着
|
20
yoyoyoyolol OP mac 系统的活动监视器选到 cpu ,双击底部下面的 CPU 折线图就弹出来了
|
21
yoyoyoyolol OP @neiltroyer849 看 20 楼
|