發表文章

目前顯示的是 7月, 2010的文章

Linux系統運行的各種參數解析

1、CPU 在文件”/proc/stat”裡面就包含了CPU的信息。每一個CPU的每一tick用在什麼地方都在這個文件裡面記著。 後面的數字含義分別是: user、nice、sys、idle、iowait。有些版本的kernel沒有iowait這一項。 這些數值表示從開機到現在,CPU的每tick用在哪里。例如: cpu0 256279030 0 11832528 1637168262 就是cpu0從開機到現在有 256279030 tick用在user消耗,11832528用在sys消耗。 所以如果想計算單位時間(例如1s)裡面CPU的負載,那只需要計算1秒前後數值的差除以每一秒的tick數量就可以了。 gkrellm就是這樣實現的:((200 * (v2 - v1) / CPU_TICKS_PER_SECOND) + 1) /2 例如,第一次讀取/proc/stat,user的值是256279030;一秒以後再讀一次,值是256289030, 那麼CPU在這一秒的user消耗就是: ((200 * (256289030 - 256279030) / CPU_TICKS_PER_SECOND) + 1) /2 = ((10000 * 200 / 1000000) + 1) / 2 = 1%。 2、RAM 文件”/proc/meminfo”裡面包含的就是RAM的信息,還包括了swap的信息。例如: $ cat /proc/meminfo total: used: free: shared: buffers: cached: Mem: 1057009664 851668992 205340672 0 67616768 367820800 Swap: 2146787328 164429824 1982357504 MemTotal: 1032236 kB MemFree: 200528 kB MemShared: 0 kB …… 不過從gkrellm的源代碼看,有些版本沒有前面那兩行統計的信息,只能夠根據下面的Key: Value這種各式的數據收集。 3、磁碟空間 從gkrellm的代碼看,這個是一個很復雜的數據。 磁碟分區的數據有可能分布在:/proc/mounts、/proc/diskstats、/proc/par

Linux ARM memory layout

圖片
Linux ARM memory layout ./Documentation/arm/memory.txt ./arch/arm/mm/init.c high_memory = __va((max_low << PAGE_SHIFT) - 1) + 1; arch/arm/include/asm/pgtable.h #define VMALLOC_OFFSET (8*1024*1024) arch/arm/include/asm/pgtable.h #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) arch/arm/mach-ARCH/include/mach/vmalloc.h (platform dependent) #define VMALLOC_END (PAGE_OFFSET + 0x20000000) arch/arm/include/asm/memory.h #define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET) .config CONFIG_PAGE_OFFSET=0xC0000000 VMALLOC_START = high_memory + VMALLOC_OFFSET = CONFIG_PAGE_OFFSET+ram_size + VMALLOC_OFFSET VMALLOC_END = CONFIG_PAGE_OFFSET + 0x20000000 → available VMALLOC size = 0x20000000 - VMALLOC_OFFSET - ram_size = 512M -8M -ram_size Reference: http://mkl-note.blogspot.com/2010/02/linux-arm-memory-layout.html

每位程式設計師都必須知道的「麻煩事件處理原則」

圖片