c - 为什么 MacOS 上的 c 函数 `open` 比同一台机器上的 Ubuntu VM 慢 4 倍?

标签 c macos ubuntu filesystems fcntl

为什么 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/

相关文章:

c - 我如何在 OS X Lion 上获得 GCC?

c - OS X 上的 sem_init

macos - OS X 终端在运行 "source kvm.sh"后挂起安装 vNext KVM

linux - 我该如何解决 aws ec2 "statuscheckfailed"问题?

android - Python 脚本无法运行 "android"命令

在 C 中检查链表是否为空

c - C 中数组的问题

linux - ubuntu服务器默认下载目录在哪里

条件与信号量同步

c - 共享内存和 unix domain socket 同步,不重复 shm 内容