我正在编写网络应用程序,从 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/