这两天正在为网络层制作负载均衡策略, 这个具体的细节会在今后逐步写出, 先来说说在测试负载均衡时遇到的一点问题.
昨晚改好后, 负载均衡策略可以按照预期逻辑层指定的返回值进行继续通知或者挂起~, 从而让优先级更高连接类型获得更多的执行权. 但是测试的结果并不像预期那样美好, 虽然服务器不会因为buff不足而被迫断开连接, 但是运行效率依然和以前一样稳步下降, 这让我着实很恼火..., 于是直接加上 -pg参数开始profile...
profile的结果让我出乎意料, 原来瓶颈居然出现在hash_tbl中, 其3个函数运行总时间占据了全部运行时间的80%, 经过简单优化, 依然只能达到70%多... 囧... 如下图..
好吧, 再来重新看看这个hash_tbl的算法和结构, 该结构为标准的拉链式hash结构, 一个lockfree fifo链表充当冲突拉链, 冲突链的遍历占据了50%以上的时间, 看来这块确实效率是个严重的问题.
考虑之后, 打算这样改下, 不采用链表作为冲突链, 使用变长数组作为拉链, 扩张系统定为1.5, 并额外增加一个当前使用映射表, 以便提速hash_foreach的遍历速度 :)