亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 6062 | 回復(fù): 8
打印 上一主題 下一主題

關(guān)于iptables中ip_conntrack_max和hash表的關(guān)系及調(diào)整 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2005-08-18 17:20 |只看該作者 |倒序?yàn)g覽
昨天無意中發(fā)現(xiàn)了一篇文檔,解決了我很久以來的一些問題,于是花了半天的時(shí)間把它翻譯了一下,可是翻譯的卻不好,如果您的E文還好的話,建議您直接看原文更好。

這是關(guān)于使用iptables來調(diào)優(yōu)防火墻性能的一篇短文。
謝謝freenode 上#debian-zh中的pnt_。

原文地址: http://www.wallfire.org/misc/netfilter_conntrack_perf.txt

翻譯:NetDC <fjdc AT 163 DOT com>;
如果您有什么好的想法可以和我交流。
轉(zhuǎn)載注明出處,謝謝。


                Netfilter conntrack 性能調(diào)整,v0.6
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
             Herv?Eychenne <rv _AT_ wallfire _DOT_ org>;

這篇文檔說明了對(duì)netfilter conntrack(還有NAT)性能調(diào)整時(shí)你必須知道的一些事情。

本文檔最新版可以在下面這個(gè)地址找到:
http://www.wallfire.org/misc/netfilter_conntrack_perf.txt

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

這里我們可以調(diào)整兩個(gè)參數(shù):
-允許的最大跟蹤連接條目,在這篇文檔中我們叫作CONNTRACK_MAX
-存儲(chǔ)跟蹤連接條目列表的哈西表的大小,在這篇文檔中我們叫做HASHSIZE(下面是這個(gè)結(jié)構(gòu)的描述)

CONNTRACK_MAX是在內(nèi)核內(nèi)存中netfilter可以同時(shí)處理的“任務(wù)”(連接跟蹤條目)。

一個(gè)跟蹤連接的條目是存儲(chǔ)在一個(gè)鏈接起來的列表的一個(gè)節(jié)點(diǎn)上,每個(gè)列表都是一個(gè)哈西表的元素。因此每個(gè)哈西表的條目(也叫一個(gè)桶-bucket)包含了一個(gè)鏈接起來的跟蹤連接條目。
要訪問一個(gè)特定包的跟蹤連接條目,內(nèi)核必須:
-針對(duì)一個(gè)包中的已經(jīng)定義的一些字符計(jì)算哈西值。這是一個(gè)不間斷的計(jì)算。
  這個(gè)哈西值就會(huì)被當(dāng)作哈西表的索引來使用,而跟蹤連接條目的列表就存儲(chǔ)在這里。
-反復(fù)的查看鏈接列表中的跟蹤連接條目以找到匹配的那一個(gè)。
  這是一個(gè)耗資源的操作,依賴于列表的大。ㄒ惨蕾囉诹斜碇斜徊僮鞯母欉B接條目的位置)。

哈西表包含了HASHSIZE大小的鏈接條目。當(dāng)條目滿的時(shí)候(總的跟蹤連接條目數(shù)達(dá)到了CONNTRACK_MAX),理想狀態(tài)下,每個(gè)列表(在最優(yōu)化的條件下)將包含大約CONNTRACK_MAX/HASHSIZE的條目數(shù)。

不管你是否有連接,哈西表都將占用一個(gè)固定大小的非交換內(nèi)核內(nèi)存。但是最大連接跟蹤條目會(huì)檢測(cè)最多可以存儲(chǔ)多少條目(globally into the
linked lists),也就是說他們最多可以占用多少的內(nèi)核內(nèi)存。

這篇文檔將給你一些關(guān)于為了達(dá)到最好的netfilter conntracking/NAT系統(tǒng)性能,如何調(diào)優(yōu)HASHSIZE和CONNTRACK_MAX值的提示。

CONNTRACK_MAX和HASHSIZE的默認(rèn)值
============================================

一般來說,CONNTRACK_MAX和HASHSIZE都會(huì)設(shè)置在“合理”使用的值上,依據(jù)可使用的RAM的大小來計(jì)算這個(gè)值。

CONNTRACK_MAX的默認(rèn)值
------------------------------

在i386架構(gòu)上,CONNTRACK_MAX = RAMSIZE (以bytes記) / 16384 =
RAMSIZE (以MegaBytes記) * 64,
因此,一個(gè)32位的帶512M內(nèi)存的PC在默認(rèn)情況下能夠處理512*1024^2/16384 = 512*64 = 32768個(gè)并發(fā)的netfilter連接。

但是真正的公式是:
CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (x / 32)
這里x是指針的bit數(shù),(例如,32或者64bit)

請(qǐng)注意:
-默認(rèn)的CONNTRACK_MAX值不會(huì)低于128
-對(duì)于帶有超過1G內(nèi)存的系統(tǒng),CONNTRACK_MAX的默認(rèn)值會(huì)被限制在65536(但是可以手工設(shè)置成更大的值)

HASHSIZE的默認(rèn)值
-------------------------

通常,CONNTRACK_MAX = HASHSIZE * 8。這意味著每個(gè)鏈接的列表平均包含8個(gè)conntrack的條目(在優(yōu)化的情況并且CONNTRACK_MAX達(dá)到的情況下),每個(gè)鏈接的列表就是一個(gè)哈西表?xiàng)l目(一個(gè)桶)。

在i386架構(gòu)上,HASHSIZE = CONNTRACK_MAX / 8 =
RAMSIZE (以bytes記) / 131072 = RAMSIZE (以MegaBytes記) * 8。
舉例來說,一個(gè)32位、帶512M內(nèi)存的PC可以存儲(chǔ)512*1024^2/128/1024 =
512*8 = 4096 個(gè)桶(鏈接表)

但是真正的公式是:
HASHSIZE = CONNTRACK_MAX / 8 = RAMSIZE (以bytes記) / 131072 / (x / 32)
這里x是指針的bit數(shù),(例如,32或者64bit)

請(qǐng)注意:
-默認(rèn)HASHSIZE的值不會(huì)小于16
-對(duì)于帶有超過1G內(nèi)存的系統(tǒng),HASHSIZE的默認(rèn)值會(huì)被限制在8192(但是可以手工設(shè)置成更大的值)

讀取CONNTRACK_MAX和HASHSIZE
==================================

現(xiàn)在通過/proc文件系統(tǒng)我們可以在運(yùn)行時(shí)讀取CONNTRACK_MAX的值。

在Linux kernel 2.4.23版本前,使用:
# cat /proc/sys/net/ipv4/ip_conntrack_max

在Linux kernel 2.4.23版本后,使用:
# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
  (舊的 /proc/sys/net/ipv4/ip_conntrack_max是不建議使用的!)

當(dāng)前的HASHSIZE總是可以在syslog信息中找到(對(duì)任何一個(gè)內(nèi)核版本),桶(也就是HASHSIZE)的數(shù)目是在ip_conntrack初始化的時(shí)候顯示出來的。
對(duì)于linux內(nèi)核2.4.24以后,當(dāng)前的HASHSIZE值可以在運(yùn)行時(shí)使用下面的命令讀。
# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_buckets


修改CONNTRACK_MAX和HASHSIZE
====================================

默認(rèn)的CONNTRACK_MAX和HASHSIZE的值都會(huì)因主機(jī)的不同而不同,但你可以在只做防火墻的高負(fù)載的系統(tǒng)上增加他們。
因此CONNTRACK_MAX和HASHSIZE值如果需要的話可以手工更改。

讀取桶是一個(gè)連續(xù)性的操作(我們的興趣在于得到一個(gè)哈西列表),請(qǐng)記得內(nèi)核需要不停的遍歷一個(gè)鏈接的列表去查找一個(gè)跟蹤連接條目。因此一個(gè)鏈接列表(CONNTRACK_MAX/HASHSIZE的值在優(yōu)化的狀態(tài)下并且達(dá)到上限)的平均值不能設(shè)置太大。這個(gè)比值默認(rèn)值是8(當(dāng)值是自動(dòng)計(jì)算的時(shí)候)。
在系統(tǒng)有足夠的內(nèi)存并且性能真的很重要的時(shí)候,你可以試著使平均值是一個(gè)跟蹤連接條目配一個(gè)哈西桶,這意味著HASHSIZE = CONNTRACK_MAX。


設(shè)置CONNTRACK_MAX
---------------------

跟蹤連接的條目是存儲(chǔ)在鏈接的表中的,因此最大的跟蹤鏈接條目(CONNTRACK_MAX)可以很容易的動(dòng)態(tài)調(diào)整。

linux內(nèi)核2.4.23之前,使用:
# echo $CONNTRACK_MAX >; /proc/sys/net/ipv4/ip_conntrack_max

linux內(nèi)核2.4.23之后,使用:
# echo $CONNTRACK_MAX >; /proc/sys/net/ipv4/netfilter/ip_conntrack_max

這里$CONNTRACK_MAX是一個(gè)整數(shù)。

設(shè)置HASHSIZE
----------------

因?yàn)閿?shù)學(xué)上的原因,哈西表占有固定的大小。因此HASHSIZE必須在哈西表被創(chuàng)建和開始填充之前就確定。

在linux內(nèi)核2.4.21之前,必須使用素?cái)?shù)作為哈西表的大小,而且要保證這個(gè)哈西表能夠有效并通用。非素?cái)?shù)的奇數(shù)或者其他的數(shù)值都是強(qiáng)烈不推薦使用的,因?yàn)檫@樣哈西的分配不能達(dá)到最優(yōu)化的狀態(tài)。

從linux內(nèi)核2.4.21(還有2.6內(nèi)核)跟蹤連接使用jenkins2b算法,這樣就可以使用所有的數(shù)值,但是使用2^n次方運(yùn)作的最有效。


如果netfilter的跟蹤連接是被編譯進(jìn)內(nèi)核中的,哈西表的大小就可以在編譯的時(shí)候設(shè)置,或者(2.6內(nèi)核之后)可以作為一個(gè)啟動(dòng)選項(xiàng)ip_conntrack.hashsize=$HASHSIZE。

如果netfilter的跟蹤連接是編譯成一個(gè)模塊,哈西表的大小可以在加載模塊的時(shí)候設(shè)置,使用下面的命令:
# modprobe ip_conntrack hashsize=$HASHSIZE

這里$HASHSIZE是一個(gè)整數(shù)。

一個(gè)理想的例子:只做防火墻的機(jī)器
------------------------------------

在理想的例子中,你有一臺(tái)機(jī)器只做包過濾和NAT(也就是說,基本上沒有用戶空間的使用,至少不會(huì)有象代理這樣會(huì)不斷的耗費(fèi)內(nèi)存空間的東西......)

netfilter跟蹤連接使用的內(nèi)核內(nèi)存大小是:
size_of_mem_used_by_conntrack (以bytes記) =
        CONNTRACK_MAX * sizeof(struct ip_conntrack) +
        HASHSIZE * sizeof(struct list_head)
-這里:sizeof(struct ip_conntrack)可以有很大的區(qū)別,依賴于機(jī)器的體系架構(gòu),內(nèi)核版本和編譯時(shí)間的配置。要想知道它的大小,可以查看ip_conntrack初始化時(shí)候kenel的日志信息。sizeof(struct ip_conntrack)在i386架構(gòu)、2.6.5內(nèi)核上大約是300bytes,但是在2.6.10的內(nèi)核上,這個(gè)值可以在352至192bytes之間變化!
-sizeof(struct list_head) = 2 * size_of_a_pointer
  在i386上,size_of_a_pointer是4bytes。


因此在i386,2.6.5內(nèi)核上,size_of_mem_used_by_conntrack大約是CONNTRACK_MAX * 300 + HASHSIZE * 8 (bytes)。

如果我們使HASHSIZE = CONNTRACK_MAX(如果我們將大部分的內(nèi)存用來做防火墻的工作,參見“修改CONNTRACK_MAX和HASHSIZE”部分),在i386架構(gòu)、2.6.5內(nèi)核上,size_of_mem_used_by_conntrack大概是CONNTRACK_MAX * 308 bytes。

現(xiàn)在我們假定你使用512M的內(nèi)存拿來做一個(gè)只做防火墻的機(jī)器,并且使用128MB以外的內(nèi)存來做跟蹤連接,對(duì)于使用終端模式只做防火墻來說應(yīng)該是足夠的大的,例如:
你可以同時(shí)設(shè)置CONNTRACK_MAX和HASHSIZE大致如下:
(512 - 12 * 1024^2 / 308 =~ 1307315 (instead of 32768 for CONNTRACK_MAX,
and 4096 for HASHSIZE by default)。
對(duì)于linux2.4.21(和linux2.6),哈西算法最好使用“2的次方”大。ㄖ笆鞘褂盟?cái)?shù))。

因此在這里我們可以將CONNTRACK_MAX和HASHSIZE設(shè)置成1048576(2^20)。


這樣,你可以存儲(chǔ)默認(rèn)值32倍的跟蹤連接條目,而且可以得到更好的跟蹤連接性能。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
最后更新:2005年1月20日
修正歷史:
Revision history:
0.6 Hashsize parameter can be set at boot time with Linux 2.6.  Thanks to
    Tobias Diedrich for pointing this out.
0.5 Added further notice about the varying length of the conntrack structure.
0.4 Since Linux 2.4.21, hash algorithm is happy with all sizes, not only
    prime ones.  However, power of 2 is best.
0.3 Various small precisions.
0.2 Information about Linux kernel versions and corresponding /proc entries.
    (/proc/sys/net/ipv4/netfilter/ip_conntrack_{max,buckets}).
0.1 Initial writing, largely based on my discussions with Harald Welte
    (netfilter maintainer) on the netfilter-devel mailing-list.  Many thanks
    to him!

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2005-08-19 10:23 |只看該作者

關(guān)于iptables中ip_conntrack_max和hash表的關(guān)系及調(diào)整

太好了。!

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2005-08-19 14:46 |只看該作者

關(guān)于iptables中ip_conntrack_max和hash表的關(guān)系及調(diào)整

很和用!謝謝了

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2005-08-20 21:44 |只看該作者

關(guān)于iptables中ip_conntrack_max和hash表的關(guān)系及調(diào)整

恩!我經(jīng)常出現(xiàn)ip_conntrack_max 滿的提示!
1048576這次夠了
哈哈

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2005-08-21 11:25 |只看該作者

關(guān)于iptables中ip_conntrack_max和hash表的關(guān)系及調(diào)整

nnnn年的東西了
解決不了實(shí)質(zhì)問題的
大家可以測(cè)試看看
:)

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2005-08-23 21:33 |只看該作者

關(guān)于iptables中ip_conntrack_max和hash表的關(guān)系及調(diào)整

請(qǐng)問下面的啟動(dòng)選項(xiàng)怎么加。

如果netfilter的跟蹤連接是被編譯進(jìn)內(nèi)核中的,哈西表的大小就可以在編譯的時(shí)候設(shè)置,或者(2.6內(nèi)核之后)可以作為一個(gè)啟動(dòng)選項(xiàng)ip_conntrack.hashsize=$HASHSIZE。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2005-08-24 11:40 |只看該作者

關(guān)于iptables中ip_conntrack_max和hash表的關(guān)系及調(diào)整

原帖由 "sorock" 發(fā)表:
請(qǐng)問下面的啟動(dòng)選項(xiàng)怎么加?

如果netfilter的跟蹤連接是被編譯進(jìn)內(nèi)核中的,哈西表的大小就可以在編譯的時(shí)候設(shè)置,或者(2.6內(nèi)核之后)可以作為一個(gè)啟動(dòng)選項(xiàng)ip_conntrack.hashsize=$HASHSIZE。


我認(rèn)為是在grub(或者lilo)的啟動(dòng)項(xiàng)中添加這個(gè)參數(shù),手頭沒法實(shí)驗(yàn),樓上的試試吧。
kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hda1 hdc=ide-scsi

把上面的hdc=*****后面的改改應(yīng)該就可以了。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2005-08-29 13:56 |只看該作者

關(guān)于iptables中ip_conntrack_max和hash表的關(guān)系及調(diào)整

的確可以。
在kernel后加上ip_conntrack.hashsize=8192,
啟動(dòng)后
# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_buckets
8192
表明改變成功。

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2005-08-29 22:39 |只看該作者

關(guān)于iptables中ip_conntrack_max和hash表的關(guān)系及調(diào)整

不錯(cuò)
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP