为什么 MacOS 在同一台机器上打开文件的速度比 Ubuntu 虚拟机慢 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;
}
MacOS 10.15.7,没有 SIP,没有文件库,在带有 SSD 的 MacBook Pro 上
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 是建立在苹果几十年来一直热衷的微内核之上的,如果它仍然是那样的话,系统调用的成本可能要高得多。如今,它们甚至可能会接入防病毒软件或类似软件。
关于c - 为什么 MacOS 上的 c 函数 `open` 比同一台机器上的 Ubuntu VM 慢 4 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64656255/