Skip to main content

Displaying Virtual FC Adapter Stats

Rob McNelly shares a script that can make life easier when working with multiple VIO servers.

I’ve posted a few Dean Rowswell scripts over the years, but it’s been awhile. He emailed me recently though, so I’m sharing the following with his permission:
 
There is a really nice -client flag on the VIOS padmin fcstat command that displays virtual FC adapter stats and I wanted to improve on the output and to work with multiple VIO servers so I made a script.
Here is the usage of it:

USAGE: get_vio_fcstat [ -v, -V, -h, -u, -l, -n ]

  -v or -V will print out the version and exit
 -h VIOS hostname(s) or IP address(es) COMMA SEPARATED to use
 -u VIOS userid to use (only required if padmin not used)
 -l will sort the report by LPAR/HOST name
 -n only include specific HOSTS or VIOS

EXAMPLE: get_vio_fcstat -h vios1,vios2

 get_vio_fcstat -n lpar

 get_vio_fcstat -h vios1,vios2 -n “lpar|vio” -l

You will need to change the VIOS_LIST variable at the top of the script and then have password-less ssh setup from the server running it on to the target VIO(S).

I usually run this script from a NIM server for this purpose.

The Script

#!/bin/ksh
# Created by Dean Rowswell, July 27, 2020
# Modified by Dean Rowswell, July 28, 2020
#  V1.1 – change report column order + add flag to display the report sorted by LPAR/HOST name
# Modified by Dean Rowswell, July 30, 2020
#  V1.2 – calculate the total physical and virtual statistics + add flag to only include specific LPAR/HOST names in the report
#
# This script runs the command fcstat -client on Virtual I/O Servers to display the physical and virtual Fibre Channel statistics
# The FC read and FC write statistics are totaled and the default report is sorted from the highest to the lowest
# The VIOS physical adapters are labeled “PHYS”

VIOS_LIST=”vios1 vios2″
VIOS_USER=”padmin”
VER=”1.2″

# Parameter checks
if [ ${#*} -ne 0 ]
then
  while getopts :vVh:u:ln: PARMS
  do
    case $PARMS in
      v|V) echo “This is $0 version: $VER” ; exit ;;
      h)   VIOS_LIST=`echo ${OPTARG} | tr ‘,’ ‘ ‘` ;;
      u)   VIOS_USER=${OPTARG} ;;
      n)   LPAR_NAME=${OPTARG} ;;
      l)    LPAR_SORT=1 ;;
      ?)   echo “nUSAGE:t$0 [ -v, -V, -h, -u, -l, -n ]” ; echo “t-v or -V will print out the version and exit” ; echo “t-h VIOS hostname(s) or IP address(es) COMMA SEPARATED to use”
           echo “t-u VIOS userid to use (only required if padmin not used)” ; echo “t-l will sort the report by LPAR/HOST name”
          echo “t-n only include specific HOSTS or VIOSn” ; echo “EXAMPLE: $0 -h vios1,vios2nt $0 -n lparnt $0 -h vios1,vios2 -n “lpar|vio” -ln” ; exit ;;
    esac
  done
fi

printf “n%-24s %-12s %-17s %-24s %-6s %14s %11s %12s %12s %11s %12sn” HOSTNAME DEVICE WWPN VIOS PHYS TOTAL_R+W_GiB “(    TiB   ) =” READS_GiB “(    TiB   )  +” WRITES_GiB “(    TiB   )”
echo “———————— ———— —————– ———————— ——  ————- ————    ———– ————    ———– ————“
VIOS=””

GET_VIO_FCSTAT () {
for VIO in ${VIOS_LIST}
do
  ssh -q ${VIOS_USER}@${VIO} ioscli ioslevel >/dev/null 2>/dev/null
  if [ $? -ne 0 ]
  then
    echo “Password-less SSH access to VIOS ${VIO} with user ${VIOS_USER} is not setupn”
    continue
  fi
  ssh -q ${VIOS_USER}@${VIO} “ioscli fcstat -client” 2>/dev/null | awk -v VIOS=”$VIOS” -v NAME=”$LPAR_NAME” ‘{
  if (NF == 11 && $1 != “hostname”) {
    if (VIOS == “”) { VIOS=$1; PHYS=$2 } ; HOST=$1 ; DEV=$2 ; WWPN=$3 ; READ=$7 ; WRITE=$8 ; TOTAL=$7+$8
    if (HOST == VIOS) { DEV=DEV”[PHYS]” }
    if ($1 ~ NAME) { printf “%-24s %-12s %-17s %-24s %-6s %14.3f   %8.3f   %14.3f   %8.3f   %14.3f   %8.3fn”, HOST, DEV, substr(WWPN,3,16), VIOS, PHYS, TOTAL/1073741824, TOTAL/1099511627776, READ/1073741824, READ/1099511627776, WRITE/1073741824, WRITE/1099511627776}}
  if (NF == 0) { VIOS = “” }
  }’
done
}

CALC_TOTALS () {
awk ‘$2 ~ /[PHYS]/ { P_RW_GB += $6 ; P_RW_TB += $7 ; P_R_GB +=$8 ; P_R_TB += $9 ; P_W_GB += $10 ; P_W_TB += $11 ; print $0 ; next }  { V_RW_GB += $6 ; V_RW_TB += $7 ; V_R_GB +=$8 ; V_R_TB += $9 ; V_W_GB += $10 ; V_W_TB += $11 ; print $0 } END { print ”                                                                                —————  ————- ————    ———– ————    ———– ————” ;printf “%87s %14.3f ( %8.3f ) %14.3f ( %8.3f ) %14.3f ( %8.3f )n”, “PHYSICAL total:”, P_RW_GB, P_RW_TB, P_R_GB, P_R_TB, P_W_GB, P_W_TB ; printf “%87s %14.3f ( %8.3f ) %14.3f ( %8.3f ) %14.3f ( %8.3f )n”, “VIRTUAL total:”, V_RW_GB, V_RW_TB, V_R_GB, V_R_TB, V_W_GB, V_W_TB }’
}

if [ ${LPAR_SORT:=0} -eq 1 ]
then
  GET_VIO_FCSTAT | sort | CALC_TOTALS
else
  GET_VIO_FCSTAT | sort -nrk6 | CALC_TOTALS
fi


Key Enterprises LLC is committed to ensuring digital accessibility for techchannel.com for people with disabilities. We are continually improving the user experience for everyone, and applying the relevant accessibility standards.