| Buffer metadata change tracker |
| ============================== |
| |
| Introduction |
| ------------ |
| |
| The mdata plugin uses the vlib main loop “before” performance counter |
| hook to snapshoot buffer metadata before calling the node dispatch |
| function. Similarly, the plugin uses the main loop “after” hook to |
| compare a vectors’ worth of buffer metadata after the fact. |
| |
| The comparison function is a simple octet-by-octet A != B check. We |
| accumulate changed octets per-node across the entire run, using a single |
| spinlock-protected accumulator. |
| |
| The “show buffer metadata” command produces a report of all fields whose |
| values are changed by nodes visited during a given run. |
| |
| Since many fields in the vnet_buffer_opaque_t are union members, it may |
| appear that a certain node changes numerous fields. The entire point of |
| the exercise is to warn developers that if a packet visits node N, data |
| placed into opaque union field F *will* be affected. |
| |
| One should never assume much about buffer metadata immutability across |
| arbitrary subgraphs. This tool generates accurate reports, to the extent |
| that one exercises the required subgraph trajectories. |