我正在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秒 硬件是一样的
答案 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