如果你以root用户身份运行这个C++程序,为什么它要花这么长时间才能完成

Why does this C++ program take so long to finish if you run it as a root?

本文关键字:长时间 为什么 程序 用户 root 身份 运行 如果 C++      更新时间:2023-10-16

我想通过执行以下代码清除L1、L2和L3缓存50次。但是,如果我通过键入sudo ./a.out来运行它,它会变得非常慢。另一方面,如果我只写./a.out,它将几乎立即完成执行。我不明白这是什么原因,因为我在终端中没有收到任何错误。

#include <iostream>
#include <cstdlib>
#include <vector>
#include <fstream>
#include <unistd.h>
using namespace std;
void clear_cache(){
    sync();
    std::ofstream ofs("/proc/sys/vm/drop_caches");
    ofs << "3" << std::endl;
    sync();
}

int main() {
    for(int i = 0; i < 50; i++)
        clear_cache();
    return 0;
};

您没有足够的权限作为常规用户写入此文件:

-rw-r--r-- 1 root root 0 Feb 11 15:56 /proc/sys/vm/drop_caches

只有以特权用户身份运行的版本才能工作,因此需要更长的时间。你没有得到任何错误的原因是你没有检查任何错误。

以下是最简单的检查:

#include <iostream>
#include <cstdlib>
#include <vector>
#include <fstream>
#include <unistd.h>
using namespace std;
void clear_cache(){
    sync();
    std::ofstream ofs("/proc/sys/vm/drop_caches");
    if (!ofs)
    {
        std::cout << "could not open file" << std::endl;
        exit(EXIT_FAILURE);
    }
    ofs << "3" << std::endl;
    sync();
}

int main() {
    for(int i = 0; i < 50; i++)
        clear_cache();
    return 0;
};

输出:

% ./a.out    
could not open file