Для нашего проекта, написанного на 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 = ...), установить сродство, увеличить приоритет для процесса/потока до наивысшего приятного значения и типа в реальном времени (RT)
Но никакой разницы.
Вопрос: Можем ли мы полагаться на количество циклов/опросов в секунду, выполненных на ядре процессора в режиме опроса?
Есть ли способ рассчитать загрузку процессора в режиме опроса, так как процессорное использование процессора отображается на 100% сверху?
Это правильный подход для решения этой проблемы?
Окружающая среда:
- Intel (R) Xeon (R) CPU E5-2680 v3 @ 2.50GHz
- 8G баран
- Ubuntu на виртуальной машине Vmware гипервизора.
Не уверен, что это было ранее ответило, любые ссылки будут полезны.
Хорошо, почему вы опросили водителя? –
С тарифной ставкой, которую мы хотели поддержать, мы не можем получить с режимом прерывания, поэтому для этой цели для dpdk используется драйвер режима опроса (PMD). Чтобы получить пакеты в пользовательское пространство в обход ядра. – Randolf
Не добавляйте тег C для C++. – Olaf