Загрузка ЦП в режиме опроса

Для нашего проекта, написанного на C++, мы запускаем ядра процессора в режиме опроса для опроса драйвера (dpdk), но в режиме опроса загрузка процессора отображается как 100% в top/htop. Когда мы начали наблюдать сбои при отбрасывании пакетов, мы подсчитали количество циклов или опросов, выполняемых в секунду на ядре (зависит от скорости и типа процессора).

Пример кода, используемого для расчета количества опросов в секунду с накладными расходами на функцию опроса драйвера и без него, приведен ниже.

#include <iostream>
#include <sys/time.h>
int main() {
    unsigned long long counter;
    struct timeval tv1, tv2;
    gettimeofday(&tv1, NULL);
    gettimeofday(&tv2, NULL);
    while(1) {
        gettimeofday(&tv2, NULL);
        //Some function here to measure the overhead
        //Poll the driver
        if ((double) (tv2.tv_usec - tv1.tv_usec) / 1000000 + (double) (tv2.tv_sec - tv1.tv_sec) > 1.0) {

            std::cout << std::dec << "Executions per second = " << counter << " per second" << std::endl;
            counter = 0;
            gettimeofday(&tv1, NULL);
        }
        counter++;
    }
}

Результаты подсчета опросов различаются, иногда мы видим сбой, и число снижается на 50% или ниже, чем обычно, возможно, это проблема с планированием задачи Linux, поэтому изолируйте ядра с помощью командной строки Linux (isolcpus=... ), Установите сходство, Увеличьте приоритет процесса/потока до наивысшего значения nice и тип в режиме реального времени (RT)

Но никакой разницы.

Итак, вопросы: можем ли мы полагаться на количество циклов/опросов в секунду, выполняемых ядром процессора в режиме опроса?

Есть ли способ рассчитать загрузку ЦП в режиме опроса, поскольку загрузка ЦП ядер отображается как 100% сверху?

Это правильный подход к этой проблеме?

Окружающая обстановка:

  • Процессор Intel(R) Xeon(R) E5-2680 v3 @ 2,50 ГГц
  • 8G оперативной памяти
  • Виртуальная машина Ubuntu на гипервизоре Vmware.

Не уверен, что на это ранее был дан ответ, любые ссылки будут полезны.


person Randolf    schedule 03.12.2015    source источник
comment
Ну зачем ты опрашиваешь водителя?   -  person Martin James    schedule 04.12.2015
comment
При скорости передачи пакетов, которую мы хотели поддерживать, мы не можем получить режим прерывания, поэтому для этой цели dpdk имеет драйвер режима опроса (PMD). Чтобы пакеты попадали в пользовательское пространство в обход ядра.   -  person Randolf    schedule 04.12.2015
comment
Не добавляйте тег C для C++.   -  person too honest for this site    schedule 04.12.2015


Ответы (2)


Нет, вы не можете полагаться на «количество циклов/опросов в секунду, выполняемых ядром процессора в режиме опроса».

Это фундаментальный аспект среды выполнения в традиционной операционной системе, такой как та, которую вы используете: массовый Linux.

В любой момент может быть запущено тяжеловесное задание cron, которое требует немедленного использования некоторых ресурсов, и планировщик ядра решает упредить ваше приложение и сделать что-то еще. Это будет лишь одной из сотен возможных причин, по которым ваш процесс будет вытеснен.

Даже если вы работаете как root, вы не будете полностью контролировать ресурсы вашего процесса.

Тот факт, что вы видите такое большое, случайное, несоответствие в ваших показателях опроса, должен быть большой подсказкой: многозадачные операционные системы не работают так.

Существуют и другие операционные системы «реального времени», в которых приложения пользовательского пространства могут иметь определенные гарантии «уровня обслуживания», т. е. минимальные доступные ресурсы ЦП или ввода-вывода, на которые вы можете положиться, чтобы гарантировать минимальное количество раз, которое конкретная последовательность кода может быть использована. выполнено в секунду или какой-либо другой показатель.

В Linux есть несколько вещей, с которыми можно повозиться, например, уровень процесса nice и некоторые другие вещи. Но это все равно не даст вам никаких абсолютных гарантий.

Тем более, что вы работаете даже не на голом железе, а внутри виртуального гипервизора. Таким образом, на ваш фактический профиль выполнения влияет не только ваша хост-операционная система, но и ваша гостевая операционная система!

Единственный способ гарантировать нужный вам показатель — это использовать операционную систему реального времени вместо Linux. Несколько лет назад я слышал о расширениях реального времени для ядра Linux (Google food: «linux rtos»), но в последнее время почти ничего об этом не слышал. Я не верю, что основные дистрибутивы Linux включают это расширение ядра, поэтому, если вы хотите пойти по этому пути, вы будете предоставлены сами себе.

person Sam Varshavchik    schedule 03.12.2015
comment
Я попытался переключиться на ядро ​​​​реального времени (RT linux для Ubuntu) с ядра с низкой задержкой для этого, но это не имело никакого значения. Я убедился, что в Linux нет других процессов, все службы остановлены (включая cron), а ядра изолированы, а приоритет изменен (используя nice и chrt -r 99), но без разницы. вы правы, основной поток не поддерживает RT, и это отдельный патч, который нужно применить и перекомпилировать ядро ​​​​с включенной опцией Realtime. - person Randolf; 04.12.2015
comment
Ядро реального времени не принесет вам пользы, если вы используете его внутри гипервизора. Как я уже упоминал в своем ответе, вы должны работать на голом железе. Ядро реального времени не принесет особой пользы, если оно работает на виртуальном оборудовании, которое зависит от упреждающей многозадачности ОС хоста. - person Sam Varshavchik; 04.12.2015
comment
Я бы также сказал, что подобный опрос не имеет смысла для гипервизора. Имеет смысл опрашивать только что-то внешнее, что может произойти спонтанно, но это невозможно в виртуальной среде (если только это не реализовано в гипервизоре на голом железе). - person David Schwartz; 04.12.2015
comment
Я вспоминаю, как изучил основные принципы теории упреждающей многозадачности операционных систем на курсе проектирования операционных систем моего колледжа. Это кажется мне довольно базовым, фундаментальным знанием; и я хотел бы думать, что наличие хотя бы некоторого фундаментального понимания принципов вытесняющей многозадачности операционных систем будет обязательной предпосылкой для работы над чем-то, что включает в себя специальное оборудование и виртуальный гипервизор. - person Sam Varshavchik; 04.12.2015
comment
Благодарим вас за ваш отзыв, поэтому, резюмируя, опрос не имеет смысла на виртуальном оборудовании, поскольку у нас есть два уровня планирования: один на гостевой системе, а другой на хосте. - person Randolf; 04.12.2015
comment
Да, это почти все. - person Sam Varshavchik; 04.12.2015

современный Linux на процессоре Intel предоставляет способы сделать так, чтобы цикл опроса полностью занимал ядро ​​процессора почти на 100%. вещи, которые вы не учли: удалите системный вызов, который вызовет переключение контекста, отключите гиперпоточность или не используйте другой поток, который находится в той же строке кэша, отключите динамическое повышение частоты процессора в BIOS, переместите обработку прерываний.

person Sun Yin    schedule 19.11.2017