Files
gmetric-scripts/infiniband2ganglia
T
2026-11-02 17:55:03 -08:00

21 lines
1.4 KiB
Bash

#!/bin/bash
# Collect statistics on Infiniband networking
# Note the -r flag resets the counters, so this should be ~1 minute of data
if [[ ( -n "`which ibstat`" ) && ( -n "`ibstat`" ) ]]; then
# This node has Infiniband
ib_stats=`perfquery -rx`
if [ $? -eq 0 ]; then
ib_bytes_out=$(grep -Po '^PortXmitData:\.+\K\d+$' <<< "$ib_stats")
ib_bytes_in=$(grep -Po '^PortRcvData:\.+\K\d+$' <<< "$ib_stats")
ib_pkts_out=$(grep -Po '^PortXmitPkts:\.+\K\d+$' <<< "$ib_stats")
ib_pkts_in=$(grep -Po '^PortRcvPkts:\.+\K\d+$' <<< "$ib_stats")
# use counter * 4 / 60 because running once a minute, and perfquery returns 'octets divided by 4' for some reason
# we also use a float because gmetric only supports up to uint32, and IB can do more than 4GB/s = 16 Gbit
gmetric --name="ib_bytes_out" --title="InfiniBand Bytes Sent" --value="$(($ib_bytes_out * 4 / 60))" --units="bytes/sec" --type="float" --group="network" --conf=$conf
gmetric --name="ib_bytes_in" --title="InfiniBand Bytes Received" --value="$(($ib_bytes_in * 4 / 60))" --units="bytes/sec" --type="float" --group="network" --conf=$conf
gmetric --name="ib_pkts_out" --title="InfiniBand Packets Sent" --value="$(($ib_pkts_out / 60))" --units="packets/sec" --type="float" --group="network" --conf=$conf
gmetric --name="ib_pkts_in" --title="InfiniBand Packets Received" --value="$(($ib_pkts_out / 60))" --units="packets/sec" --type="float" --group="network" --conf=$conf
fi
fi