2015年12月4日 星期五

Juniper SRX550 記憶體使用量剖析報告



Juniper SRX550 記憶體使用量剖析報告

緣起:
因公司的Juniper SRX550正式上線後,其記憶體使用量持續維持在74%不變,且新增規則後接無任何變化,因此深入研究Juniper SRX系列作業系統(Junos OS)運作原理。


剖析步驟:
1.      檢視原廠說明文件或KB
2.      確認韌體版本及底層核心系統
3.      檢視Junos OS記憶體使用狀況
4.      檢視底層記憶體使用狀況
5.      總結

LAB設備:
Juniper SRX100



  • 檢視原廠說明文件或KB

經詢問SI工程師後得知Juniper Knowledge Base(KB)已經有針對Junos OS記憶體使用情況進行說明。
KB編號KB26490

KB說明:
The command displays the control plane and data plane memory, which represents the RAM that is shared between RE and PFE; of which a certain percentage is pre-allocated for utilization.
The allocation of memory is as per the system design and does not hinder the capacity of the device to route, when it is in production.

由此可知Junos OS在分配記憶體資源時,會預先配置記憶體。


  • 確認韌體版本及底層核心系統

ssh登入SRX後,執行以下指令可查詢韌體版本

範例1
zongyan@Cloud-IPS-FW-2> show version
Hostname: Cloud-IPS-FW-2
Model: srx100h2
JUNOS Software Release [12.1X46-D35.1]

查詢底層作業系統:
透過JunosOS的系統文件可查到JunosOS其實是安裝在FreeBSD上的一個子系統。
官方系統文件:


  • 檢視Junos OS記憶體使用狀況

Junos OS檢視記憶體使用狀況可透過2個不同的指令,分別查詢Routing Enginesystem-wide memory

指令1
show chassis routing-engine
說明:
Display the status of the Routing Engine.


指令2
        show system memory
說明:
Display system-wide memory distribution and usage including the Junos OS kernel, software processes, and memory disks. Use the show system memory command for troubleshooting with Juniper Networks Customer Support.
參考來源:

差異:
Routing Engine狀態中的記憶體是用來儲存路由表等資訊,而system-wide memory則是整個Junos OS的記憶體使用情況。

關於Routing Engine細部說明可參閱原廠文件:
https://www.juniper.net/documentation/en_US/junos12.1/topics/concept/routing-engine-redundacny-overview.html

範例2
zongyan@Cloud-IPS-FW-2> show chassis routing-engine
Routing Engine status:
    Temperature                 48 degrees C / 118 degrees F
    Total memory              2048 MB Max   963 MB used ( 47 percent)
      Control plane memory    1088 MB Max   424 MB used ( 39 percent)
      Data plane memory        960 MB Max   547 MB used ( 57 percent)
    CPU utilization:
      User                       3 percent
      Background                 0 percent
      Kernel                    17 percent
      Interrupt                  0 percent
      Idle                      80 percent
    Model                          RE-SRX100H2
    Serial ID                      BZ3215AF1460
    Start time                     2015-11-19 07:22:48 GMT+8
    Uptime                         15 days, 1 minute, 28 seconds
    Last reboot reason             0x1:power cycle/failure
    Load averages:                 1 minute   5 minute  15 minute
                                       0.01       0.08       0.08

範例3
zongyan@Cloud-IPS-FW-2> show system memory
System memory usage distribution:
       Total memory: 2097152 Kbytes (100%)
    Reserved memory: 1044220 Kbytes ( 49%)
       Wired memory: 1048992 Kbytes ( 50%)
      Active memory:  179588 Kbytes (  8%)
    Inactive memory:  109156 Kbytes (  5%)
       Cache memory:  171240 Kbytes (  8%)
        Free memory:  510520 Kbytes ( 24%)
Memory disk resident memory:   29200 Kbytes
VM-Kbytes(  %  ) Resident(  %  ) Map-name
   625784(59.68)   119904(00.00) kernel
Pid     VM-Kbytes(  %  ) Resident(  %  ) Process-name
  26298      5776(01.10)     1300(00.00) /sbin/pmap
  26256    138628(26.44)     6544(00.00) mgd: (mgd) (zongyan)/dev/ttyp2
  26255     50204(02.39)    16848(00.00) -cli
  26251      9828(00.46)     3076(00.00) sshd: zongyan@ttyp2
  26214    138628(26.44)     6068(00.00) mgd: (mgd) (zongyan)/dev/ttyp1
  26213     50204(02.39)    16828(00.00) –cli

由範例2及範例3可看出 show chassis routing-engine 僅顯示routing-engine的狀態,而show system memory  更進一步的列出所有的程序佔用的記憶體大小。


  •  檢視底層記憶體使用狀況

要檢視底層系統的記憶體使用狀況除了透過show system memory 指令之外,還可以透過底層系統的記憶體使用狀況來做分析。

Junos OS的設備要進入底層FreeBSD2種方式:
1. 直接在op mode輸入指令:start shell
2. root權限登入JunosOS

查詢底層記憶體使用情況:
進入FreeBSD後,執行指令top後,系統會動態顯示目前設備的CPUMemory、各個程序的使用狀態。

範例4
root@Cloud-IPS-FW-2% top
last pid: 26383;  load averages:  0.47,  0.19,  0.15             up 15+01:38:37  16:58:48
72 processes:  3 running, 68 sleeping, 1 zombie
CPU states: 53.0% user,  0.0% nice,  9.4% system,  0.0% interrupt, 37.6% idle
Mem: 170M Active, 107M Inact, 1024M Wired, 167M Cache, 112M Buf, 504M Free
Swap:
  PID USERNAME  THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
 1571 root        5  76    0   996M 58840K select 0 424.7H 109.72% flowd_octeon_hm
 1522 root        1  76    0 12460K  5664K select 0  96:58  0.00% license-check
 1484 root        1  76    0 28080K 10352K select 0  61:48  0.00% mib2d
 1486 root        1  76    0 20304K  8688K select 0  54:50  0.00% l2ald
 1507 root        1  76    0 15972K  3624K select 0  38:39  0.00% shm-rtsdbd
 1518 root        1  76    0 17564K  8000K select 0  30:43  0.00% utmd
 1480 root        1  76    0 12652K  5064K select 0  28:58  0.00% alarmd
 1488 root        2  76    0 25508K  8972K select 0  24:41  0.00% pfed

由範例可知底層作業系統的記憶體使用狀況,從查詢到的資料顯示,總共2GB的記憶體只剩下504MB。這是因為FreeBSD會將記憶體變為Virtual MemoryVM)再進行使用,這樣的好處是能夠將空閒的記憶體當作系統快取增加系統效能。

查詢Virtual Memory使用狀況:
VM使用狀況可使用 vmstat 指令查詢。


範例5
root@Cloud-IPS-FW-2% vmstat
r b w   avm    fre       flt  re  pi  po   fr  sr   da0  pa0  in   sy   cs  us sy id
2 0 0  869564  690696    5   0   0   0   4   0   0   0   2442  1162 1173 52 7 41

avm 欄位代表的是使用中的VM大小,fre欄位則是未使用的VM大小。


  • 總結

Juniper官方KB已經說明Junos OS系統在開機時就會預先配置記憶體大小,將記憶體做有效的運用,若系統需要更多記憶體時,會再分配記憶體使用。

為了驗證Juniper官方KB說法,進而分析底層作業系統架構及記憶體使用狀況,由於FreeBSD系統的記憶體使用方式是將記憶體變為Virtual Memory再進行使用,以增進系統運作效能,若有其他的需求時FreeBSD會再調配記憶體大小。

從以上分析結果可知,將記憶體使用情況作為Junos OS負載評量指標並不妥當。