我正在寫網絡應用程序從UDP套接字讀取數據包,然後使用OpenSSL解密它們。由OpenSSL引起的數據包丟失?奇怪的CPU使用
主要功能如下:使用
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功率仍可用於處理?
我有2個內核,但是我發佈了每個內核的使用率,所以我的應用程序使用了一個線程的25%的功耗。 – harnen