技術分享
HP IP CLIM問題處理技術分享
作者/黃俊源
前言由於TCP/IP處理網路傳輸,需要占用大量processor資源,為了減輕processor負荷,HP Integrity NonStop BladeSystem提供CIP子系統,提供TCP offload engine的機制,藉此減輕processor的loading。因此在CIP子系統的使用下,相關TCP/IP的控制及處理從原有processor下移至IP CLIM,因此針對後續的問題處理與分析,亦將需分成兩部分作分析處理。
IP CLIM packet tracing
CLIM trace主要分為兩段,一個是針對TCP/IP做trace,一個是針對NSK CIP子系統各元件做trace,下列將依序針對這兩部分做說明:
一、TCP/IP trace:透過啟動CLIM上面的tcpdump工具針對TCP/IP網路傳輸部分作trace,詳細說明如下:
1.啟動方式:
(1)於TACL底下透過CLIMCMD啟動tcpdump,執行範例如下:
CLIMCMD c1002581 tcpdump host 16.58.11.18 -i eth5 -w /home/trace –v –s 0
(2)透過ssh連上CLIM後,啟動tcpdump,執行範例如下:
ssh –S $zssp0 root@192.231.36.54
cd /home
tcpdump host 16.58.11.18 -i eth5 -w /home/trace -v
(3)tcpdump使用參數說明:
host:指定要記錄的source或是destination對應的IP。
- -i eth5:指定要記錄的interface,如果指定"-i any"表示針對所有的interface作記錄。
- -w /home/trace:指定trace檔案存放位置。
- -s 0:指定trace所記錄最大的packet size,如果設定為0,表示依據實際packet size做紀錄。
- -v:指定輸出詳細的資訊。
另外也可以指定
- src port n:設定只有透過此port作SENDS才作紀錄。
- dst port n:設定只有透過此port作RECVD 才作紀錄。 (也可如同時作設定,如 "src port n and dst port n")。
- tcp port n:設定記錄所有資料使用到對應的port部分。
2.執行範例:
(1)查看特定介面上的網路問題
climcmd clim_name tcpdump -i eth4 -w /home/debuginfo/trace4 -v
(2)查看routing問題,針對每個interface作tcpdump
climcmd clim_name tcpdump -i eth1 -w /home/debuginfo/trace1 -v climcmd clim_name tcpdump -i eth2 -w /home/debuginfo/trace2 -v climcmd clim_name tcpdump -i eth3 -w /home/debuginfo/trace3 -v climcmd clim_name tcpdump -i eth4 -w /home/debuginfo/trace4 –v
(3)查看應用系統針對遠端某個主機IP的行為
climcmd clim_name tcpdump host 10.1.1.10 -i any -w /home/debuginfo/traceall –v
(4)如果user data有被截斷,可以設定使用較大的buffer
climcmd clim_name tcpdump -i eth4 -w /home/debuginfo/trace4 –v –s 65535
3.停止tcpdump方式:原則上上述指令執行時會導致terminal等候tcpdump執行完畢,故可break連線,透過climcmd查看,之後可以透過kill ”pid”方式停止。
climcmd clim_name ps或是
climcmd clim_name ps|grep tcpdump
4.檔案下載方式:
(1)clsftp clim_name
(2)sftp –S $ssh_process –h root@clim_ip_address
(3)sftp相關指令說明
- lcd:切換local path
- cd:切換clim上的path
- binary:設定binary方式傳送
- get:download檔案
- put:upload檔案
- rm:刪除檔案
- help:操作指令說明
5.其他:
當診斷NonStop server與CLIM之間的問題,如果要對應end-user data level,可以在PROVIDER trace中找到對應,在ptrace設定HEX ON並且選擇CIPLIB_TRC_DATA_IN以便過濾保留incoming frames,選擇CIPLIB_TRC_DATA_OUT以便過濾保留outgoing frames。
二、NSK CIP子系統各元件做trace:
1.CLIM:紀錄特定CPU針對指定的CLIM所作的CIP Library動作,每個CLIM在一個CPU上不能啟動超過一個的trace。
執行範例:
TRACE CLIM $ZZCIP.N100252,TO $DATA2.CLIM.CLIMC0,CPU 0,RECSIZE 4050,SELECT ALL
TRACE CLIM $ZZCIP.N100252,TO $DATA2.CLIM.CLIMC1,CPU 1,RECSIZE 4050,SELECT ALL
TRACE CLIM $ZZCIP.N100252,TO $DATA2.CLIM.CLIMC2,CPU 2,RECSIZE 4050,SELECT ALL
TRACE CLIM $ZZCIP.N100252,TO $DATA2.CLIM.CLIMC3,CPU 3,RECSIZE 4050,SELECT ALL
2.MON:紀錄monitor動作,包含CIPMON events、CIPMON internal messages、CIPMON internal memory resource mgmt、CIPMON messages、CIPMON internal queue operations、CIPSREQ operations、CIPMON state machines operations、CIPMON timer activities等。
執行範例:
TRACE MON $ZZCIP.ZCM00,TO $DATA2.CLIM.MON0,RECSIZE 4050,SELECT ALL
TRACE MON $ZZCIP.ZCM01,TO $DATA2.CLIM.MON0,RECSIZE 4050,SELECT ALL
TRACE MON $ZZCIP.ZCM02,TO $DATA2.CLIM.MON0,RECSIZE 4050,SELECT ALL
TRACE MON $ZZCIP.ZCM03,TO $DATA2.CLIM.MON0,RECSIZE 4050,SELECT ALL
3.PROVIDER:紀錄特定CPU針對指定的PROVIDER所作的CIP Library動作,包含Provider events、Provider input requests、Provider output requests、Provider logic events、Provider incoming data以及Provider outgoing data。
執行範例:
TRACE PROVIDER $ZZCIP.ZTC02,TO $DATA2.CLIM.PROV0,CPU 0,RECSIZE 4050,SELECT ALL
TRACE PROVIDER $ZZCIP.ZTC02,TO $DATA2.CLIM.PROV1,CPU 1,RECSIZE 4050,SELECT ALL
TRACE PROVIDER $ZZCIP.ZTC02,TO $DATA2.CLIM.PROV2,CPU 2,RECSIZE 4050,SELECT ALL
TRACE PROVIDER $ZZCIP.ZTC02,TO $DATA2.CLIM.PROV3,CPU 3,RECSIZE 4050,SELECT ALL
4.process:針對CIPSAM或是CIPMAN trace動作;包含management動作、QIO memory、SPI requests、CLIM hardware access、CONFIG等。
執行範例:
TRACE PROCESS $ZZCIP,RECSIZE 2048,TO $DATA2.CLIM.CIP,SELECT ALL
TRACE PROCESS $ZTC02,RECSIZE 4050,TO $DATA2.CLIM.PROC,SELECT ALL
IP CLIM trouble shooting
除了packet tracing以外,針對IP CLIM仍有多項統計數據提供問題判斷及分析,這裡一樣依照NSK上所提供之統計數據及CLIM上所提供之數據做說明。
一、NSK主機上所提供之統計值:
1.STATS CLIM:主要提供NonStop主機與CLIM之間CLIM software通訊狀況,至於如果需要取得TCP/IP protocol需透過CLIMCMD netstat查看。分為三個部分,陸續為CLIMMON、CLIMAGT、CIPSSRVx。說明如下:
(1)CLIMMON:主要啟動及監看CLIM上其他CIP子系統元件。詳細各統計欄位說明如下。
- Event Log Entries:顯示因為CLIMMON所產生的syslog entry次數。
- Restart:CLIMMON重新啟動CLIMAGT以及CIPSSRVx的次數。如果有任一個有顯示錯誤狀況,就會重新啟動。
- CLIMAGR Failures:顯示CLIMAGT發生錯誤的次數。
- CIPSSRV0 Failures:顯示CIPSSRV process發生錯誤的次數。
(2)CLIMAGT:主要統計從NonStop主機所產生的management request。
- Event Log Entries:因為CLIMAGT所產生的syslog entry次數。
- Buffer denials:顯示NonStop主機在與CLIM溝通時,無法取得buffer的次數,當有碰到此問題時通常表示memory overflow。
- IT-API errors:透過low-level ServerNet communication handler所碰到的error次數。
- Last IT-API error code:顯示上次碰到IT-API error時所記錄的status code。
- Linux errors:CLIM端的CIP所回應的error次數。
- Last Linux errno:顯示上次碰到的CLIM software error所記錄的errno值。
- Current bfr bytes in use:顯示目前用於與NonStop主機溝通時所使用的memory大小,單位為bytes。
- High bfr bytes in use:顯示曾經最大用於與NonStop主機溝通時所使用的memory大小,單位為bytes。
- Total msgs sent:顯示目前有多少訊息傳送給NonStop CPU。
- Total msgs received:顯示最高有多少訊息傳送給NonStop CPU。
- Current connected Cpus:顯示目前有多少CPU連上此CLIM。
- High connected Cpus:顯示最高有多少CPU連上此CLIM。
- Queued Commands:顯示有多少筆SCF指令被候置上在等候處理。
- Failed Commands:顯示多少筆SCF指令無法完成。
(3)CIPSSRV0:CIPSSRV process主要用於紀錄處理application socket request的統計。
- Event Log Entries因為CIPSSRV所產生的syslog entry次數。
- Buffer denials:顯示NonStop主機在與CLIM溝通時,無法取得buffer的次數,當有碰到此問題時通常表示memory overflow。
- IT-API errors:透過low-level ServerNet communication handler所碰到的error次數。
- Last IT-API error code:顯示上次碰到IT-API error時所記錄的status code。
- Linux errors:CLIM端的CIP所回應的error次數
- Last Linux errno:顯示上次碰到的CLIM software error所記錄的errno值。
- Current bfr bytes in use:顯示目前用於與NonStop主機溝通時所使用的memory大小,單位為bytes。
- High bfr bytes in use:顯示曾經最大用於與NonStop主機溝通時所使用的memory大小,單位為bytes。
- Total msgs sent:顯示目前有多少訊息傳送給NonStop CPU。
- Total msgs received:顯示最高有多少訊息傳送給NonStop CPU。
- Total bytes sent:送給所有NonStop CPU的 data bytes。
- Total bytes received:從所有NonStop CPU所接收的data bytes。
- Current connected Cpus:顯示目前有多少CPU連上此CLIM。
- High connected Cpus:顯示最高有多少CPU連上此CLIM。
- Deferred Sends:顯示有碰過多少次send request無法立即執行。
- Failed Commands:顯示多少次socket request無法完成。
- Current TCP Listen Sockets:顯示目前有多少TCP被開啟等候新的連線。
- High TCP Listen Sockets:顯示最高同時間有多少個TCP被開啟等候新的連線。
- Current UDP Sockets:顯示目前開啟多少個UDP socket。
- High UDP Sockets:顯示最多開啟多少個UDP socket。
- Current TCP Connections:顯示目前TCP連線數。
- High TCP Connections:顯示最高TCP連線數。
2. STATS MON:主要顯示CIPMON的統計資訊。
(1)SOCKET:
- Total Recv Socket Reqs:所有CLIM所接收的socket request。
- Total Recv Errors:所有接收的socket request並且回應error的次數。
- Total Send Socket Reqs:透過所有CLIM傳送的socket request次數。
- Total Send Errors:所有傳送的socket request碰到error的次數。
- Data Bytes Sent:傳送給CLIM所有的data bytes總數。
- Data Bytes Received:從CLIM接收的所有data bytes總數。
- Total Connections Out:透過CLIM要求要做連線的次數。
- Total Connections In:從CLIM接收到要連線的次數。
- Current TCP Listen Sockets:目前已經open socket等候接收connection request的listen socket數量。
- High TCP Listen Sockets:最高曾經open socket等候接收connection request的listen socket數量。
- Current UDP Sockets:目前已經open socket等候接收UDP的listen socket數量。
- High UDP Sockets:最高曾經open socket等候接收UDP的listen socket數量。
- Current TCP Connections:目前TCP建立連線數。
- High TCP Connections:最高TCP曾經建立連線數。
(2)SOCKET SEND SIZE HISTOGRAM:顯示透過所有CLIM傳送request的長度統計。
- Size x-xxx:表示send bytes長度落在x至xxx bytes的次數。
- Size 32769 and larger:表示send bytes長度大於32769 bytes。
(3)MON STATS
- Total Messages Sent:顯示傳送至CLIM的message次數。
- Total Messages Received:顯示從CLIM接收的message次數。
- Current Connected CLIMs:顯示目前有連上多少台CLIM數量。
- High Connected CLIMs顯示最高連上多少台CLIM數量。
- Total Rejected Connections:顯示多少次企圖連上CLIM可是被拒絕。
- Deferred Sends:顯示多少次send request無法立即執行。
3.LISTOPENS PROVIDER $ZZCIP.ZTC02,D
(1)Opener:顯示哪個process來open這個socket,如果沒有process name,則僅顯示node name。
(2)Ppid:顯示primary process的PID。
(3)Bpid:顯示backup process的PID。如果沒有backup process將顯示0,0。
(4)Plfn:顯示primray process針對這個socket的file number。
(5)Blfn:顯示backup process針對這個socket的file number。
(6)Proto:顯示socket所使用的協定。
(7)State:目前socket狀態。
(8)SendQ:表示socket在send queue裡面擺放的資料有多少個bytes。
(9)RecvQ:表示socket在receive queue裡面擺放的資料有多少個bytes。
(10)Provider:表示ap使用哪個provider來open這個socket。
(11)CLIM:表示哪個CLIM使用這個socket。(*mult*)
(12)CLIM-FD:表示在這CLIM上socket所對應的CLIM software file descriptor。
(13)Lport:socket所使用的local port number。
(14)Laddr:socket所使用的local address。
(15)FPort:socket所使用的remote port number。
(16)Faddr:socket所對應的remote IP address。
二、CLIM上所提供之統計值:
CLIM上所記錄的統計值,主要可透過netstat指令做查詢,這裡主要列出netstat –a以及netstat –s。
1.netstat -a(如同以往SCF;STATUS PROCESS $ZTC0)可察看個別socket session狀態:
(1)Active Internet connections各欄位說明:
- Proto:socket使用協定。
- Recv-Q:socket目前receive的queue值,單位為bytes,表示user program尚未取走的資料。
- Send-Q:socket目前send的queue值,單位為bytes,表示user program要送出的資料可是remote host尚未作acknowledged。
- Local Address:本地的address。
- Foreign Address:遠端的address。
- State:socket目前狀態。可能有下列狀態:
- ESTABLISHED:socket連線已經建立。
- SYN-SENT:socket試圖建立連線,送出SYN封包。
- SYN-RECV:socket connection初始狀態,接收到SYN封包。
- FIN-WAIT1:socket正在做close動作,正處於4 way的第一階段shuting down動作。
- FIN-WAIT2:socket正在做close動作,正處於4 way的第二階段等候遠端執行shuting down動作。
- TIME-WAIT:socket正等候作close,等候遠端shutdown retransmission。
- CLOSED:socket已經close。
- CLOSE_WAIT:遠端已經shut down,等候socket去close。
- LAST_ACK:遠端已經完成shut down,而且socket已經close,等候acknowledgement。
- LISTEN:socket等候接收connect request。
- CLOSING:兩端的socket都已經執行shut down,可是仍有資料尚未送出。
- UNKNOW:socket狀態處於未知情況。
- ‧DGRAM(SOCK_DGRAM):socket用於datagram (connectionless) mode。UDP模式。
‧STREAM(SOCK_STREAM):socket用於stream (connection) mode。TCP模式。
‧RAW(SOCK_RAW):socket用於raw socket。
‧RDM(SOCK_RDM):socket用於data link層,不保證packet順序,this one serves reliably-delivered message。
‧SEQPACKET(SOCK_SEQPACKET):屬於sequential packet socket。
‧PACKET(SOCK_PACKET):RAW interface access socket。
‧UNKNOW:未知。
- State:主要有幾種狀態,詳如下說明。
- ‧STENING:socket 處於等候接聽連線需求狀態。
‧UNCONNECTED:socket尚未與另外一端連線。
‧CONNECTING:socket正在建立連線。
‧CONNECTED:socket已經建立連線。
‧DISCONNECTING:socket正在作斷線處理。
‧UNKNOWN:未知狀態,正常此狀態不會發生。
- I-NODE:pathname所對應的inode(檔案對應的inode指標,以便指示存放實體位置)。
- Path:使用此socket對應的process的pathname。
2.netstat –s(如同以往SCF;STATS PROCESS $ZTC0)查看整體網路統計數據。
其中有socket buffer overflow或是RcvbufErrors等統計數據,可藉此判斷是否buffer太小不足以應付瞬間的傳送流量,或是傳送速度遠超過接收速度,導致即使放大buffer size仍不足以應付接收的流量。而導致packet data loss的問題。
三、範例推演:
當透過Informatica所提供測試multicast網路狀況之工具(mtools中的msend發送與mdump接收)測試AIX與NSK(透過IP CLIM)之間的multicast傳輸流量。其中當持續傳送40MB的資料情況下,即可發現CLIM上的UDP RcvbufErrors持續增加,造成接收端的data loss。
結論
為了減少主機系統上使用之資源,HP NonStop提供IP CLIM之架構,不過由於TCP/IP處理等控制下移至IP CLIM,因此針對網路傳輸上的問題追蹤及分析,將較為繁複。
延續以往針對TCP/IP處理,仍可先從NonStop系統面,檢查系統資源使用狀況,從各系統資源檢查工具可以得知,目前系統CPU使用狀況,以研判系統處理部分是否有所延遲。之後可檢查網路傳輸統計值,從網路傳輸統計值可以得知,傳輸時,是否於Send與Recv Queue有所累加,如果持續累加,需考慮AP處理行為是否有所block,或是運作上有所delay;傳輸時,相關統計值是否有socket buffer overflow或是RcvbufErrors等統計數據持續累加,如果持續累加,需注意是否buffer太小不足以應付瞬間的傳送流量,或是傳送速度遠超過接收速度,導致即使放大buffer size仍不足以應付接收的流量。如有需要亦可啟動NonStop與CLIM上的packet tracing以做細部分析。
參考資料
HP NonStop Cluster I/O Protocols (CIP) Configuration and Management Manual