TCP性能优化总结 - awokezhou/LinuxPage GitHub Wiki

零拷贝

网络传输中,使用read()、write()函数发送文件,会在用户空间和内核空间进行多次拷贝(4次),效率不高。使用sendfile()接口,可以直接将文件描述符拷贝到套接字,此操作直接在内核中进行,不涉及到用户空间。

sendfile(socket_fd, fd, offset, size);
socket_fd是套接字发往的网络接口,fd是已经打开的文件描述符,offset是要拷贝的文件偏移,size是拷贝大小

/*例子*/
off_t offset = 0;
fd = open(file_dirs, O_RDONLY);
...
fstat(fd, &stat);

count = sendfile(socket_fd, fd, &offset, stat.st_size);
...

应用层timer导致内核转发性能低

应用进程中以timer方式定时执行一个任务,发现内核转发数据时吞吐量低了20M