»
S
I
D
E
B
A
R
«
Strange slowness and the reason
Dec 7th, 2008 by kanru

最近系統在開啟 firefox 後常常會使得整個系統越來越慢,一開始以為是因為我用 minefield 的關係。到 bugzilla 搜尋了半天只發現跟啟用 jemalloc 會拖慢系統的相關問題,我以為就是這個原因,因為有一次我 /tmp 開不夠大,結果被 jemalloc 的 mmap 檔塞爆了。但是調整 jemalloc 相關參數之後仍不見起色。

於是我換回預設的 iceweasel 3.0.3,但情況還是一樣。只要開啟 firefox 之後系統就會明顯變慢,但是看記憶體用量也不會越變越多,是正常範圍。越來越覺得可能不是 firefox 的錯,不然 bugzilla 與 web 上早就叫苦連天了。

今天突然想到我在編譯 kernel 的時候有加入 CONFIG_HIGHPTE 選項,以為是因此拖慢系統,又認為可能是因為開啟 CONFIG_HIGHMEM4G 所以又增加額外 overhead,於是開始研究解決方法。

開啟 CONFIG_HIGHMEM4G 是因為我總共有 1.25 G 的記憶體可以用,但是 Linux 預設只能使用實體記憶體 9xx MB 的大小,不得已只好開啟 CONFIG_HIGHMEM4G,可以參考 Kernel Trap 這篇。

搜尋一下在 2004 年與 2006 年都有把 2G memory split 選項加入的討論,但是目前編譯 2.6.28-rc7 時還是要先開啟 EMBEDDED 才能選 VMSPLIT_2G…

總之編譯了 kernel 重開機測試,打開 htop 監看記憶體用量與 CPU 用量,突然發現我所有的 process 都是 nice 5,想起 awesome 有個 bug report 就是一樣的問題,因為某一次的修改讓 awesome 會用 SHELL 環境變數裡面的 shell 來執行程式,而有問題的是 zsh,因為 zsh 預設會給 background process 比較高的 nice 值,而我只有瞄過這個 bug report 沒有多想…

我使用 cpufreq 的 ondemand governor,如果 process 的 nice 值大於零則不會替該 process 調高 CPU 速度,因此很有可能這樣才讓系統顯得緩慢 (永遠都是 798 MHz),從 .xsession 把 SHELL 指定為 /bin/sh 之後 nice 值都正常了,直到現在系統都沒有變慢的情形。

令人好奇的是,究竟是因為我改了 kernel 參數而變好的,還是改了 SHELL 才變好的呢… 我猜大概是後者影響比較多吧。

Display VCS info in prompts
Oct 4th, 2008 by kanru

通常 VCS (Version Control System) 都會在工作目錄底下藏一些特殊目錄用來儲存資訊,如 .svn .git .hg 等,因此我們可以在 shell prompt 上動一些手腳,當我們進到 VCS 工作目錄時,自動顯示相關的訊息在 prompt 上。

而 zsh-beta 4.3.6-dev-0+20080921-1 內建了由 Frank Terbeck 開發的 vcs_info 子系統,可以自動偵測 bzr, cdv, CVS, darcs, git, hg, mtn, p4, svk, svn, tla 等多種 VCS,並設定相關的環境變數可以顯示在 prompt 上。

zsh prompt

我的 prompt 設定如下

    autoload -Uz vcs_info && vcs_info
    zstyle ':vcs_info:' actionformats \
    '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
    zstyle ':vcs_info:' formats       \
    '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{5}]%f '
    zstyle ':vcs_info:(sv[nk]|bzr):' branchformat '%b%F{1}:%F{3}%r'
    precmd () { vcs_info }
    EXITCODE="%(?..%?%1v )"
    JOBS="%(1j.%j .)"
    local BLUE="%{^[[1;34m%}"
    local RED="%{^[[1;31m%}"
    local GREEN="%{^[[1;32m%}"
    local CYAN="%{^[[1;36m%}"
    local YELLOW="%{^[[1;33m%}"
    local NO_COLOUR="%{^[[0m%}"
    PROMPT="${RED}${EXITCODE}${CYAN}${JOBS}${YELLOW}% ${RED}%n${BLUE}@%m:${GREEN}%40<...< %B%~%b%<<"'${vcs_info_msg_0_}'"
    ${YELLOW}%# ${NO_COLOUR}"

詳細的設定請參閱 zshcontrib(3) GATHERING INFORMATION FROM VERSION CONTROL SYSTEMS

»  Substance: WordPress   »  Style: Ahren Ahimsa
© Copyright 2004-2009 Kan-Ru Chen