tech-net archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Seeking opinion on where networking-related user space code should go
I have created a facility in the kernel for tracking mbuf clusters. (Twice at
BBN, we have successfully used this cluster tracking code to find mbuf cluster
leaks.)
This facility can be compiled in the kernel by enabling the option MCL_DEBUG.
If MCL_DEBUG is enabled, then tracking data is kept for each mbuf cluster.
Examples of data kept:
When and where in the code the cluster was allocated.
When and where in the code the cluster was freed.
When and where the cluster was queued or dequeued.
When and where the cluster was passed from one protocol to another.
At each of these points, I note which CPU we're on, the LWP id, whether or not
we have KERNEL_LOCK and/or softnet lock, if there was something anomalous.
Anomalies detected: cluster allocated twice without being freed in-between,
cluster freed without being allocated, cluster unallocated when expected to be
allocated, lock not held when expected to be held.
I have set up code in /proc for accessing the data, but it would be nice to
have a user space program to look at the data. Using kvm, this data can be
inspected in a live kernel or in a core dump.
Keep in mind, there can be up to 8192 clusters, so there is potentially a *lot*
of data. Using kvm, we can also follow pointers in the data to inspect the
contents of mbuf's and mbuf clusters. I expect that this, too, could be quite
useful.
Options I have considered:
- a new usr.bin program
- adding new options to vmstat for this data
- adding new options to netstat for this data
Any thoughts or preferences?
-Bev
Home |
Main Index |
Thread Index |
Old Index