微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么Mac OS上的c函数`open`〜4x慢于同一台机器上的Ubuntu VM?

如何解决为什么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 举报,一经查实,本站将立刻删除。