Я пишу сетевое приложение, читая пакеты из UDP-сокетов, а затем расшифровываю их с помощью OpenSSL.
Основная функция выглядит так:
receive(){
while(1){
read(udp_sock);
decrypt_packet();
}
}
Программа работала нормально, пока ядобавлено шифрование.Теперь между буфером ядра и моим приложением потеряно много пакетов (netstat -su - RcvbufErrors: 77123 и продолжает расти;).Пакеты довольно большие (60 КБ), и я пытаюсь использовать их в сети Ethernet 1 Гбит / с (поэтому проблема начинается после превышения 100 Мбит / с)
Звучит нормально - расшифровка занимает слишком много времени, а пакеты приходят слишком быстро.Проблема в том, что загрузка ЦП никогда не превышает 30% как для отправителя, так и для получателя.
Проблема исчезает после комментирования этого утверждения в decrypt_packet (): AES_ctr128_encrypt ();
Мой вопрос - возможно ли, что OpenSSL использует некоторый набор инструкций, которые не учитываются вИспользование процессора (я использую htop и системный монитор Gnome)?Если нет, то что еще может вызвать такую потерю пакетов, если мощность процессора все еще доступна для обработки?