當前位置:首頁 » 操作系統 » linux4k

linux4k

發布時間: 2025-05-22 04:22:22

『壹』 linux下ls命令,-h參數具體是有什麼用我ls -h一個目錄,得到大小是4k,可是 -h這個目錄卻是29M.

h選項的意思是生成的結果有利於人看,也就是不是用默認的byte做單位,而是根據實際情況調整。
4K就是4k位元組,就是目錄的真實大小,linux系統中目錄中保存的僅僅是文件的文件名和文件的inode號,相當於保存的是它裡面文件的指針,所以系統會根據目錄中文件名和inode的數量分配若干個block給目錄,而block的大小一般就是4k,如果一個目錄中文件名太多可能會分配2個或多個block給目錄。

『貳』 為什麼linux kernel默認的頁面大小是4K,而不是4M或8M

太多了,我就做一次搬運工了。

相信很多人在看內核內存管理部分的時候,都有這樣一個疑問,為什麼物理頁面的大小選擇4K,而不是大一些或者小一些呢?

這個問題沒有固定的答案,仁者見仁智者見智,每個人的關注點不一樣。所以這篇文章不是說給出一個固定的答案,更多的只是一篇討論性的文章。

內核的頁面大小首先跟CPU有關,不同的架構支持的頁面大小也不相同,但有一個共同點,那就是肯定支持4K的頁面大小。為什麼處理器在設計
的時候會選擇4K,而不是其他,這個只有熟悉CPU歷史的人才能給出答案,本人才疏學淺,回答不上來,有興趣的自己找一找。當然處理器的設計者在考慮頁面
大小的時候,也不是憑空就選擇了這個大小,除了歷史因素,肯定綜合了考慮了大頁面、小頁面的優缺點,所以這里主要列出這些優缺點,通過這些比較來發現內核
為什麼將默認的頁面大小選擇為4K。

現在更多爭論的是大頁面還是維持現在的頁面4K大小,所以小頁面的情況我們就不考慮了,通過比較前兩者也可以得出小頁面的情況。支持大頁面的人通常認為大頁面有以下好處:

1、減小page table佔用的內存。

假設內存一定的話,頁面大小越大,管理頁面佔用的內存也越小。現在內核中每個頁面假設是4K的話,這4K不是全都可用,還有一部分用作
struct
page(大約是64bytes),如果是2.6.32的話,每個頁還有一個page_cgroup(32bytes),也就是說內存大小的2.3%
(96/4096)會被內核固定使用。如果頁面大小是4M的話,這個比率大約是0.0006%。假設內存時64G的話,頁面大小是4K,管理頁佔用的內存
為1.472G,而頁面大小是4M,管理頁面佔用的內存為0.393M。所以頁面比較大時,節省的內存比較多。

2、提高TLB的命中率

每次訪問內存的時候,都要將虛擬地址轉換為物理地址,如果每次都訪問頁表的話,消耗比較大。因此,通常使用TLB來加速這個過程。但是
TLB的可以直接轉換的地址范圍是有限的(具體就是項數乘以頁面大小),一旦出現TLB
miss,這時就必須去頁表中查找。所以,如果是大頁面的話,同樣TLB項數的情況下,可以跟蹤更大的內存。

3、提高磁碟I/O

我們知道在訪問磁碟時,最耗時的操作就是查找寫入盤區的起始位置,也就是在磁碟碟片上將讀寫頭置於正確的位置上。所以如果是大頁面的話,可以減少寫入磁碟的次數。比如要寫入4M的緩存,頁面大小是4M的話,只需寫入1次,而頁面大小是4K的話,則需要寫入4次。

4、提供緩存利用率

如果是大頁面的話,可以減少訪問夥伴系統的次數。調用夥伴系統的操作隊系統的數據和指令高速緩存有相當的影響。內核越浪費這些資源,這些資源對用戶空間進程就越不可用。

除了上面提高的好處,肯定還有的好處,就不一一列舉了。那既然有這么好處,而且現在內存越來越大,為什麼不更多地採用大頁面呢?比如4M?

軟體開發中,從來不會有非常完美的方案,都是在優缺點之間找到平衡點。同樣,大頁面有這樣那樣的好處,缺點也很明顯。

1、最大的問題就是內存浪費,而且這個問題非常嚴重。比如這時要分配的內存是4M+1byte,這時需要兩個頁面才能滿足分配的需要,這個
時候浪費的內存為4M-1byte。如果頁面是4K的話,浪費的內存數量為4k-1byte。頁面太大,可能導致每個頁面都只使用了部分空間,剩餘的空間
就被浪費了。當然對於資料庫這樣的系統來說,頁面越大會越好,但是內核要考慮到通用的情況,而不是專注於特殊的應用場景。再比如,現在系統都是只分配虛擬
地址空間,虛擬地址空間只有在真正被訪問的時候,才映射物理頁面,而且為了減少物理頁面的浪費,對不訪問的部分,則不作映射。如果頁面太大,在映射很小的
部分時,分配的內存會越大,浪費也就越大。系統在運行時,會頻繁地請求內存頁的操作,這樣導致潛在的浪費會非常嚴重。這樣的浪費會完全抵消減小page
table的優勢。

2、頁面太大,會導致大量的內存碎片。因為底層的內存管理是以頁面為單位。如果系統運行了很長時間,空閑的內存很多,但是連續的內存塊都小
於要分配的頁面數。這時可以通過移動內存塊或者利用swap來獲取可用內存,但是會導致分配內存的操作很慢,這種慢會形成惡性循環,嚴重影響系統的性能。
如果是小頁面的話,內存的利用會比較緊湊,分配頁面時需要的連續內存塊的大小不像大頁面那樣需要的那麼大。

3、如果CPU崩潰,TLB可以訪問的內存越大,對系統的影響也越大。這時一把雙刃劍,大頁面可以提供TLB訪問的內存數量,但是CPU崩潰時,會導致很多內存訪問要去頁表中請求物理地址。

4、兼容性問題。X86處理器支持的頁面大小隻有4K,所以如果頁面過大的話,會導致兼容性問題。

5、如果頁面太大,在將內存頁換出到swap分區時,需要換出的內存也就越大,會影響性能。

總之,這個頁面大小4K是在計算機發展過程中選擇的,也是在實踐中經過檢驗的,現在看來這個頁面是合適的。

熱點內容
vc6編譯操作 發布:2025-08-20 23:16:14 瀏覽:869
時統伺服器搭建 發布:2025-08-20 23:15:58 瀏覽:907
c語言單字元 發布:2025-08-20 23:15:12 瀏覽:70
outlook發送伺服器地址在哪裡 發布:2025-08-20 23:06:13 瀏覽:1000
c語言培訓心得 發布:2025-08-20 23:02:20 瀏覽:46
如何打開raw伺服器鏡像 發布:2025-08-20 22:48:13 瀏覽:76
1分鍾造解壓神器 發布:2025-08-20 22:46:28 瀏覽:378
雲伺服器搭建spark 發布:2025-08-20 22:41:19 瀏覽:36
好用免費雲伺服器 發布:2025-08-20 22:16:44 瀏覽:609
傲慢與偏見ftp 發布:2025-08-20 22:11:15 瀏覽:904