天天看點

淺入分析和Linux核心相關的檔案夾/proc和/sys .

近來文章被踩的厲害,我隻想把自己從馬哥學的知識自己總結下發到部落格裡,但是沒想到昨天一篇文章剛發一上午被踩了9次。。。

淺入分析和Linux核心相關的檔案夾/proc和/sys .

如果您真的覺得我的文章很爛,請告訴我原因,不勝感激。

這星期,馬哥講了關于Linux核心的編譯和Linux的核心子產品,淺顯易懂,是以寫出來和大家一起分享學習成果。首先說明,這隻是簡單的編譯,和手動添加子產品,而這篇主要介紹linux的核心分類,和linux核心相關的兩個檔案夾/proc    /sys   這是實作核心編譯和添加核心子產品的理論基礎。

核心的分類:  

     1. 微核心:盡可能的保證核心的精簡,所有的裝置都需要安裝驅動程式(不知道這樣說準确否) 例如windows,你所有的裝置的驅動城區都是你後來裝的。

     2. 單核心:裝置直接融入到核心中去。

                linux屬于單核心,但是由于它巧妙的設計(可以這樣想,核心外表有很多“洞”用于連接配接子產品),它可以将很多裝置做成子產品,當需要時自動加入核心,由于是在核心中工                  作,是以效率非常高。

從理論上來講,微核心是更先進的設計,但是到目前為止,它的優勢都沒有發揮出來,linux由于單核心的設計,是以造成了驅動程式難安裝,難研發。

Linux核心的分類

      1.kernel   核心本身    

         還記得initrd嗎?它其實是生成的,從過/sbin/mkinitrd這個腳本,在你安裝作業系統後,自動生成,用于輔助核心。

      2.kernel object  核心對象(核心子產品)

        它們是以.ko結尾的檔案,所有的,ko檔案隻能在核心加載。他們位于/lib/modules目錄 大小50M左右,核心将檔案系統和各種外圍驅動都做成子產品放在這裡面,而且每一個           不同版本的核心都對應一個和核心版本名字相同的檔案夾存放對應的核心子產品檔案###必須嚴格對應,否則會出錯    

核心編譯時選擇的選項不同,功能也不同

redhat提供了3個32位核心版本,2個64位核心版本

32位

kernel                最多支援32位cpu,最多支援4G記憶體

      kernel:1G           啟動時kernel要占去1G記憶體,留給程序的隻有3G

      process:3G

kernel-PAE       最多支援32顆對稱多處理器,支援16G記憶體

      單個程序隻能最多3G記憶體,對

kernel-xen        支援基于xen半虛拟化 ,現在不支援,轉向KVM

64位:

 kernel : 64個cpu, 512G

 kernel-xen:126顆cpu,512G記憶體

 以目前的技術可以支援到1T的記憶體          

核心參數:

核心可以接受很多參數,例如grub.conf在啟動時傳遞給核心啟動等級。而在系統運作的時候也可以傳遞核心參數,核心工作在核心空間,但是使用者程式工作在使用者空間是以需要通過使用者空間傳遞一些參數給核心,讓核心按我們的需要來工作。

那麼向核心傳遞參數,這就是今天這兩個檔案夾的作用。

他們的作用:

/porc          正在運作的核心資訊映射  

主要輸出:程序資訊    

                    記憶體資源資訊

                    磁盤分區資訊等等

/sys      

                    硬體裝置的驅動程式資訊

它們都是僞檔案系統,如果了解這些檔案的參數,并向裡面傳遞特殊數值,完全可以實作實時調整核心工作特征和硬體工作特征。

那麼我們打開/proc目錄來檢視裡面的内容,具體指令我就不寫了,這裡我隻根據目錄樹來介紹我學到的各個目錄的作用(通過顔色識别),如果您有興趣可以看下~

/proc/

           1/cmdline       啟動程序的指令行指令及其參數是什麼

           1/proc/cmdline     gurb向核心傳遞的參數檔案,以後可以通過腳本讀取它的參數,來判定啟動時向核心傳遞什麼資訊

           1/maps       記憶體使用資訊的映射

           1/mem     記憶體資訊

           1/io          讀寫

           1/stat     程序資訊

           1/status

     acpi           進階隊員管理子系統相關資訊

     asoud       聲音資訊

     budyinfo    夥伴系統資訊,實作記憶體回收的子系統,防止記憶體碎片

     bus        系統硬體總線資訊

     cpuinfo

     crypto    加密

     devices    目前系統上所有的字元裝置和塊裝置

     diskstat      磁盤狀态資訊 (很難懂)

             iostat 通過這個檔案可以檢視它的資訊

     dma    直接記憶體通路,實作記憶體與對應的磁盤裝置,直接映射以後,通路将資料脫離cpu管理時,仍然可以從磁盤讀取到記憶體的一種

                  系統優化裝置

      fb (frame buffer)       幀緩存,對一些特殊的顯示卡顯示裝置提供驅動。

      filesystems   目前系統中啟用的所有檔案系統

                     /cpuset       cpu分組,可以實作程序和cpu綁定,可以将它挂載來檢視那捆綁資訊,它也是一個僞目錄

      ide

      fs

      interruptes   中斷(硬終端,軟中斷)

      ioports            硬體IO端口資訊     

      loadavg           平均負載,uptime指令檢視這個檔案

      locks             檔案鎖,檔案程序不允許兩個程序同時寫檔案

      molues         目前系統上正在時候的子產品

      mdstat           RAID

      meminfo         記憶體資訊

      partitions        核心識别的分區資訊

      schedstat         程序排程資訊

      slabinfo            記憶體子系統資訊和budyinfo一樣

      swaps                交換分區資訊

      uptime               uptime指令顯示的檔案

      version      `uname -r`    

      vmstat        

      zoneinfo            記憶體的分區資訊,Normal段      DMA段     BIOS段

/proc/sys       凡是輸出在sys目錄裡的資訊,都是可以通過調整他們的參數來管理核心

          crypto

          debug

          dev

           ls

           fs

           kernel

           net

                  /ipv4        裡面都是可以調整的網絡子產品

                                / icmp_echo_ignore_all       改為1别人就ping不同

                                  ip_forward              用于定義如果主機上有兩塊網卡,或者一個網卡有兩個位址,并且在不同網絡段,

                                                                   它能啟用在兩個網絡之間實作資料包路由(直連路由)轉發功能。它可以決定你的

                                                                   主機是否可以作為路由器或網關使用。預設為0

                                max_orphans         最大孤兒連結數

                                tcp_fin_timeout        tcp  fin資料包等待逾時時間                             

                                tcp_max_syn_backets          網絡調優其實就是調這些參數

                tcp_mem             緩沖大小

                     tcp_rmen          讀緩沖大小

                tcp_ wmen       寫緩沖大小

                   tcp_reuse          tcp的連結數是否可重用,多次時間重用

                                sunrpc

            vm                

                  /dorp_caches        用于釋放記憶體裡緩存

差別哪些檔案可以傳遞參數:凡是有w權限的都是可以傳遞參數的

如何調整核心參數檔案的值   一般在/proc/sys

1. 臨時調成(暫時有效,立即生效):

view plain copy to clipboard print ?

  1. # echo >                  echo 1 > /proc/sys/net/ipv4/ip_forward           #全路徑    
  2. # sysctl -w               sysctl -w net.ipv4.ip_forward=1                  #去掉/proc/sys  用.隔開          

2. 永久有效,(但是設定好不是立即生效)

通過設定/etc/sysct1.conf,他是啟動時rc.sysinit讀取的核心參數

例如修改裡面的

  1. net.ipv4.ip_forward = 1                       #打開路由轉發功能  

另外如果想使修改後的值立即生效

  1. #sysctl -p            

顯示目前運作的所有生效的核心參數的值

  1. #sysctl -a            

#######這個檔案是系統工程師生涯的直覺重要的檔案

http://www.ahbank.org/

繼續閱讀