问题描述
为什么MacOS的打开文件速度比同一台计算机上的Ubuntu VM慢4倍?
使用与发现此行为的代码相似的设置的MWE
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
int main()
{
struct timespec tstart={0,0},tend={0,0};
clock_gettime(CLOCK_MONOTONIC,&tstart);
int fd = open("/path/to/testfile.txt",O_RDONLY | O_CLOEXEC,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
clock_gettime(CLOCK_MONOTONIC,&tend);
printf("%.0f µs\n",(((double)tend.tv_sec + 1.0e-9*tend.tv_nsec) - ((double)tstart.tv_sec + 1.0e-9*tstart.tv_nsec)) * 1.0e6);
return 0;
}
在具有SSD的MacBook Pro上,MacOS 10.15.7,没有SIP,没有文件库
51 µs
46 µs
49 µs
30 µs
46 µs
同一台计算机上的Ubuntu 20.04 VM(并行)
12 µs
12 µs
12 µs
13 µs
13 µs
解决方法
在open
函数中花费的时间不太可能与磁盘或备份文件系统类型有关。相反,这主要与操作系统对系统调用的实现有关,尤其可能与文件系统抽象模型有关。 Linux是一个单片内核,没有涉及不同的特权域或内存空间,并且旨在使系统调用非常快。至少MacOS X最初是建立在Apple几十年来一直热衷于微内核的东西上的,如果还是那样的话,系统调用的成本可能会更高。如今,他们甚至可以使用防病毒软件或类似的东西。