如何解决为什么Mac OS上的c函数`open`〜4x慢于同一台机器上的Ubuntu VM?
为什么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几十年来一直热衷于微内核的东西上的,如果还是那样的话,系统调用的成本可能会更高。如今,他们甚至可以使用防病毒软件或类似的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。