TCP получает использование 100% CPU

Я читаю высокочастотные данные через tcp и со следующим кодом

 while (1) {
lrev = recv(fd, buff, 80, MSG_WAITALL);
dowork();
}

Я запускаю этот код через поток и назначил этот поток для конкретного ядра процессора. Я вижу, что конкретное ядро ​​использует 100% CPU. Это потому что цикл while (1)? Это хорошо или плохо для латентности?

Мой процесс имеет 5 потоков, и каждый поток работает на отдельном ядре. Мое общее использование процессора составляет около 400%.

Спасибо

0

Решение

  • Я вижу, что конкретное ядро ​​использует 100% CPU. Это потому что цикл while (1)?

Мы не видим весь ваш код, но некоторое время (1) обрабатываем неблокирующие функции обычно будет вращаться со скоростью 100% на процессоре, к которому он привязан

  • Это хорошо или плохо для латентности?

Для систем, очень чувствительных к задержке, это обычно хорошо (если вы хотите минимизировать время / задержку между прибытием пакета на сетевую карту и временем, когда вы начали его обрабатывать)

Однако ваш звонок, чтобы получить с MSG_WAITALL может заблокировать, что было бы плохо для вашего времени ожидания

Этот флаг запрашивает выполнение операционного блока до тех пор, пока полный запрос не будет удовлетворен.

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

РЕДАКТИРОВАТЬ:

Как прокомментировал @ Captain Obvlious, вы должны проверить значение, возвращаемое recv

2

Другие решения


По вопросам рекламы [email protected]