在嵌入式項目預研前期階段,我們常常需要對某個平臺進行資源和性能方面的評估,以下是最常見的一些評估指標:
1、內存評估
系統內存空間通過free、cat /proc/meminfo或者top,查看內存情況。一般有這樣一個經驗公式:
應用程序可用內存/系統物理內存>70%時,表示系統內存資源非常充足,不影響系統性能;
20%<應用程序可用內存/系統物理內存<70%時,表示系統內存資源基本能 滿足應用需求,暫時不影響系統性能;
應用程序可用內存/系統物理內 存<20%時,表示系統內存資源緊缺,需要增加系統內存;
$?free ??????????????total????????used????????free??????shared??buff/cache???available Mem:?????????123496???????21512???????75132????????1132???????26852???????63416 Swap:?????????????0???????????0???????????0 $?cat?/proc/meminfo MemTotal:???????? 123496 kB //所有可用的內存大小,物理內存減去預留位和內核使用。系統從加電開始到引導完成,firmware/BIOS要預留一些內存,內核本身要占用一些內存,最后剩下可供內核支配的內存就是MemTotal。這個值在系統運行期間一般是固定不變的,重啟會改變。 MemFree:?????????? 75132 kB //表示系統尚未使用的內存。 MemAvailable:??????63400?kB?//真正的系統可用內存,系統中有些內存雖然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以這部分可回收的內存加上MemFree才是系統可用的內存 Buffers:????????????5644?kB?//用來給塊設備做緩存的內存,(文件系統的?metadata、pages) Cached:????????????19040?kB?//分配給文件緩沖區的內存,例如vi一個文件,就會將未保存的內容寫到該緩沖區 SwapCached:????????????0?kB?//被高速緩沖存儲用的交換空間(硬盤的swap)的大小 Active:????????????20356?kB?//經常使用的高速緩沖存儲器頁面文件大小 Inactive:??????????12628?kB?//不經常使用的高速緩沖存儲器文件大小 Active(anon):???????9412?kB?//活躍的匿名內存 Inactive(anon):???????20?kB?//不活躍的匿名內存 Active(file):??????10944?kB?//活躍的文件使用內存 Inactive(file):????12608?kB?//不活躍的文件使用內存 Unevictable:???????????0?kB?//不能被釋放的內存頁 Mlocked:???????????????0?kB?//系統調用?mlock? SwapTotal:?????????????0?kB?//交換空間總內存 SwapFree:??????????????0?kB?//交換空間空閑內存 Dirty:?????????????????0?kB?//等待被寫回到磁盤的 Writeback:?????????????0?kB?//正在被寫回的 AnonPages:??????????8300?kB?//未映射頁的內存/映射到用戶空間的非文件頁表大小 Mapped:????????????11480?kB?//映射文件內存 Shmem:??????????????1132?kB?//已經被分配的共享內存 KReclaimable:???????2132?kB?//內核內存,內存壓力時內核嘗試回收 Slab:???????????????8240?kB?//內核數據結構緩存 SReclaimable:???????2132?kB?//可收回slab內存 SUnreclaim:?????????6108?kB?//不可收回slab內存 KernelStack:?????????568?kB?//內核消耗的內存 PageTables:??????????516?kB?//管理內存分頁的索引表的大小 NFS_Unstable:??????????0?kB?//不穩定頁表的大小 Bounce:????????????????0?kB?//在低端內存中分配一個臨時buffer作為跳轉,把位于高端內存的緩存數據復制到此處消耗的內存 WritebackTmp:??????????0?kB?//FUSE用于臨時寫回緩沖區的內存 CommitLimit:???????61748?kB?//系統實際可分配內存 Committed_AS:??????58568?kB?//系統當前已分配的內存 VmallocTotal:????1048372?kB?//預留的虛擬內存總量 VmallocUsed:????????1288?kB?//已經被使用的虛擬內存 VmallocChunk:??????????0?kB?//可分配的最大的邏輯連續的虛擬內存 Percpu:???????????????32?kB?//percpu機制使用的內存
2、磁盤評估
獲取磁盤空間
$?df?-h Filesystem????????????????Size??????Used?Available?Use%?Mounted?on /dev/root?????????????????6.0M??????6.0M?????????0?100%?/rom tmpfs????????????????????60.3M??????1.1M?????59.2M???2%?/tmp /dev/mtdblock6???????????23.8M??????9.0M?????14.8M??38%?/overlay overlayfs:/overlay???????23.8M??????9.0M?????14.8M??38%?/ tmpfs???????????????????512.0K?????????0????512.0K???0%?/dev
Filesystem:代表該文件系統時哪個分區,所以列出的是設備名稱。
1K-blocks:說明下面的數字單位是1KB,可利用-h或-m來改變單位大小,也可以用-B來設置。
Used:已經使用的空間大小。
Available:剩余的空間大小。
Use%:磁盤使用率。如果使用率在90%以上時,就需要注意了,避免磁盤容量不足出現系統問題,尤其是對于文件內容增加較快的情況(如/home、/var/spool/mail等)。
Mounted on:磁盤掛載的目錄,即該磁盤的內容可以在掛載目錄下面找到。
$?cat?/proc/partitions major?minor??#blocks??name ??31????????0????????192?mtdblock0 ??31????????1?????????64?mtdblock1 ??31????????2?????????64?mtdblock2 ??31????????3??????32448?mtdblock3 ??31????????4???????1962?mtdblock4 ??31????????5??????30485?mtdblock5 ??31????????6??????24384?mtdblock6
3、磁盤寫入速度評估
$?time?dd?if=/dev/urandom?of=ranfile?bs=1M?count=1 1+0?records?in 1+0?records?out real????0m0.126s?//程序的實際運行時間 user????0m0.000s?//用戶態的時間 sys?????0m0.110s?//內核態的時間
4、CPU評估
獲取CPU信息
$?cat?/proc/cpuinfo processor???????:?0 model?name??????:?ARMv7?Processor?rev?2?(v7l) BogoMIPS????????:?298.80 Features????????:?half?thumb?fastmult?vfp?edsp?thumbee?neon?vfpv3?tls?vfpd32 CPU?implementer?:?0x41 CPU?architecture:?7 CPU?variant?????:?0x3 CPU?part????????:?0xc08 CPU?revision????:?2 Hardware????????:?Generic?AM33XX?(Flattened?Device?Tree) Revision????????:?0000 Serial??????????:?0000000000000000
運行速度的一種尺度。Bogo是Bogus(偽)的意思;MIPS是每秒百萬條指令。
5、cpu占用情況
$?uptime ?1601?up??6:40,??load?average:?1.27,?1.27,?1.39
1601 :服務器事件
6:40 :當前服務器運行時長
load average:這個輸出值,這三個值的大小一般不能大于系統CPU的個數,例如,本輸出中系統有8個CPU,如果load average的三個值長期大于8時,說明CPU很繁忙,負載很高,可能會影響系統性能,但是偶爾大于8時,倒不用擔心,一般不會影響系統性能。相反,如果load average的輸出值小于CPU的個數,則表示CPU還有空閑的時間片,比如本例中的輸出,CPU是非常空閑的。
6、系統運行情況
$?top Mem:?48420K?used,?75076K?free,?1132K?shrd,?5644K?buff,?19040K?cached CPU:??30%?usr??68%?sys???0%?nic???0%?idle???0%?io???0%?irq???0%?sirq Load?average:?1.05?1.14?1.06?2/71?6586 ??PID??PPID?USER?????STAT???VSZ?%VSZ?%CPU?COMMAND ????7?????2?root?????SW???????0???0%???2%?[ksoftirqd/0] ?6064??5894?root?????S????46772??38%???1%?./myAPP
一般 經驗
user% + sys%< 70%狀態良好
user% + sys%= 85% 狀態報警
user% + sys% >=90% 狀態糟糕
7、其他參數
系統現在參數
$?ulimit?-a core?file?size??????????(blocks,?-c)?unlimited data?seg?size???????????(kbytes,?-d)?unlimited scheduling?priority?????????????(-e)?0 file?size???????????????(blocks,?-f)?unlimited pending?signals?????????????????(-i)?3814 max?locked?memory???????(kbytes,?-l)?64 max?memory?size?????????(kbytes,?-m)?unlimited open?files??????????????????????(-n)?1024 pipe?size????????????(512?bytes,?-p)?8 POSIX?message?queues?????(bytes,?-q)?819200 real-time?priority??????????????(-r)?0 stack?size??????????????(kbytes,?-s)?8192 cpu?time???????????????(seconds,?-t)?unlimited max?user?processes??????????????(-u)?3814 virtual?memory??????????(kbytes,?-v)?unlimited file?locks??????????????????????(-x)?unlimited
8、進程資源
新建一個進程需要最小的內存空間本機為8M,具體可通過ulimit -s查看
$?ulimit?-s 8192 編輯:黃飛
?
?
?
評論