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