2
0
mirror of https://github.com/openvswitch/ovs synced 2025-09-05 00:35:33 +00:00

sflow: Export OVS datapath performance counters via sFlow.

The OVS cache hit/miss counters and memory/CPU usage statistics have been
identified as important metrics when managing large deployments. This patch
allows them to be pushed periodically as part of the sFlow feed,  and
represents a more efficient and scalable alternative to polling via
ovs-dpctl(1).

Signed-off-by: Neil McKee <neil.mckee@inmon.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Neil McKee
2014-12-16 14:42:05 -08:00
committed by Ben Pfaff
parent 849222ddd5
commit 3d2912f20e
4 changed files with 188 additions and 3 deletions

View File

@@ -652,6 +652,8 @@ static int computeCountersSampleSize(SFLReceiver *receiver, SFL_COUNTERS_SAMPLE_
case SFLCOUNTERS_LACP: elemSiz = SFL_CTR_LACP_XDR_SIZE; break;
case SFLCOUNTERS_OPENFLOWPORT: elemSiz = SFL_CTR_OPENFLOWPORT_XDR_SIZE; break;
case SFLCOUNTERS_PORTNAME: elemSiz = stringEncodingLength(&elem->counterBlock.portName.portName); break;
case SFLCOUNTERS_APP_RESOURCES: elemSiz = SFL_CTR_APP_RESOURCES_XDR_SIZE; break;
case SFLCOUNTERS_OVSDP: elemSiz = SFL_CTR_OVSDP_XDR_SIZE; break;
default:
sflError(receiver, "unexpected counters_tag");
return -1;
@@ -774,6 +776,24 @@ int sfl_receiver_writeCountersSample(SFLReceiver *receiver, SFL_COUNTERS_SAMPLE_
case SFLCOUNTERS_PORTNAME:
putString(receiver, &elem->counterBlock.portName.portName);
break;
case SFLCOUNTERS_APP_RESOURCES:
putNet32(receiver, elem->counterBlock.appResources.user_time);
putNet32(receiver, elem->counterBlock.appResources.system_time);
putNet64(receiver, elem->counterBlock.appResources.mem_used);
putNet64(receiver, elem->counterBlock.appResources.mem_max);
putNet32(receiver, elem->counterBlock.appResources.fd_open);
putNet32(receiver, elem->counterBlock.appResources.fd_max);
putNet32(receiver, elem->counterBlock.appResources.conn_open);
putNet32(receiver, elem->counterBlock.appResources.conn_max);
break;
case SFLCOUNTERS_OVSDP:
putNet32(receiver, elem->counterBlock.ovsdp.n_hit);
putNet32(receiver, elem->counterBlock.ovsdp.n_missed);
putNet32(receiver, elem->counterBlock.ovsdp.n_lost);
putNet32(receiver, elem->counterBlock.ovsdp.n_mask_hit);
putNet32(receiver, elem->counterBlock.ovsdp.n_flows);
putNet32(receiver, elem->counterBlock.ovsdp.n_masks);
break;
default:
sflError(receiver, "unexpected counters_tag");
return -1;