歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

淺談linux性能調優之二十:模塊管理與內核編譯

淺談linux性能調優之二十:模塊管理與內核編譯   淺談linux性能調優之十九:lvm高級使用 http://www.2cto.com/os/201307/232320.html    模塊是具有獨立功能的程序,它可以被單獨編譯,但不能獨立運行。它在運行時被鏈接到內核作為內核的一部分在內核空間運行,這與運行在用戶空間的進程是不同的。模塊通常由一組函數和數據結構組成,用來實現一種文件系統、一個驅動程序或其他內核上層的功能。   總之,模塊是一個為內核(從某種意義上來說,內核也是一個模塊)或其他內核模塊提供使用功能的代碼塊.在linux下安裝過驅動的管理員因該知道,下載好驅動程序,編譯完成後,最後會執行modprobe modulename,從而加載此模塊,支持對應的設別。          可以使用命令lsmod查看系統已經加載的模塊: Module                  Size  Used by 模塊名                模塊大小        被使用的次數,被啥使用 nls_utf8                1389  2  ipt_REJECT              2349  2  nf_conntrack_ipv4       9440  2  nf_defrag_ipv4          1449  1 nf_conntrack_ipv4 iptable_filter          2759  1  ip_tables              17733  1 iptable_filter ip6t_REJECT             4562  2  nf_conntrack_ipv6      19655  2  xt_state                1458  4  nf_conntrack           79643  3 nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state ip6table_filter         2855  1  ip6_tables             19392  1 ip6table_filter ipv6                  321209  76 ip6t_REJECT,nf_conntrack_ uinput                  8182  0  ppdev                   8695  0  parport_pc             22944  0      可以看到有的模塊沒有被使用過,但是應經被加載,而ipv6相關的模塊有幾個,但是我們未使用ipv6這中IP地址管理方式,還占空間,這就需要我們來輕量化內核,通過配置文件可以完成的,但是在添加模塊支持時,我們可能就沒必要在網上找補丁了,還有一個重要的原因就是可能現在使用的內核存在bug,這裡我說說內核編譯步驟:       從http://www.kernel.org上下載:linux-2.6.34.14.tar.xz         解壓:      mv linux-2.6.34.14.tar.xz /usr/src/kernels/      xz -d linux-2.6.34.14.tar.xz       tar xf linux-2.6.34.14.tar     除了安裝常用編譯工具,開發包再安裝ncurses-devel        cd linux-2.6.34.14      make mrproper        #清除舊目標文件和配置      make menuconfig    #配置內核選項         這裡我沒選ipv6支持,添加了ntfs文件系統的支持         注意:"*" 表示啟動內核時直接加載的模塊              "M" 表示在需要該模塊時動態加載,這種好處就是節省資源              " " 空格表示不選      make                #編譯內核      make modules        #編譯內核模塊      make modules_install    #安裝內核模塊      make install        #安裝新內核       驗證:less /etc/grub.conf # default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux Server (2.6.34.14)     root (hd0,0)     kernel /vmlinuz-2.6.34.14 ro root=UUID=2858d858-b089-4d4a-a044-4b75325a35dd rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet     initrd /initramfs-2.6.34.14.img title Red Hat Enterprise Linux (2.6.32-71.el6.x86_64)     root (hd0,0)     kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=UUID=2858d858-b089-4d4a-a044-4b75325a35dd rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet     initrd /initramfs-2.6.32-71.el6.x86_64.img #     格式化一個ntfs格式的U盤,在當前啟動的內核不識別,啟動新內核便可以自動掛載         出現的問題:         錯誤:make[2]: warning:  Clock skew detected.  Your build may be incomplete.              make[2]: Warning: File `/usr/src/kernels/linux-2.6.34.14/Documentation/networking/Makefile' has modification time 1.4e+07 s in the future     網上資料分析: ###################################### We may get warning of this type when: 1) You try to build after moving your data from one machine to another. 2) You try to build after restarting any old machine.   This is due to the fact that sometimes when a machine is restarted its time and date settings get affected. Also when you transfer data from one machine to another one may get such an error because of the time difference form machine to machine.   There are two ways to overcome this error: A] Linux has a very handy ‘the touch command’. How to Use: # touch Explanation: The touch command changes the time stamp of the file with the ‘file name’ give as argument to the command. For every file the Linux OS maitains some data like the files creation time, last modification time, etc. touch changes the last modification time of the command and sets it to the time the touch command was executed. The very well known ‘make’ command works on a very similar principle. This method is suitable only if yu haev transferred one or two files. But if there are many such files (and also if the machine time is not set to the present) then it would be better to use the following method. [EDIT :] Okay here’s an update: You can use the touch command for any number of files in the following manner: 1. Just ‘cd’ into the directory where the files need a time-stamp update. 2. Next use the following command which will update the time-stamps of all the files in the directory: # find . -exec touch {} \;     B] the ‘date’ command: How to use: # sudo date Explanation: The date command changes the time and date of the Linux system to the time and date given as an argument. The argument is formed int he following way - -> First two digits are the current month like 02 for February and 12 for December. -> Next two digits are the date from 01 to 30 or 31. -> Next two digits are the time digits. This is to be strictly given in the 24 hour format. Nevertheless, while displaying the system time ( which happens when the date command is executed without any arguments ) the time is displayed in 12 hour format or whatever format is set. -> next two digits are for minutes range is from 00 to 59 ->Next four digits are for the current year like 2013. This way the system time will be set to the current time and your build will be now successful.   ######################################                                                                                                                       [email protected]                                                                                                                                 西郵-小宋     建議:在編譯內核時,要對每個模塊的功能有一定的了解,否則對模塊的選擇一定注意,盡量使用"M"選擇
Copyright © Linux教程網 All Rights Reserved