On Mon, Aug 06, 2018 at 12:50:50PM -0700, Reinette Chatre wrote: > In my previous email I provided the details of the Cache Pseudo-Locking > feature implemented on top of resctrl. Please let me know if you would > like any more details about that. I can send you more materials.
I've no yet had time to read.. > BUG: sleeping function called from invalid context at > kernel/locking/mutex.c:748 > > I thus continued to use the API with interrupts enabled did the following: > > Two new event attributes: > static struct perf_event_attr l2_miss_attr = { > .type = PERF_TYPE_RAW, > .config = (0x10ULL << 8) | 0xd1, Please use something like: X86_CONFIG(.event=0xd1, .umask=0x10), that's ever so much more readable. > .size = sizeof(struct perf_event_attr), > .pinned = 1, > .disabled = 1, > .exclude_user = 1 > }; > > static struct perf_event_attr l2_hit_attr = { > .type = PERF_TYPE_RAW, > .config = (0x2ULL << 8) | 0xd1, > .size = sizeof(struct perf_event_attr), > .pinned = 1, > .disabled = 1, > .exclude_user = 1 > }; > > Create the two new events using these attributes: > l2_miss_event = perf_event_create_kernel_counter(&l2_miss_attr, cpu, > NULL, NULL, NULL); > l2_hit_event = perf_event_create_kernel_counter(&l2_hit_attr, cpu, NULL, > NULL, NULL); > > Take measurements: > perf_event_enable(l2_miss_event); > perf_event_enable(l2_hit_event); > local_irq_disable(); > /* Disable hardware prefetchers */ > /* Loop through pseudo-locked memory */ > /* Enable hardware prefetchers */ > local_irq_enable(); > perf_event_disable(l2_hit_event); > perf_event_disable(l2_miss_event); > > Read results: > l2_hits = perf_event_read_value(l2_hit_event, &enabled, &running); > l2_miss = perf_event_read_value(l2_miss_event, &enabled, &running); > /* Make results available in tracepoints */ switch to .disabled=0 and try this for measurement: local_irq_disable(); perf_event_read_local(l2_miss_event, &miss_val1, NULL, NULL); perf_event_read_local(l2_hit_event, &hit_val1, NULL, NULL); /* do your thing */ perf_event_read_local(l2_miss_event, &miss_val2, NULL, NULL); perf_event_read_local(l2_hit_event, &hit_val2, NULL, NULL); local_irq_enable(); You're running this on the CPU you created the event for, right? > With the above implementation and a 256KB pseudo-locked memory region I > obtain the following results: > pseudo_lock_mea-755 [002] .... 396.946953: pseudo_lock_l2: hits=4140 > The above results are not accurate since it does not reflect the success > of the pseudo-locked region. Expected results are as we can currently > obtain (copying results from previous email): > pseudo_lock_mea-26090 [002] .... 61838.488027: pseudo_lock_l2: hits=4096 Still fairly close.. only like 44 extra hits or 1% error.