Hi.

At the point of a DPDK app crash, or some other abnormal event, you may want to save the trace buffer, especially if a complete core file is too large to fit on the disk.

This would be straight-forward to implement on top of DPDK trace.

However, you may also want to save data which is referred to by-reference in the traces, like for example mbuf pointers. The reason for not have the data by-value may be that it would be too expensive for always-on type trace points.

How could one go about solving the latter case with DPDK trace?

Decoding CTF and de-referencing the appropriate data (e.g., in the signal handler) seems technically possible, but very complicated without "framework" (i.e., DPDK trace) support. Then you would also need to regenerate CTF (including new meta data), but now with the by-reference fields as by-value fields.

Ideally, as far as I see, one would like the app to mark a certain field as a pointer to X bytes of data, which could potentially be dereferenced at a point of a crash.

Obviously, mbufs can be recycled and other buffers may change state compared to what they were during at the time of the trace entry being created. Nevertheless, such data, although inaccurate/best effort, may be worth a lot in a postmortem debugging scenario.

You could have something on the side of DPDK trace, which maintained the buffers and pointers and could be dereferenced/copied around at the point of the "abnormal event", but I'm curious if there is a solution where you rely fully on an extended version of DPDK tracing.

/M

Reply via email to