Understanding Standard Metadata, Counters, and Meters in P4 Programmable Data Planes

 
1
Standard Metadata, Counters, and Meters
 
Jorge Crichigno
 
College of Engineering and Computing, University of South Carolina
 
A Hands-on Tutorial on P4 Programmable Data Planes
 
Wednesday March 8, 2023
 
2
Standard Metadata
 
Standard Metadata
 
3
 
Metadata is state associated with each packet
It can be treated like a set of variables associated with each packet, read and written
by actions executed by tables
Some metadata has special significance to the operation of the switch
This metadata is called Intrinsic Metadata, because it has intrinsic semantics to the operation of
the machine
1
 
1. The P4 Language Specification. Online: 
https://tinyurl.com/4zkwjp4b
 
V1 Model Standard Metadata
 
4
 
Metadata V1 model
 
1. The P4 Language Specification. Online: 
https://tinyurl.com/4zkwjp4b
 
ingress_port
port on which the packet arrived
egress_spec
egress intended port set during the ingress pipeline
ingress_global_timestamp
a timestamp, in microseconds, set when the packet shows up on ingress
egress_global_timestamp
a timestamp, in microseconds, set when the packet starts egress processing
enq_qdepth
depth of queue when the packet was first enqueued, in number of packets
 
 
V1 Model Standard Metadata
 
5
 
Metadata V1 model
 
Application: compute the time the packet is waiting in the
queue (Traffic Manager)
 
V1 Model Standard Metadata
 
6
 
Metadata V1 model
 
Application: compute the time the packet is waiting in the
queue (Traffic Manager)
 
TM: Traffic Manager
ingress_global_timestamp
egress_global_timestamp
 
Lab 5 Topology and Objectives
 
7
 
The topology consists of four hosts: h1, h2, h3, and h4; one P4 switch: s1; and one
legacy switch: s2
The objectives are
Understanding the V1Model standard metadata
Defining custom headers
Using custom headers to monitor the switch’s queue
 
8
Counters
 
Stateless and Stateful Objects
 
9
 
Stateless objects (transient) do not preserve the state between packets
Metadata (variables)
Packet headers
Stateful objects (persistent) preserve state between packets
Tables
Counters
Meters
Registers
Stateful memories require resources on the target and hence are managed by the
compiler
 
 
R
e
f
e
r
r
e
d
 
t
o
 
a
s
 
s
t
a
t
e
f
u
l
 
m
e
m
o
r
i
e
s
 
i
n
 
t
h
e
 
P
4
 
L
a
n
g
u
a
g
e
 
S
p
e
c
i
f
i
c
a
t
i
o
n
1
 
1. P4 Language Specification, Online: 
https://tinyurl.com/4zkwjp4b
.
 
P4 Counters
 
10
 
Counters are a mechanism for keeping statistics
A P4 program (data plane) can update counter values but cannot read them
The control plane can read counter values and use them for other control applications
Counters only support packet counters, byte counters, or a combination of both
There are two types of counters: direct and indirect
 
P4 Direct Counters
 
11
 
Direct counters are associated to a match-action table –effectively extend the table
 
P4 Direct Counters
 
12
 
Direct counters are associated to a match-action table –effectively extend the table
Example:
instantiate a counter as a counter of packets and bytes
 
P4 Direct Counters
 
13
 
Direct counters are associated to a match-action table –effectively extend the table
Example:
instantiate a counter as a counter of packets and bytes
specify the counter as a property of the table of interest
 
P4 Direct Counters
 
14
 
A single instantiation of a direct counter always contains as many independent
counter values as the number of entries in the associated table
 
P4 Direct Counters
 
15
 
The control plane can read the counters
E.g., the following command for 
MyIngress.my_direct_counter
 indicates that
the counter associated with entry 1 counted 4,921,063 bytes and 72,880 packets
 
P4 Indirect Counters
 
16
 
Indirect counters are independent counters that can be referred to specific entries or
group of entries in a match-action table
E.g., there is a big table, but only a few counters are needed (few entries)
The code must specify the number of independent counters (array size)
 
P4 Indirect Counters
 
17
 
Example: instantiate a counter as an array of 3 elements, to count packets and bytes
 
P4 Indirect Counters
 
18
 
Example: instantiate a counter as an array of 3 elements, to count packets and bytes
The 
count
 method is used to increment the value
 
 
P4 Indirect Counters
 
19
 
Example: count packets/bytes routed by routes 1-3; routes 4, 5, 7; and routes 6, 8, 32
 
P4 Indirect Counters
 
20
 
Example: count packets/bytes routed by routes 1-3; routes 4, 5, 7; and routes 6, 8, 32
Note that the index used to increment the counter is retrieved from the action data
The index can also be computed, as needed by the programmer
 
P4 Indirect Counters
 
21
 
The control plane can read the counters
E.g., the following command for 
MyIngress.my_indirect_counter
 indicates that
the counter associated with entry 1 counted 172,983,947bytes and 114,276 packets
Slide Note
Embed
Share

Learn about the role of metadata in packet processing, the significance of intrinsic metadata, and how to utilize custom headers for monitoring switch queues in P4 programmable data planes. This tutorial explores the V1 Model standard metadata and provides hands-on experience in defining and using custom headers.


Uploaded on Sep 09, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Standard Metadata, Counters, and Meters Jorge Crichigno College of Engineering and Computing, University of South Carolina A Hands-on Tutorial on P4 Programmable Data Planes Wednesday March 8, 2023 1

  2. Standard Metadata 2

  3. Standard Metadata Metadata is state associated with each packet It can be treated like a set of variables associated with each packet, read and written by actions executed by tables Some metadata has special significance to the operation of the switch This metadata is called Intrinsic Metadata, because it has intrinsic semantics to the operation of the machine1 1. The P4 Language Specification. Online: https://tinyurl.com/4zkwjp4b 3

  4. V1 Model Standard Metadata Metadata V1 model ingress_port port on which the packet arrived egress_spec egress intended port set during the ingress pipeline ingress_global_timestamp a timestamp, in microseconds, set when the packet shows up on ingress egress_global_timestamp a timestamp, in microseconds, set when the packet starts egress processing enq_qdepth depth of queue when the packet was first enqueued, in number of packets 1. The P4 Language Specification. Online: https://tinyurl.com/4zkwjp4b 4

  5. V1 Model Standard Metadata Metadata V1 model Application: compute the time the packet is waiting in the queue (Traffic Manager) 5

  6. V1 Model Standard Metadata Metadata V1 model Application: compute the time the packet is waiting in the queue (Traffic Manager) ingress_global_timestamp egress_global_timestamp TM: Traffic Manager 6

  7. Lab 5 Topology and Objectives The topology consists of four hosts: h1, h2, h3, and h4; one P4 switch: s1; and one legacy switch: s2 The objectives are Understanding the V1Model standard metadata Defining custom headers Using custom headers to monitor the switch s queue h2 h1 10.0.0.1 10.0.0.2 s2 s1 s1-eth0 s2-eth1 h3 h4 10.0.0.3 10.0.0.4 7

  8. Counters 8

  9. Stateless and Stateful Objects Stateless objects (transient) do not preserve the state between packets Metadata (variables) Packet headers Stateful objects (persistent) preserve state between packets Tables Counters Meters Registers Stateful memories require resources on the target and hence are managed by the compiler Referred to as stateful memories in the P4 Language Specification1 1. P4 Language Specification, Online: https://tinyurl.com/4zkwjp4b. 9

  10. P4 Counters Counters are a mechanism for keeping statistics A P4 program (data plane) can update counter values but cannot read them The control plane can read counter values and use them for other control applications Counters only support packet counters, byte counters, or a combination of both There are two types of counters: direct and indirect 10

  11. P4 Direct Counters Direct counters are associated to a match-action table effectively extend the table 11

  12. P4 Direct Counters Direct counters are associated to a match-action table effectively extend the table Example: instantiate a counter as a counter of packets and bytes 1: control MyIngress(inout header hdr, 2: inout metadata meta, 3: inout standard_metadata_t standard_metadata){ 3: 4: direct_counter(counterType.packets_and_bytes) my_direct_counter; 5: 6: action forward(egressSpect_t port){ 7: standard_meadata.egress_spec = port; 8: } 9: 10: action drop(){ 11: mark_to_drop(standard_metadata); 12: } 13: 14: table forwarding { 15: key = { 16: hdr.ipv4.dstAddr : exact; 17: } 18: actions = { 19: forward; 20: drop; 21: NoAction; 22: } 23: size = 32; 24: default_action = drop(); 25: counters = my_direct_counter; 26: } 27: apply { 28: if(hdr.ipv4.isValid()){ 29: forwarding.apply(); 30: } 31: } 12

  13. P4 Direct Counters Direct counters are associated to a match-action table effectively extend the table Example: instantiate a counter as a counter of packets and bytes specify the counter as a property of the table of interest 1: control MyIngress(inout header hdr, 2: inout metadata meta, 3: inout standard_metadata_t standard_metadata){ 3: 4: direct_counter(counterType.packets_and_bytes) my_direct_counter; 5: 6: action forward(egressSpect_t port){ 7: standard_meadata.egress_spec = port; 8: } 9: 10: action drop(){ 11: mark_to_drop(standard_metadata); 12: } 13: 14: table forwarding { 15: key = { 16: hdr.ipv4.dstAddr : exact; 17: } 18: actions = { 19: forward; 20: drop; 21: NoAction; 22: } 23: size = 32; 24: default_action = drop(); 25: counters = my_direct_counter; 26: } 27: apply { 28: if(hdr.ipv4.isValid()){ 29: forwarding.apply(); 30: } 31: } 13

  14. P4 Direct Counters A single instantiation of a direct counter always contains as many independent counter values as the number of entries in the associated table forwarding my_direct_counter 1: control MyIngress(inout header hdr, 2: inout metadata meta, 3: inout standard_metadata_t standard_metadata){ 3: 4: direct_counter(counterType.packets_and_bytes) my_direct_counter; 5: 6: action forward(egressSpect_t port){ 7: standard_meadata.egress_spec = port; 8: } 9: 10: action drop(){ 11: mark_to_drop(standard_metadata); 12: } 13: 14: table forwarding { 15: key = { 16: hdr.ipv4.dstAddr : exact; 17: } 18: actions = { 19: forward; 20: drop; 21: NoAction; 22: } 23: size = 32; 24: default_action = drop(); 25: counters = my_direct_counter; 26: } 27: apply { 28: if(hdr.ipv4.isValid()){ 29: forwarding.apply(); 30: } 31: } Count Idx. Key Action Action Data Bytes Packets forward forward forward forward forward forward forward forward 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4 10.0.0.5 10.0.0.6 egress port = 1 egress port = 2 egress port = 3 egress port = 4 egress port = 0 egress port = 0 egress port = 0 egress port = 0 0 1 2 3 4 5 6 7 0 71 23 52 84 11 0 37 0 106,500 34,500 78,000 126,000 16,500 0 55,500 10.0.0.7 10.0.0.8 ... ... ... ... ... ... 31 49 10.0.0.32 drop egress port = 0 73,500 14

  15. P4 Direct Counters The control plane can read the counters E.g., the following command for MyIngress.my_direct_counter indicates that the counter associated with entry 1 counted 4,921,063 bytes and 72,880 packets 15

  16. P4 Indirect Counters Indirect counters are independent counters that can be referred to specific entries or group of entries in a match-action table E.g., there is a big table, but only a few counters are needed (few entries) The code must specify the number of independent counters (array size) 16

  17. P4 Indirect Counters Example: instantiate a counter as an array of 3 elements, to count packets and bytes 1: control MyIngress(inout header hdr, 2: inout metadata meta, 3: inout standard_metadata_t standard_metadata){ 3: 4: counter(3,counterType.packets_and_bytes) my_indirect_counter; 5: 6: action forward(egressSpect_t port, bit<32> index){ 7: standard_meadata.egress_spec = port; 8: my_indirect_counter.count(index); 9: } 10: action drop(){ 11: mark_to_drop(standard_metadata); 12: } 13: 14: table forwarding { 15: key = { 16: hdr.ipv4.dstAddr : exact; 17: } 18: actions = { 19: forward; 20: drop; 21: NoAction; 22: } 23: size = 32; 24: default_action = drop(); 25: } 26: 27: apply { 28: if(hdr.ipv4.isValid()){ 29: forwarding.apply(); 30: } 31: } 17

  18. P4 Indirect Counters Example: instantiate a counter as an array of 3 elements, to count packets and bytes The count method is used to increment the value 1: control MyIngress(inout header hdr, 2: inout metadata meta, 3: inout standard_metadata_t standard_metadata){ 3: 4: counter(3,counterType.packets_and_bytes) my_indirect_counter; 5: 6: action forward(egressSpect_t port, bit<32> index){ 7: standard_meadata.egress_spec = port; 8: my_indirect_counter.count(index); 9: } 10: action drop(){ 11: mark_to_drop(standard_metadata); 12: } 13: 14: table forwarding { 15: key = { 16: hdr.ipv4.dstAddr : exact; 17: } 18: actions = { 19: forward; 20: drop; 21: NoAction; 22: } 23: size = 32; 24: default_action = drop(); 25: } 26: 27: apply { 28: if(hdr.ipv4.isValid()){ 29: forwarding.apply(); 30: } 31: } 18

  19. P4 Indirect Counters Example: count packets/bytes routed by routes 1-3; routes 4, 5, 7; and routes 6, 8, 32 1: control MyIngress(inout header hdr, 2: inout metadata meta, 3: inout standard_metadata_t standard_metadata){ 3: 4: counter(3,counterType.packets_and_bytes) my_indirect_counter; 5: 6: action forward(egressSpect_t port, bit<32> index){ 7: standard_meadata.egress_spec = port; 8: my_indirect_counter.count(index); 9: } 10: action drop(){ 11: mark_to_drop(standard_metadata); 12: } 13: 14: table forwarding { 15: key = { 16: hdr.ipv4.dstAddr : exact; 17: } 18: actions = { 19: forward; 20: drop; 21: NoAction; 22: } 23: size = 32; 24: default_action = drop(); 25: } 26: 27: apply { 28: if(hdr.ipv4.isValid()){ 29: forwarding.apply(); 30: } 31: } forwarding my_indirect_counter Count Idx. Key Action forward forward forward forward forward forward forward forward Action Data Packets Bytes 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4 10.0.0.5 10.0.0.6 egress port = 1, Idx = 0 egress port = 2, Idx = 0 egress port = 3, Idx = 0 egress port = 4, Idx = 1 egress port = 0, Idx = 1 egress port = 0, Idx = 2 egress port = 0, Idx = 1 egress port = 0, Idx = 2 0 1 2 23 17 42 34,500 25,500 63,000 10.0.0.7 10.0.0.8 ... ... ... 10.0.0.32 drop egress port = 0, Idx = 2 19

  20. P4 Indirect Counters Example: count packets/bytes routed by routes 1-3; routes 4, 5, 7; and routes 6, 8, 32 Note that the index used to increment the counter is retrieved from the action data The index can also be computed, as needed by the programmer 1: control MyIngress(inout header hdr, 2: inout metadata meta, 3: inout standard_metadata_t standard_metadata){ 3: 4: counter(3,counterType.packets_and_bytes) my_indirect_counter; 5: 6: action forward(egressSpect_t port, bit<32> index){ 7: standard_meadata.egress_spec = port; 8: my_indirect_counter.count(index); 9: } 10: action drop(){ 11: mark_to_drop(standard_metadata); 12: } 13: 14: table forwarding { 15: key = { 16: hdr.ipv4.dstAddr : exact; 17: } 18: actions = { 19: forward; 20: drop; 21: NoAction; 22: } 23: size = 32; 24: default_action = drop(); 25: } 26: 27: apply { 28: if(hdr.ipv4.isValid()){ 29: forwarding.apply(); 30: } 31: } forwarding my_indirect_counter Count Idx. Key Action forward forward forward forward forward forward forward forward Action Data Packets Bytes 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4 10.0.0.5 10.0.0.6 egress port = 1, Idx = 0 egress port = 2, Idx = 0 egress port = 3, Idx = 0 egress port = 4, Idx = 1 egress port = 0, Idx = 1 egress port = 0, Idx = 2 egress port = 0, Idx = 1 egress port = 0, Idx = 2 0 1 2 23 17 42 34,500 25,500 63,000 10.0.0.7 10.0.0.8 ... ... ... 10.0.0.32 drop egress port = 0, Idx = 2 20

  21. P4 Indirect Counters The control plane can read the counters E.g., the following command for MyIngress.my_indirect_counter indicates that the counter associated with entry 1 counted 172,983,947bytes and 114,276 packets 21

Related


More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#