如何优化用于数据包转发的UDP Socket以提升吞吐量?
UDP Socket数据包转发性能优化问题
我正在通过UDP Socket实现数据包转发:流量生成器向UDP Socket发送数据包,UDP Socket仅交换源地址和目的地址后将数据包回传给流量生成器,由其记录网络指标。目前我实现了最简应用,流量生成器发送速率约为5,000,000包/秒,但该应用仅能回传约350,000包/秒,存在明显的性能提升空间。
以下是实现数据包回传的UDP Socket代码:
#define PORT 12345 #define IP_ADDR "192.168.0.32" int main(int argc, char *argv[]){ int socket_fd; struct sockaddr_in address, send_address; char packet_buffert[2000] = {0}; if ((socket_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_port = htons(PORT); address.sin_addr.s_addr = inet_addr(IP_ADDR); if(bind(socket_fd, (struct sockaddr*)&address, sizeof(address))<0){ return -1; } socklen_t s = sizeof(send_address); while(1){ if (recvfrom(socket_fd, packet_buffert, sizeof(packet_buffert), 0,(struct sockaddr*)&send_address, (socklen_t*)&s) < 0) { return -1; } if (sendto(socket_fd, packet_buffert, sizeof(packet_buffert), 0, (struct sockaddr*)&send_address, (socklen_t)sizeof(send_address)) < 0) { return -1; } } return 0; }
问题
请问对UDP Socket做哪些修改可提升吞吐量,以达到更高的包处理速率?该实现遗漏了哪些可提升网络性能的关键技术点?
我的思路
- 考虑实现数据包批处理
- 发现当前设置2000字节的数据包缓冲区时,若接收64字节的数据包,回传的数据包会远大于64字节,这可能影响性能
内容的提问来源于stack exchange,提问作者Agent smith 2.0
相关产品推荐
相关产品推荐

