c - OpenSSL导致丢包?奇怪的CPU使用率

标签 c linux openssl cpu-usage

我正在编写网络应用程序,从 UDP 套接字读取数据包,然后使用 OpenSSL 对其进行解密。

主要功能如下所示:

receive(){
    while(1){
        read(udp_sock);
        decrypt_packet();
    }
}

在我添加加密之前,程序一直运行良好。现在内核缓冲区和我的应用程序之间丢失了很多数据包(netstat -su - RcvbufErrors: 77123 并且还在增长;)。数据包相当大(60K),我尝试在 1Gbps 以太网上使用它(因此问题在超过 100Mbps 后开始)

听起来很正常 - 解密花费了太多时间,数据包来得太快了。问题是——发送方和接收方的 CPU 使用率从未超过 30%。

在decrypt_packet()中注释掉这条语句后问题消失: AES_ctr128_encrypt();

我的问题是 - OpenSSL 是否可能正在使用一些不计入 CPU 使用率的指令集(我使用 htop 和 Gnome 系统监视器)?如果不是,还有什么可能导致此类数据包丢失,CPU 功率是否仍可用于处理?

最佳答案

您的系统有多少个 CPU 内核?你的代码是单线程的吗?它可能会最大化单个内核,因此仅使用 25% 的可用 CPU。

关于c - OpenSSL导致丢包?奇怪的CPU使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429112/

相关文章:

c - 在 Visual Studio 中使用 PKCS#11

c - 这些函数和参数注释是什么?

c - 如何在 C 中每个 in 的末尾打印一个美元符号

c++ - NUMA 获取当前节点/核心

ssl - nginx 代理传递给 sslv3 上游

c++ - 非阻塞连接 OpenSSL

c++ - 使用 sbrk 自定义内存管理

linux - 根据列中的字段加入 2 个文件

python - 使用 scapy 和 IP 获取 MAC

c - 对 www.httpbin.org 的错误请求?