发布时间:2017-07-18 09:47:22 文章来源:互联网
微博 微信 QQ空间
  操作系统优化

  先看一下在操作系统这个层级是如何对海量并发长连接的接入进行优化的。这里主要挑战是在内存,通过slabtop命令可以看到当前系统内存分配的情况。从这一栏可以看到,当我们构建了大概200万长连接的时候,整个系统的内存基本上已经满了。对于长连接的内存使用,会消耗在这6个数据结构上。
 
  我们深入分析这6个来自epoll模型和内核TCP协议栈的数据结构。
 
  对于epoll模型,底层实现是一个特殊的文件系统,epoll文件的内容主要是保存了一棵红黑树和就绪的被侦听文件列表rdllist,红黑树的节点是被侦听文件对象。epoll主要提供了三个API:epoll_wait、epoll_create、epoll_ctl。当我们通过epoll_ctl把一个文件加入到epoll的时候,会创建两个数据结构epitem、eppool_entry,epitem关联到被侦听的文件fd,eppool_entry保存了事件就绪时设置rdllist的回调函数ep_poll_callback。我们从另外一个链路看一下网卡的收包流程,当数据包过来的时候,网卡接收完数据会产生一个硬中断银行信息港欢迎您!,数据通过DMA拷贝到内存。系统通过软中断守护进程,调用网卡的驱动来完成数据包的解析并最终调用poll方法。poll方法会回调设置好的ep_poll_callback,即把fd挂到rdllist中,当调用的epoll_wait时候,即可获取到就绪的fd集合。
 
  对于海量的并发连接,主要通过调整操作系统的配置来解决。信鸽使用了公司自研的tlinux 2.0,系统对于内存这一块也做了比较多的优化,具体的配置参数如下,可以看到,主要也是一些epoll的限制和TCP的内存的限制。

另一视角

换一换