Re: [RFC] [Patch 4/4] lock contention tracking slimmed down

Martin Peschke
2007-06-08T17:14:27Z

Peter Zijlstra wrote:
> On Wed, 2007-06-06 at 23:34 +0200, Martin Peschke wrote:
>
>> +struct statistic_info lock_stat_info[_LOCK_STAT_NUMBER] = {
>> + [LOCK_STAT_CONT] = {
>> + .name = "contentions",
>> + .x_unit = "instruction_pointer",
>> + .y_unit = "occurrence",
>> + .defaults = "type=sparse entries=4",
>> + .flags = STATISTIC_FLAGS_LABEL,
>> + },
>> + [LOCK_STAT_WAIT_READ] = {
>> + .name = "wait_read",
>> + .x_unit = "nanoseconds",
>> + .y_unit = "occurrence",
>> + .defaults = "type=utilisation",
>> + },
>> + [LOCK_STAT_WAIT_WRITE] = {
>> + .name = "wait_write",
>> + .x_unit = "nanoseconds",
>> + .y_unit = "occurrence",
>> + .defaults = "type=utilisation",
>> + },
>> + [LOCK_STAT_HOLD_READ] = {
>> + .name = "hold_read",
>> + .x_unit = "nanoseconds",
>> + .y_unit = "occurrence",
>> + .defaults = "type=utilisation",
>> + },
>> + [LOCK_STAT_HOLD_WRITE] = {
>> + .name = "hold_write",
>> + .x_unit = "nanoseconds",
>> + .y_unit = "occurrence",
>> + .defaults = "type=utilisation",
>> }
>> };
>
> You're parsing strings in-kernel to setup data structures?

Might be surprising (or revolting?)... but, yes, I do.

.defaults reflects the developers opinion on the way of data
accumululation that might make most sense in most cases.
The current implementation of lib/statistic.c allows users to change
setting that we see in .defaults. If one needs to track more than
4 contention points, for example, then they can change this limit by
passing "entries=4" to the user interface. So there is some parsing
code anyway. Passing default setting in a similar fashion has just been
convenient for the developer.