关于LVS垃圾回收的慢定时器
文档
- http://zh.linuxvirtualserver.org/book/export/html/55IP
描述的垃圾回收机制使用了慢定时器。
原文如下:
垃圾回收
为了将不再被使用的连接单元回收,我们在连接上设置一个定时器,当连接超时,将该连接回收。因为系统中有可能存在几百万个并发连接,若使用内核中的定时器,几百万个连接单元系统的定时器的列表中,系统每隔1/100秒进行单元的迁移和回收已超时的连接单元,这会占用很多系统的开销。
因为连接的回收并不需要很精确,我们可以让系统的定时器每隔1秒启动连接回收程序来回收那些超时的连接。为此,我们设计了一个慢定时器,连接的定时都是以1秒钟为单位。用三个时间大转盘,第一个转盘有1024个刻度,定时在1024秒钟之内的连接都挂接在第一个转盘的各个刻度上;第二个转盘有256个刻度,定时在[210, 218)区间的落在第二个转盘上;第三个转盘有256个刻度,定时在[218, 226)区间的落在第三个转盘上。
慢定时器处理程序每隔1秒由系统定时器启动运行一次,将第一个转盘当前指针上的连接进行回收,再将指针顺时针转一格。若指针正好转了一圈,则对第二个转盘当前指针上的连接进行操作,根据他们的定时迁移到第一个转盘上,再将指针顺时针转一格。若第二个转盘的指针正好转了一圈,则对第三个转盘当前指针上的连接进行操作,根据他们的定时迁移到第二个转盘上。
使用这种慢定时器极大地提高了过期连接的回收问题。在最初的版本中,我们是直接使用系统的定时器进行超时连接的回收,但是当并发连接数增加到500,000时,系统的CPU使用率已接近饱和,所以我们重新设计了这种高效的垃圾回收机制。
其中“定时在[210, 218)区间的落在第二个转盘上;第三个转盘有256个刻度,定时在[218, 226)区间的落在第三个转盘上。”,这两个定时区间是怎么理解的?这两个值看起来不是以秒为单位的,
求指教,谢谢。
Anonymous (没有被验证)
周二, 2013-10-29 03:04
Permalink
2的10次方-2的18次方,
2的10次方-2的18次方,明白了吧?
Anonymous (没有被验证)
周二, 2014-03-04 21:50
Permalink
MsSysaBWvQss
I've been lokinog for a post like this forever (and a day)