略過巡覽連結首頁 > 產品與服務 > 技術分享

技術分享

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

 

回上一頁