Re: [PATCH] perf tools: Fix not finding kcore in buildid cache

Adrian Hunter
2013-11-27T11:44:08Z

On 27/11/13 13:32, Ingo Molnar wrote:
>
> * Adrian Hunter <adrian.hunter@intel.com> wrote:
>
>> On 26/11/13 18:15, Ingo Molnar wrote:
>>>
>>> * Adrian Hunter <adrian.hunter@intel.com> wrote:
>>>
>>>> The logic was not looking in the buildid cache for kcore
>>>> if the host kernel buildid did not match the recorded
>>>> kernel buildid.
>>>
>>> It would be nice to also include the specific failure mode in the
>>> changelog: exactly how can users run into this. That will be more
>>> useful to most people reading these changelogs than a more abstract
>>> bug description.
>>
>> The preconditions for the problem are that kcore is in the buildid
>> cache and that the running kernel has a different buildid e.g.
>>
>> $ perf buildid-list | grep kernel.kallsyms
>> b18fbe769dea12513028a4287dae02efc1582c29 [kernel.kallsyms]
>>
>> $ perf record -o /tmp/junk true >/dev/null 2>&1 ; perf buildid-list -i /tmp/junk | grep kernel.kallsyms
>> 504f9fd9328c40714995ce76fe1354c6e90136ce [kernel.kallsyms]
>>
>>
>>
>> Before the patch:
>>
>>
>> $ perf script -v >out.txt
>> build id event received for [kernel.kallsyms]: b18fbe769dea12513028a4287dae02efc1582c29
>> <SNIP>
>> Using /home/ahunter/.debug/[kernel.kallsyms]/b18fbe769dea12513028a4287dae02efc1582c29 for symbols
>>
>> perf script stopped
>>
>>
>> After the patch:
>>
>>
>> $ perf script -v >out.txt
>> build id event received for [kernel.kallsyms]: b18fbe769dea12513028a4287dae02efc1582c29
>> <SNIP>
>> Using /home/ahunter/.debug/[kernel.kcore]/b18fbe769dea12513028a4287dae02efc1582c29/2013112617084061/kcore for kernel object code
>> Using /home/ahunter/.debug/[kernel.kcore]/b18fbe769dea12513028a4287dae02efc1582c29/2013112617084061/kallsyms for symbols
>>
>> perf script stopped
>
> So the result of the patch is that kernel symbols get
> resolved/annotated correctly, as expected from the live kcore feature,
> right?

Yes but this is the non-live case i.e. the kernel has changed and we are
looking at a special copy of kcore that we placed in the buildid cache
(using "perf buildid-cache -v -k /proc/kcore") when the data was recorded.