在ubuntu 2.6.32和2.6.24中,syscall lseek()速度较慢

时间:2019-02-08 16:51:01

标签: linux performance ubuntu

我正在ubuntu 14和18上运行以下代码。在相同的硬件上,它在18上的运行速度慢6倍。我在做错什么吗?

main(int argc, char *argv[])
{
        int fd;
        off_t m;
        time_t start, ed;
        int i, k;

        if (argc<2) exit(0);

        fd = open(argv[1],O_RDWR|O_CREAT);
        if (fd<0) {
                printf("cannot open file %s\n", argv[1]);
                exit(0);
        }

        start = time(0L);
        for(k=0; k<100; ++k) {
                for(i=0;i<500000;++i) {
                        m = lseek(fd, 0, 0);
                        if (m== -1) {
                                printf("lseek failed\n");
                                exit(0);
                        }
                }
        }
        ed = time(0L);
        printf("Time: %ld\n",ed-start);
}

在ubuntu 14上,这需要4秒钟 在ubuntu 18上,需要24秒 硬件是一样的

1 个答案:

答案 0 :(得分:3)

zx485是正确的。内核中的Spectre防护将其速度降低了6倍。 在redhat 7上通过以下禁用保护功能将其恢复为正常状态。

# echo 0 > /sys/kernel/debug/x86/pti_enabled
# echo 0 > /sys/kernel/debug/x86/retp_enabled
# echo 0 > /sys/kernel/debug/x86/ibrs_enabled