手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

Netfilterconntrack性能调整,v0.6

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


  配置CONNTRACK_MAX

  ---------------------

  跟踪连接的条目是存储在链接的表中的,因此最大的跟踪链接条目(CONNTRACK_MAX)能够很容易的动态调整。

  linux内核2.4.23之前,使用:

  # echo $CONNTRACK_MAX > /proc/sys/net/ipv4/ip_conntrack_max

  linux内核2.4.23之后,使用:

  # echo $CONNTRACK_MAX > /proc/sys/net/ipv4/netfilter/ip_conntrack_max

  这里$CONNTRACK_MAX是个整数。

  配置HASHSIZE

  ----------------

  因为数学上的原因,哈西表占有固定的大小。因此HASHSIZE必须在哈西表被创建和开始填充之前就确定。

  在linux内核2.4.21之前,必须使用素数作为哈西表的大小,而且要确保这个哈西表能够有效并通用。非素数的奇数或其他的数值都是强烈不推荐使用的,因为这样哈西的分配不能达到最优化的状态。

  从linux内核2.4.21(更有2.6内核)跟踪连接使用jenkins2b算法,这样就能够使用任何的数值,但是使用2^n次方运作的最有效。

  假如netfilter的跟踪连接是被编译进内核中的,哈西表的大小就能够在编译的时候配置,或(2.6内核之后)能够作为一个启动选项ip_conntrack.hashsize=$HASHSIZE。

  假如netfilter的跟踪连接是编译成一个模块,哈西表的大小能够在加载模块的时候配置,使用下面的命令:

  # modprobe ip_conntrack hashsize=$HASHSIZE

  这里$HASHSIZE是个整数。

  一个理想的例子:只做防火墙的机器

  ------------------------------------

  在理想的例子中,您有一台机器只做包过滤和NAT(也就是说,基本上没有用户空间的使用,至少不会有象代理这样会不断的耗费内存空间的东西......)

  netfilter跟踪连接使用的内核内存大小是:

  size_of_mem_used_by_conntrack (以bytes记) =

  CONNTRACK_MAX * sizeof(struct ip_conntrack)

  HASHSIZE * sizeof(struct list_head)

  -这里:sizeof(struct ip_conntrack)能够有很大的区别,依赖于机器的体系架构,内核版本和编译时间的配置。要想知道他的大小,能够查看ip_conntrack初始化时候kenel的日志信息。sizeof(struct ip_conntrack)在i386架构、 2.6.5内核上大约是300bytes,但是在2.6.10的内核上,这个值能够在352至192bytes之间变化!

  -sizeof(struct list_head) = 2 * size_of_a_pointer

  在i386上,size_of_a_pointer是4bytes。

  因此在i386,2.6.5内核上,size_of_mem_used_by_conntrack大约是CONNTRACK_MAX * 300 HASHSIZE * 8 (bytes)。

  假如我们使HASHSIZE = CONNTRACK_MAX(假如我们将大部分的内存用来做防火墙的工作,参见“修改 CONNTRACK_MAX和HASHSIZE”部分),在i386架构、2.6.5内核上, size_of_mem_used_by_conntrack大概是CONNTRACK_MAX * 308 bytes。

  现在我们假定您使用512M的内存拿来做一个只做防火墙的机器,并且使用128MB以外的内存来做跟踪连接,对于使用终端模式只做防火墙来说应该是足够的大的,例如:

  您能够同时配置CONNTRACK_MAX和HASHSIZE大致如下:

  (512 - 128) * 1024^2 / 308 =~ 1307315 (instead of 32768 for CONNTRACK_MAX,

  and 4096 for HASHSIZE by default)。

  对于linux2.4.21(和linux2.6),哈西算法最好使用“2的次方”大小(之前是使用素数)。

  因此在这里我们能够将CONNTRACK_MAX和HASHSIZE配置成1048576(2^20)。

  这样,您能够存储默认值32倍的跟踪连接条目,而且能够得到更好的跟踪连接性能。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!