syscall lseek () работает медленнее в Ubuntu 2.6.32 против 2.6.24 - PullRequest
0 голосов
/ 08 февраля 2019

Я выполняю следующий код на Ubuntu 14 и 18. Это на 6 раз медленнее на 18 на том же оборудовании.Есть ли что-то, что я делаю не так?

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 голосов
/ 20 февраля 2019

zx485 был прав.защита от призраков в ядре замедляла его в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...