我自逍遙 回復于:2005-05-17 15:14:51 |
我記得可swap可以是內存的兩倍,如果再大就沒有意義了。 |
雙眼皮的豬 回復于:2005-05-17 15:26:47 |
我覺得SWAP到2G已經沒有必要了.干脆就加內存算了,這么折騰它... |
wangrujun 回復于:2005-05-17 16:20:47 |
我的linux服務器的內存是4G,呵呵 |
wangrujun 回復于:2005-05-17 16:22:10 |
在4G內存狀況下,我計劃分配4G交換區。
原本是打算用一個4G的交換區,但是看到上述文檔中的描述,不知道是否應該分為兩個2G的交換區。 |
采風 回復于:2005-05-17 16:42:58 |
交換文件的大小和你的應用需求有關,如果沒有那么大的應用需求,象征性的分個幾百M的交換文件就行了。 :roll: |
wangrujun 回復于:2005-05-17 17:26:14 |
如果我有需求,需要8G的交換文件呢? |
tigerlei 回復于:2005-05-17 17:36:53 |
你有這么大的內存,估計你沒有什么交換分區需求的 |
wolf0403 回復于:2005-05-17 20:38:32 |
2G 是個很特殊的值,呵呵。好像跟是否啟用大文件支持有關。2G 以上的文件需要大文件支持,速度會變慢。
另外,4G 的內存也需要打開 hi mem support 了 |
redspider 回復于:2005-05-17 22:41:05 |
[quote:8d46a48837="wangrujun"]如果我有需求,需要8G的交換文件呢?[/quote:8d46a48837]有需求的話可以創建交換文件來增加交換區的容量 |
wangrujun 回復于:2005-05-18 10:05:37 |
[quote:462d22f664="tigerlei"]你有這么大的內存,估計你沒有什么交換分區需求的[/quote:462d22f664]
我服你了。就算是一個試題,你看看應該怎么做? |
wangrujun 回復于:2005-05-18 10:08:36 |
[quote:58549a5845="wolf0403"]2G 是個很特殊的值,呵呵。好像跟是否啟用大文件支持有關。2G 以上的文件需要大文件支持,速度會變慢。
另外,4G 的內存也需要打開 hi mem support 了[/quote:58549a5845] 為何2G以上文件讀寫速度會變慢? swap是對memory的映射,os做的是內存塊對磁盤塊的直接映射,又不需要查目錄項,你說速度會變慢,原因何在? |
wangrujun 回復于:2005-05-18 10:13:41 |
我把問題再整理一下,不要問我是否需要8G的swap,就算只是思考下這個問題好嗎?
在debian 和 fedora的文檔中,都看到有說明,swap分區最好不要超過2G。 假如我要建立8G的交換文件,現在有兩種做法: 1. 直接建立8G的交換文件,這在ext3文件系統中是被支持的。。 2. 建立4個2G的交換文件。 現在,我們從performance的角度來看debian和fedora文檔中的說明,考慮他們如此約定的原因: 1. 為何swap不要超過2G,即超過2G會出什么問題? 2. 這個限制是只對ide硬盤而言,還是普遍的要求,即對scsi及raid盤都有這樣的要求? |
chenzq1604 回復于:2005-05-18 10:27:36 |
swap是硬盤不是內存,理論上至少比內存慢100倍,比如寫個2G的大型的文件先要把2G寫到硬盤中的swap上,再寫到內存,如果內存數據也比較滿(別的進程也在讀寫),所以一次性寫不完要分成N次,造成系統緩慢,這還沒有加上什么優先級更高的進程打段之類的意外 |
daniel2000 回復于:2005-05-18 10:36:10 |
我覺得如果4G內存+2GSWAP還不夠用的話應該考慮使用集群而不是再加內存了... |
雙眼皮的豬 回復于:2005-05-18 10:40:13 |
大文件支持跟文件系統我不太熟悉,
但是32位機的文件偏移指針是個無符號整型... 所以單個文件偏移最大到2的31次方...也就是2G... 與文件系統的聯系不太清楚,研究研究再發話^_^ 我覺得4G MEM夠了... |
wangrujun 回復于:2005-05-23 15:54:33 |
感謝您的回答。
[quote:7365e24008="chenzq1604"]swap是硬盤不是內存,理論上至少比內存慢100倍[/quote:7365e24008] 我知道swap是硬盤,也知道它比內存慢得多,不過不是慢100倍。 內存訪問速度的單位是ns,而硬盤訪問速度的單位是 ms 1ns = 1000,000 ms,你可計算一下到底慢多少倍 [quote:7365e24008="chenzq1604"]比如寫個2G的大型的文件先要把2G寫到硬盤中的swap上,再寫到內存,如果內存數據也比較滿(別的進程也在讀寫),所以一次性寫不完要分成N次,造成系統緩慢,這還沒有加上什么優先級更高的進程打段之類的意外[/quote:7365e24008] 好的,就說說你的這個例子。我想你要說的是內存換頁的例子。用寫文件的例子是不合適的,因為寫文件的時候,會分段寫入io buf,而不會把2G的文件一次讀入硬盤再寫入。io buf通常已經是被系統預留的。 我想可以舉這樣的例子,你用mmap來讀入一個2G的文件,而你的系統上,mmap的實現會把2G內存一次性讀入內存中。 那么你的意思是交換分區會使系統變慢是吧??墒侨绻麤]有交換分區,你上面說的狀況,會有什么結果你知道嗎? 你上面的狀況,因為mmap無法申請到足夠內存,它會直接crash。這樣對于系統是災難性的。兩者相比,還是有swap的情況更好。管理員可以通過swap的使用狀況,了解到系統問題所在,從而獲得處理問題的時間。 |
wangrujun 回復于:2005-05-23 15:57:24 |
[quote:c81e7ad42c="daniel2000"]我覺得如果4G內存+2GSWAP還不夠用的話應該考慮使用集群而不是再加內存了...[/quote:c81e7ad42c]
為什么會這樣說?道理說出來聽聽! |
wangrujun 回復于:2005-05-23 15:58:54 |
[quote:d2776226c3="雙眼皮的豬"]大文件支持跟文件系統我不太熟悉,
但是32位機的文件偏移指針是個無符號整型... 所以單個文件偏移最大到2的31次方...也就是2G... 與文件系統的聯系不太清楚,研究研究再發話^_^ [/quote:d2776226c3] 你說的其實是文件系統的具體實現。ext3已經突破2G的限制,所以你的問題不必擔心。 |
wangrujun 回復于:2005-05-23 16:11:18 |
首先謝謝各位的回復?,F在我想說明一下swap和內存的關系,拋磚引玉,歡迎大家批評指正。
經驗證明,swap比內存大1.8-2.5倍比較好,如果超過2.5倍,performace會變差。 ok, 某臺server有128M內存,4G swap,swap是內存的32倍,看來管理員的腦袋進水了。但是反過來看看,這臺機器就一定會慢嗎? 回答當然是:no! 大家不要把os想的那樣弱。os 只是在 memory不夠的時候, 會收到memory不夠的中斷信息,這時os才會去使用swap。如果上面的配置,只是用來架一個流量不大的dns server,它的performance不會差。 因為它基本不用或者只用很少的swap,內存換頁不會造成系統處于顛簸狀態。 反過來說,我有4G內存,配置8G甚至10G的swap都不為過。即然配置這些swap,不會使server的performance降低,又能增強系統對內存的突發性需求的應對能力,難道在硬盤普遍過百G的今天,我們非要省這區區數G的硬盤嗎? 再次重復我的問題: 在debian 和 fedora的文檔中,都看到有說明,swap分區最好不要超過2G。 假如我要建立8G的交換文件,現在有兩種做法: 1. 直接建立8G的交換文件,這在ext3文件系統中是被支持的。。 2. 建立4個2G的交換文件。 現在,我們從performance的角度來看debian和fedora文檔中的說明,考慮他們如此約定的原因: 1. 為何swap不要超過2G,即超過2G會出什么問題? 2. 這個限制是只對ide硬盤而言,還是普遍的要求,即對scsi及raid盤都有這樣的要求? |
網中人 回復于:2005-05-23 17:05:51 |
嗯. 對 swap 的需求上, 一直都沒個確切的說法.
之前在國外看過 linus 本人有討論過這一問題, 但是很複雜, 很深入. 我也看不懂.... >_< 不過, 若撇開理論的爭議, 回歸到現實面, 不妨讓我們確切的了解系通的實際需求或更好些. 1) 系統對內存需求的最高峰值是多少? 2) peak load 的持續期間有多長? 3) 每天/每週平均內存消耗值是多少? 4) 數據採樣期有多長? 代表性如何? 5) 擴充預估值有多少? 根據若何? 6) 現有內存有多少? 能否超過最高峰值需求? 7) swap 在峰值期間消耗多少? 目前夠用否? 擴充預估要多少? 8) 消耗內存的前 10 個程序是哪些? 獨立追縱出來的使用曲線如何? 9) 有否其它參照系統可供比較? 10) ..... 我想, 作為系統分析員, 都不能夠離開據體數據來扯一通吧? 經驗與理論可幫助我們更精確的作出預估. 但實體數據才是最具說服力的支持. 我對 swap 的理論沒有多大研究. 但如果系統最高峰值是 6G 內存, 當我只有 4G 時, 我再建一個 3 G swap 總可應付得來吧? 還是說, 一定要建 8G 呢? 那, 當 6G 峰值不變, 而實體內存有 8G , 那我是否要建 16G swap ? 那, 我有 100G 內存時呢? 又, 若系統一輩子最高也只用到 128M , 那我的 4G 內存真的還有需要 swap 否? 更甚至 我將之降為 256M 行不行呢? 簡單來說, 我個人認為: swap 不應作為常態性使用, 只應用來在短暫性最高峰值時的備援. 也就是: swap 需備, 但最好好備而不用! 因為沒理論支持, 我不敢說我的認知是合理的. 有能力的朋友, 可否就上術的問題為大家說明一下呢? 謝謝囉.... ^_^ |
wangrujun 回復于:2005-05-26 12:05:36 |
[quote:cb6a3f19bb="網中人"]
我想, 作為系統分析員, 都不能夠離開據體數據來扯一通吧? 經驗與理論可幫助我們更精確的作出預估. 但實體數據才是最具說服力的支持. [/quote:cb6a3f19bb] swap的使用,現在大家都取1.8-2.5倍,是一個經驗值。swap是由os進行調度和使用,與具體應用關聯有限。 另外, 全面performance當然需要觀察具體情況,可是大部分情況是這樣:管理員首先會對應用做預估,安裝機器,具體數據要上線后才能觀察到。 那些管理員在預估階段,只能根據經驗值來對系統進行規劃。 [quote:cb6a3f19bb="網中人"] 但如果系統最高峰值是 6G 內存, 當我只有 4G 時, 我再建一個 3 G swap 總可應付得來吧? 還是說, 一定要建 8G 呢? ...... 簡單來說, 我個人認為: swap 不應作為常態性使用, 只應用來在短暫性最高峰值時的備援. 也就是: swap 需備, 但最好好備而不用! [/quote:cb6a3f19bb] 我想強調這樣一個問題:比如你有128M內存,建立了1Gswap,而系統只用了128Mswap,這時系統performance不會下降。管理員只是浪費了少許硬盤。具體可看我前面的論述。 系統最高峰值是6G,而你的內存是4G,我覺得你還是應該建立6-8G的swap。因為在此swap使用范圍內,這個系統的performance是可接受的,swap不會造成系統瓶頸。 而對于系統來說,所謂的最高峰值只是估計值。比如跑數據庫,長年累月積累下來,數據量會不斷增加。難保有個程序員,在查詢時漏掉了年份之類的條件,或者犯下其它未測試出來的問題,造成負載加大。這時你的3G swap,就遠不如8G swap有保障。最起碼,8G swap會因為swap使用變多,而造成性能緩慢下降,給管理員發現問題的時間。而3G的swap,則有可能會造成查詢故障。 這里只是一個例子而已。況且,我的問題已經說了很多次,是討論swap是否可以突破2G這個大小。按照網中人老兄的說法,建立3G的swap,那么是應該建立2G+1G還是一個3G呢? 其實這才是我本來問的問題。網中人和其他許多兄弟,只看到打口水仗,卻沒有真正關注這個本來的問題,讓我有些失望。 網中人老兄在chinaunix是出名的好脾氣,希望不會因此而生氣。 |
網中人 回復于:2005-05-26 13:08:30 |
第一, 我沒理由生氣.
第二, 我有沒只看到口水仗, 不是由你來下定論的. 第三, 我也有不明, 才來問你. 第四, 我也同樣失望. |
wangrujun 回復于:2005-05-26 13:40:11 |
嘻嘻,網中人就是好脾氣 |
wolfop 回復于:2005-05-26 16:38:03 |
[quote:f53a6831aa="wangrujun"]如果我有需求,需要8G的交換文件呢?[/quote:f53a6831aa]
如果是64BIT內核,8GSWAP沒有任何問題。 如果撒32位內核,使用超過4G以上內存采用PAE模式,無法使用超過4G SWAP。 |
網中人 回復于:2005-05-27 01:59:54 |
[quote:90b3f4b81f="wangrujun"]嘻嘻,網中人就是好脾氣[/quote:90b3f4b81f]
呵... 居然有人說我好脾氣呢.... 你真會逗我開心! 不過, 我前面問了一堆, 你還沒教我呢? 能否抽空幫忙解答一下呢? (別想太多, 我也是不懂, 才求教的.) 至於峰值, 我想, 不管是假設的, 還是實際的, 你就胡亂給一個值, 取最大值就是了. 別再給我繞圈圈走花園了... 若 6G 不夠, 你就給我扯個 60G 也行. 我也不管是 OS 還是 application, 我只盯著"total mem usage"來看, 其他我不管. swap 單一多大? 也不是我操心的... 誰管你是 2+1 還是 3x1 呢... 等你的值算(或看)出來, 有了答案, 我才操心下一步該怎麼做... 天都還沒塌, 就別爭說哪個地洞好鑽啦. 這樣說, 你可明白嗎? |
zonzi 回復于:2005-05-27 04:34:49 |
根據我對swap區的理解就是
swap區是linux實行virtual memory用的 virtual memory 則是因為內存不夠,來虛擬內存的 一般x86 32位芯片最多只能支持2G內存。。。。。。。。。。。。。 |
soway 回復于:2005-05-27 21:11:28 |
swap還有一個用處
就是在機器lock,出現問題的時候內存的內容會自動copy到swap上面 這樣可以有效防止機器故障帶來內存中的內容忽然丟失的情況 這個我忘記是哪兒看的了,反正當時感覺很有道理 |
zcfunix 回復于:2005-05-27 22:46:07 |
如果是64BIT內核,8GSWAP沒有任何問題。
如果撒32位內核,使用超過4G以上內存采用PAE模式,無法使用超過4G SWAP |
zcfunix 回復于:2005-05-27 22:48:08 |
[quote:982c07f1a0="soway"]swap還有一個用處
就是在機器lock,出現問題的時候內存的內容會自動copy到swap上面 這樣可以有效防止機器故障帶來內存中的內容忽然丟失的情況 這個我忘記是哪兒看的了,反正當時感覺很有道理[/quote:982c07f1a0] |
wangrujun 回復于:2005-05-30 09:47:23 |
[quote:c324abee55="wolfop"]
如果是64BIT內核,8GSWAP沒有任何問題。 如果撒32位內核,使用超過4G以上內存采用PAE模式,無法使用超過4G SWAP。[/quote:c324abee55] 多謝。我是intel的cpu,32位的內核。 pae模式不知為何物,會查閱資料增加了解。 |
wangrujun 回復于:2005-06-02 13:29:36 |
wolfop:
pae有擴展模式。因為pae支持36根地址線而不是32根,所以使用pae擴展模式的linux 2.6kernel,就可以支持到64G 所以,您說的8G內存限制是不存在的。 |
wangrujun 回復于:2005-06-02 13:32:57 |
帖子在這里這樣久,我這里說明一下我的看法。
linux 2.6以上的內核,可以直接支持不小于64G的內存。ext3等日志型文件系統,也可以直接支持超過2G的單個文件,所以,對于64G以內的swap,在文件系統支持的情況下,建立成一個單獨的分區或文件,不會影響系統的performace。 按照我問題中的需求,可以直接建立一個8G的分區或者8G的交換文件。 |
wangrujun 回復于:2005-06-02 13:34:20 |
至于 debian和fodera文檔中所說的限制,我的看法是,它們出版的較早,在ext2文件系統下或2.4內核中,都是正確的。
在ext3文件系統+2.6內核中,應該是不必要做此限制的。 |
wangrujun 回復于:2005-06-02 13:44:26 |
網中人老兄,偶覺得你說的有道理,系統的swap應該要看負載而定。
我是想問問設置超過2G的swap,這個運作本身對系統的performance有沒有影響。完全是因為debian的手冊上說不要超過2G比較好的。 |
Forget&Remeber 回復于:2005-06-02 13:50:49 |
[quote:1603e0b3e9="wangrujun"]網中人老兄,偶覺得你說的有道理,系統的swap應該要看負載而定。
我是想問問設置超過2G的swap,這個運作本身對系統的performance有沒有影響。完全是因為debian的手冊上說不要超過2G比較好的。[/quote:1603e0b3e9] I use a single swap partition which size is 4G for a long time.And I have 4G physics mem too,There is nothing wrong with my rh8. |
wangrujun 回復于:2005-06-07 11:37:47 |
謝謝樓上
4G memory配置 4G swap是oracle文檔中推薦的配置,您是用oracle吧 |
Forget&Remeber 回復于:2005-06-07 11:44:18 |
[quote:bddf3fcd13="wangrujun"]謝謝樓上
4G memory配置 4G swap是oracle文檔中推薦的配置,您是用oracle吧[/quote:bddf3fcd13] Oh,no.I use it as a application server. |
jordn 回復于:2005-06-07 12:55:44 |
學習中。。。 |
wolfop 回復于:2005-06-07 14:23:25 |
[quote:b188a22ebd="wangrujun"]wolfop:
pae有擴展模式。因為pae支持36根地址線而不是32根,所以使用pae擴展模式的linux 2.6kernel,就可以支持到64G 所以,您說的8G內存限制是不存在的。[/quote:b188a22ebd] pae的機制遠比你描述的復雜,它的特性類似以前16位DOS下面使用XMS的機制。很多OS對PAE的支持要求4G以上的部分必須是物理內存,而且不是虛擬內存。 |
ttvast 回復于:2005-06-07 14:26:11 |
SWAP的大小和內存尋址的大小毫無關系啊,一個SWAP分區又不是只給一個進程空間使用的. |
wangrujun 回復于:2005-06-22 10:03:33 |
[quote:d2eb2fcbe0="wolfop"]
pae的機制遠比你描述的復雜,它的特性類似以前16位DOS下面使用XMS的機制。[/quote:d2eb2fcbe0] 我恰好對xms機制比較熟悉。我是286的機器用過來的。想當初硬盤也只有4M呀。 xms只不過是在地址線上做了手腳,沒有覺得復雜到哪里去。這種技術實現已經久經考驗。 [quote:d2eb2fcbe0="wolfop"] 很多OS對PAE的支持要求4G以上的部分必須是物理內存,而且不是虛擬內存。 [/quote:d2eb2fcbe0] 我沒有看到說,linux os對擴展PAE要求物理內存。 不知道是否是這樣? |
wangrujun 回復于:2005-06-22 10:05:35 |
[quote:7e5be2f9fe="ttvast"]SWAP的大小和內存尋址的大小毫無關系啊,一個SWAP分區又不是只給一個進程空間使用的.[/quote:7e5be2f9fe]
有些道理。一個進程空間確實很難用完4G的。 那么這樣看起來,debain手冊中要求swap最好是2G以下,是不是有問題呢? |
kecai_cale 回復于:2005-06-22 11:20:28 |
看后大受啟發,建議加精! |
xinyv 回復于:2005-06-22 13:06:32 |
記得一個朋友在用數據庫的時候碰到了一個問題,就是單個庫文件超過了2G
后來請教了人,記得他們好象說EXT3文件系統對單個文件2G以上的數據文件支持不太好,讓改成ReiserFS文件系統了,不知道這個對樓主是否有幫助,個人意見,僅供參考呀。 |
TCBY 回復于:2005-06-22 13:47:25 |
最好不要超過2G
否則有可能會發生意想不到的事情 我試過分4G,怎么也裝不上系統,改成2G后可以 原因:不明 |
peng 回復于:2005-06-22 14:49:11 |
[quote:0d2b271829="xinyv"]記得一個朋友在用數據庫的時候碰到了一個問題,就是單個庫文件超過了2G
后來請教了人,記得他們好象說EXT3文件系統對單個文件2G以上的數據文件支持不太好,讓改成ReiserFS文件系統了,不知道這個對樓主是否有幫助,個?.........[/quote:0d2b271829] 和樓主討論的是兩碼事。。 oracle不能生成2g的單獨文件,有兩個方面。 1、系統劃分硬盤文件系統的時候,系統本身不支持2g文件。 2、oracle版本問題,32位的oracle也不能生成2g的數據,64bit的數據庫可以。 |
wangrujun 回復于:2005-06-22 16:39:39 |
[quote:61e453c1ce="TCBY"]最好不要超過2G
否則有可能會發生意想不到的事情 我試過分4G,怎么也裝不上系統,改成2G后可以 原因:不明[/quote:61e453c1ce] 我用ext3 文件系統,8G swap,安裝沒有問題。目前運行也沒有問題。 |
st690714 回復于:2005-06-22 16:43:23 |
軟件開發老比硬件慢一步 |
TCBY 回復于:2005-06-22 21:56:56 |
[quote:8560416934="wangrujun"]
我用ext3 文件系統,8G swap,安裝沒有問題。目前運行也沒有問題。[/quote:8560416934] 所以我說意想不到 :D |
孤城 回復于:2005-06-23 10:32:50 |
學到不少知識 |
零二年的夏天 回復于:2005-06-23 13:53:11 |
執著,專注!
值得學習! |
xinyv 回復于:2005-06-23 14:03:35 |
[quote:8165b44e3c="peng"]
1、系統劃分硬盤文件系統的時候,系統本身不支持2g文件。 2、oracle版本問題,32位的oracle也不能生成2g的數據,64bit的數據庫可以。[/quote:8165b44e3c] 不好意思,我對文件系統不太懂. 想在請教一下,如上面說,如果我的交換分區建的小了,想擴大,我可以用添加交換文件的方法解決,那如過我要添加4G的交換文件是不是就得添加2個,8G的就添加4個呢? |
wangrujun 回復于:2005-06-24 10:42:05 |
xinyv:
可以建立4個G的交換文件,完成后激活就可以。 |
wangrujun 回復于:2005-07-11 11:17:39 |
關于本貼的最后答案,來自于Linus Torvalds和他的朋友們的討論
[quote:d1d74bd0c3] 2. Greater 2.4 Swap Requirements 7 Jan 2001 - 18 Jan 2001 (100 posts) Archive Link: "Subtle MM bug" Topics: Virtual Memory People: Rik van Riel, Linus Torvalds, Eric W. Biederman, Zlatko Calusic In the course of discussion, it became clear that Linux 2.4.x required more swap than previous versions. Rik van Riel mentioned, "2.4 keeps dirty pages in the swap cache, so you will need more swap to run the same programs..." He asked Linus Torvalds, "is this something we want to keep or should we give the user the option to run in a mode where swap space is freed when we swap in something non-shared ?" Linus replied: I'd prefer just documenting it and keeping it. I'd hate to have two fairly different modes of behaviour. It's always been the suggested "twice the amount of RAM", although there's historically been the "Linux doesn't really need that much" that we just killed with 2.4.x. If you have 512MB of RAM, you can probably afford another 40GB or so of harddisk. They are disgustingly cheap these days. Zlatko Calusic worried that more data in swap would degrade performance because the disk head would need more seek time to find data. He asked if Linus was sure this would be okay, and Linus replied, "I'm not _sure_, obviously. However, one thing I _am_ sure of is that the sticky page-cache simplifies some things enormously, and make some things possible that simply weren't possible before." . But in a nearby post he admitted, "the sticky allocation _might_ make the IO we do be more spread out." He felt it was important to consider these kinds of potential downsides, though he felt that in this case the benefits outweighed the drawbacks; and at one point Eric W. Biederman explained suclearcase/" target="_blank" >ccinctly, "The tradeoff when implemented correctly is that writes will tend to be more spread out and reads should be better clustered together." Zlatko ran some tests, and could not find any problems with the 2.4.0 memory management logic, though he added, "I have found that new kernel allocates 4 times more swap space under some circumstances. That may or may not be alarming, it remains to be seen." At one point, Linus gave his overall take on 2.2/2.4 performance issues. He said: I personally think 2.4.x is going to be as fast or faster at just about anything. We do have some MM issues still to hash out, and tuning to do, but I'm absolutely convinced that 2.4.x is going to be a _lot_ easier to tune than 2.2.x ever was. The "scan the page tables without doing any IO" thing just makes the 2.4.x memory management several orders of magnitude more flexible than 2.2.x ever was. (This is why I worked so hard at getting the PageDirty semantics right in the last two months or so - and why I released 2.4.0 when I did. Getting PageDirty right was the big step to make all of the VM stuff possible in the first place. Even if it probably looked a bit foolhardy to change the semantics of "writepage()" quite radically just before 2.4 was released). Elsewhere, he considered the case of swapless or low-swap machines: If you don't have any swap, or if you run out of swap, the major difference between 2.2.x and 2.4.x is probably going to be the oom handling: I suspect that 2.4.x might be more likely to kill things off sooner (but it tries to be graceful about which processes to kill). Not having any swap is going to be a performance issue for both 2.2.x and 2.4.x - Linux likes to push inactive dirty pages out to swap where they can lie around without bothering anybody, even if there is no _major_ memory crunch going on. If you do have swap, but it's smaller than your available physical RAM, I suspect that the Linux-2.4 swap pre-allocate may cause that kind of performance degradation earlier than 2.2.x would have. Another way of putting this: in 2.2.x you could use a fairly small swap partition to pick up some of the slack, and in 2.4.x a really small swap-partition doesn't really buy you much anything. [/quote:d1d74bd0c3] 在討論中,Linus明確的說明了,在Linux2.4.x中,內存管理(MM)策略的改變。就如Windows98向Windows2000轉變一樣,微軟在內存和交換區中保存了更多的臟頁,而不是及時回收內存,大幅提高了系統的效率。(見Widnows核心編程第18章的論述)。 Linus明確的指出,即使是512M內存,也可以分配高達40G的交換區,以提高系統的性能。Zlatko 在向Linus提出性能的質疑后,自己進行了驗證。實驗表明大交換區策略,沒有增加磁盤I/O的流量。 最后,關于本貼早先的問題,究竟分多大的分區為宜,在查閱了一些資料后,對本問題我目前的最終看法,并且我也將按照如下方法分配交換區: 1. 交換區最小不低于4G 建立兩個各為2G的交換區,做為基礎的4G交換分區 2. 建立8個2G的交換文件,做為擴展的交換分區 這樣總的交換分區大概在20G左右,如果硬盤更大,可以增加最多。 謝謝網中人提出的一系列問題,我也可以對您的按照系統運行狀況來分配交換區的提議,做出答復:按照Linus的建議,可以不必要考慮這些。Linux 2.4.x內核會在大的交換區情況下,運行的更好。 |
網中人 回復于:2005-07-11 13:41:06 |
呵.... 就是這篇!
不過, 我所提的 total usage, 是指 mem 的真實用量, 這包含了 app 與 kernel 還有其他各種用途... 若 total 只用 64M , 你真的認為 4G swap 有幫助? 若你還堅持, 那好吧, 那我沒啥話要說了! |
wangrujun 回復于:2005-07-11 14:55:20 |
呵呵,如果是64M,4G swap也許真的有所幫助。你看Linus說512M就可以使用40G的swap,那么64M為何不可能使用4G的swap呢?這里Linus有個基本的前提,就是磁盤已經非常便宜,下雨天打孩子,閑著也是閑著呢。
也許您還可以最其它的例子,比如512K的Memory,是否需要4G的swap。那...這樣的話,就扯得遠了。其實我在第一貼的提問中,說明了基本的配置情況,這里有一個理性的限定范圍吧。 |
flysgly_tracy 回復于:2005-07-11 15:35:59 |
看了大家的發言,懂了不少.但是說什么的都有.所以還是有點暈.
現在我的服務器是IBM x445系列,內存4G,安裝的Linux企業版4,還有Weblogic8.1,分配的是4G的swap,機器運行的時候很慢,尤其是用SSH從服務器上拷貝東西下來時,簡直讓人受不了! 還請各位大俠支招??! |
rlneo 回復于:2005-07-11 16:40:08 |
超過2G以后sys_daemon進程會首選從SWAP中讀取數據 速度會很慢的 |
wangrujun 回復于:2005-07-12 08:59:18 |
樓上說的這個情況,我還是第一次看到。學習中。 |
gridpc 回復于:2005-07-12 10:49:25 |
[quote:f46510ce29="wangrujun"]我在debian 和 fedora的文檔中,都看到有說明,swap分區最好不要超過2G。
我想請問題一下,為何單個swap分區不要超過2G?如果超過2G會有什么問題? 另外,這個限制是只對ide硬盤而言,還是普遍的要求,即對scsi?.........[/quote:f46510ce29] xuexi |
網中人 回復于:2005-07-12 12:59:47 |
[quote:0c944efcef="wangrujun"]呵呵,如果是64M,4G swap也許真的有所幫助。你看Linus說512M就可以使用40G的swap,那么64M為何不可能使用4G的swap呢?這里Linus有個基本的前提,就是磁盤已經非常便宜,下雨天打孩子,閑著也是閑著呢。
也許您還..........[/quote:0c944efcef] 嗯? 看起來是文字的誤會? 我說 toal "用" 64M, 不是說 total "有" 64M . 不知, 這用跟有的差別, 能否讓兄明白? |
flysgly_tracy 回復于:2005-07-12 13:46:39 |
那么我是否可以改成兩個2G的swap呢?這樣會不會提高服務器的運行速度呢? |
wangrujun 回復于:2005-07-12 17:20:05 |
[quote:2d2d9b74f7="網中人"]
嗯? 看起來是文字的誤會? 我說 toal "用" 64M, 不是說 total "有" 64M . 不知, 這用跟有的差別, 能否讓兄明白?[/quote:2d2d9b74f7] 老兄客氣了。是我的疏忽,明白您的意思了。 如果swap總共只用64M,當然可以不用4G。Linus在文章中的本意,并且我也在前文中說明過,因為磁盤費用低廉,64M與4G在費用上沒有什么區別,所以這時寧可使用更多的磁盤。 如果server的硬盤只有10G,當然要節省空間了。 |
wangrujun 回復于:2005-07-12 17:24:37 |
[quote:54de7b4599="flysgly_tracy"]那么我是否可以改成兩個2G的swap呢?這樣會不會提高服務器的運行速度呢?[/quote:54de7b4599]
如果你有多個物理磁盤,建議在把swap分布到每塊磁盤上,這時確實可以提高運行速度。 如果是一塊物理磁盤,那么是否這樣做就無所謂。 redhat在其文檔中聲稱,每塊swap大小不可超過2G。但是ibm在其針對linux 2.4 kernel的文檔中表明,2.4.10及以后的linux kernel,支持的每塊swap最大不超過24GB。 我寧可相信ibm的文檔。原因redhat文檔中,多處有過時的錯誤描述,實在讓人為之汗顏。 |
wangrujun 回復于:2005-07-12 17:26:54 |
[quote:34d0475a39="rlneo"]超過2G以后sys_daemon進程會首選從SWAP中讀取數據 速度會很慢的[/quote:34d0475a39]
請教您這樣說的原因何在?我在哪里可以求證?是否可以貼一段代碼,或者指示一個方向? 謝謝。 |
7758 回復于:2005-07-18 14:50:36 |
[quote:4b7baf3db3="wangrujun"]
請教您這樣說的原因何在?我在哪里可以求證?是否可以貼一段代碼,或者指示一個方向? 謝謝。[/quote:4b7baf3db3] 的確,這個我也是第一次聽說,忘給個文檔說明下 |
linsu 回復于:2005-08-05 10:43:31 |
:arrow: 交換分區一般是內存的兩倍就可以,不過要是要運行orcale的話,并且物理內存不是很大的話,建議交換分區1G |
火雞 回復于:2005-08-05 17:02:35 |
[quote:460b2de12a="wangrujun"]如果我有需求,需要8G的交換文件呢?[/quote:460b2de12a]
那就多做幾個SWAP。 |
luckandy_zhu 回復于:2005-08-15 17:10:22 |
我沒有機會接觸到上面討論的問題,但我也一直奇怪,為什么linux需要swap分區,為什么大家都認為是內存的2倍,我在自己的機器上裝過,因為是自己的pc,一開始按照2倍分的swap分區,后來硬盤空間太緊,就做的和內存一樣大,甚至有一段時間沒有swap分區,運行的也挺正常的,為什么我要把我寶貴的硬盤空間分出來給可有可無的swap分區,為了出現錯誤時把內存內容還有其他信息寫到里面么?是為了提高系統效率么,那為什么不增加內存呢?為什么系統不能根據我的內存大小進行管理,這不正是操作系統的職責么? |
bingosek 回復于:2005-08-15 17:48:00 |
[quote:a3d2887a5a="luckandy_zhu"]我沒有機會接觸到上面討論的問題,但我也一直奇怪,為什么linux需要swap分區,為什么大家都認為是內存的2倍,我在自己的機器上裝過,因為是自己的pc,一開始按照2倍分的swap分區,后來硬盤空間太緊,就做的和內存一?.........[/quote:a3d2887a5a]
swap是內存的2倍只是一個給新手使用的經驗值,實際使用swap的大小是根據程序對內存使用狀況需要調整的。 你機器不使用swap也能夠運行是因為運行的程序對內存的需求不大 至于說swap的作用,跟windows的虛擬內存的作用是一樣的,我也不多說了 |
原文轉自:http://www.anti-gravitydesign.com