锁的处理和优化

在系统中虚拟服务规则的读和写需要锁来保证处理的一致性。在连接的Hash表中,同样需要锁来保证连接加入和删除的一致性。连接的Hash表是系统使用最频繁的资源,任何一个报文到达都需要查找连接Hash表。如果只有一个锁来管理连接Hash表的操作,锁的冲突率会很高。为此,我们引入有n个元素的锁数组,每个锁分别控制1/n的连接Hash表,增加锁的粒度,降低锁的冲突率。在两个CPU的SMP机器上,假设CPU操作Hash表的部位是随机分布的,则两个CPU同时操作同一区域的概率为1/n。在系统中n的缺省值为16。