Ubuntu12.10啟動時間調查
最近Ubuntu系統使用了一段時間以後,發現系統啟動變慢,剛裝完系統的時候啟動大概半分鐘,現在發現啟動時間感覺快1分鐘了,於是決定調查一下。
首先Google一下,發現網上希望加速Ubuntu啟動的帖子也不少,首先推薦的是一個叫bootchart的工具,它可以記錄Ubuntu系統的啟動過程,還提供圖形化的顯示,於是就安裝一個:
dev@devhost:~$ sudo apt-get install bootchart
裝完以後重啟機器
系統重啟以後到 /var/log/bootchart/下查看,發現有一個.gz文件和.png圖片,.gz文件解開後發現是對disk,process等統計,數據比較抽象,不好懂,於是打開.png文件查看:
大體上可以看出,啟動過程有三個主要的部分:
1) 0~15秒:是IO密集,CPU相對空閒的階段;從下面對應的進程描述來看又mountall,fsck這樣的東東,估計是內核在mount文件系統和磁盤檢測等;
2) 15~35秒:是IO空閒,CPU也空閒的階段;在下面看到主要是ifup,bridge,ifconfig這樣的東西,估計是在做跟網絡相關的東西,這段時間居然要20秒(說明一下,我是在筆記本上做的,還有無線等設備);
3) 35~55秒:是IO開始又變得密集,CPU也密集的階段,這階段出現的東西很多,有網絡管理服務,登錄服務和桌面等等
同時,我又用dmesg命令看了一下,從時間上基本可以印證上述3個階段做的事情:
[ 2.275412] EXT4-fs (sda7): mounted filesystem with ordered data mode. Opts: (null)
[ 11.478634] Adding 4083708k swap on /dev/sda5. Priority:-1 extents:1 across:4083708k
[ 11.526044] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 11.639571] udevd[479]: starting version 175
[ 11.762504] lp: driver loaded but no devices found
[ 12.072290] EXT4-fs (sda7): re-mounted. Opts: errors=remount-ro
第2秒倒12秒跟mount有關;
[ 14.814577] br0: port 1(eth0) entered listening state
[ 14.814587] br0: port 1(eth0) entered listening state
[ 23.797215] br0: port 1(eth0) entered learning state
[ 32.800776] br0: topology change detected, propagating
[ 32.800805] br0: port 1(eth0) entered forwarding state
第14秒倒32秒跟網絡又關,而且是跟我設置的br0(網橋,我用來實驗虛擬機網絡的)有關。
於是,我又暫時去掉了網橋,再次啟動後發現第2階段的時間如下:
[ 11.526044] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
…
[ 16.317051] r8169 0000:04:00.0: >eth0: link up
也就是說不用網橋,網絡起來秩序要不到5秒鐘。
因此我最近Ubuntu系統啟動顯然是由於設置了網橋造成的。
另外,還了解到,如果需要進一步縮減啟動時間,那麼:
1. 使用SSD硬盤;
剩下的為了減少第1階段和第3階段IO密集型的操作,主要瓶頸在disk的IO讀寫上,因此只有更換SSD硬盤才有好的效果;
2. 可以安裝 bum工具來管理服務,禁用一些不需要的服務(但是要小心,萬一禁掉一些系統必須的服務,可能會導致系統不能啟動)。