[PATCH v4 0/2] Make sysFS functional on topologies with per core sink
Suzuki K Poulose
suzuki.poulose at arm.com
Thu Nov 12 04:20:33 EST 2020
On 11/12/20 8:57 AM, Linu Cherian wrote:
> Hi Suzuki,
>
> On Tue, Nov 10, 2020 at 8:27 PM Suzuki K Poulose <suzuki.poulose at arm.com> wrote:
>>
>> Hi Linu
>>
>> On 11/10/20 12:57 PM, Linu Cherian wrote:
>>> Hi Suzuki,
>>>
>> ...
>>
....
>>> # ./perf report
>>> 0x368 [0x50]: failed to process type: 1 [Cannot allocate memory]
>>> Error:
>>> failed to process sample
>>
>> I have no clue about it. Are you able to run it under GDB ? (Looks like
>> you have built the perf, so if you have sources, it may be a good idea
>> to run under the GDB and figure out where that error is coming from).
>>
>
> Yeah gdb helped figuring out the issue.
> The issue is in the opencsd, where it doesn't seem to support multiple streams
> when the formatter is not enabled. .
> Note:Our Silicon has formatter disabled and we already had changes in perf tool
> to take care of the formatter status.
>
> The below hack helped.
>
> diff --git a/decoder/source/ocsd_dcd_tree.cpp b/decoder/source/ocsd_dcd_tree.cpp
> index be15e36..0210dec 100644
> --- a/decoder/source/ocsd_dcd_tree.cpp
> +++ b/decoder/source/ocsd_dcd_tree.cpp
> @@ -401,7 +401,7 @@ ocsd_err_t DecodeTree::createDecoder(const
> std::string &decoderName, const int c
> int crtFlags = createFlags;
>
> uint8_t CSID = 0; // default for single stream decoder (no
> deformatter) - we ignore the ID
> - if(usingFormatter())
> + //if(usingFormatter())
> {
> CSID = pConfig->getTraceID();
> crtFlags |= OCSD_CREATE_FLG_INST_ID;
>
>
> Not sure if this is the right fix though.
That may work for you, but would break the existing platforms
and the drivers which enable formatting by default.
We need a way to address this in the perf side. This would be
needed for the ETE/TRBE trace scenario as well, where
the formatting is not supported by TRBE.
>
> This is how i tested,
>
> 1. # taskset 0x2 ./perf record -e cs_etm//u -F 10 --per-thread ping -c
> 30 127.0.0.1
>
> 2. # Ctrl-Z // Put the process in background
>
> 3. # taskset -p 0x4 <pid of ping process> // Move the ping process to core 2
>
> 4. # fg // Get the process to foreground
>
> 5. ./perf report
> snip ...
>
> # Samples: 66K of event 'branches:uH'
> # Event count (approx.): 66953
> #
> # Children Self Command Shared Object Symbol
> # ........ ........ ....... .....................
> ........................................
> #
> 15.94% 15.94% ping ld-2.31.so [.] _dl_lookup_symbol_x
> 14.93% 14.93% ping ld-2.31.so [.] do_lookup_x
> 10.68% 10.68% ping libc-2.31.so [.] _dl_addr
> 9.87% 9.87% ping ld-2.31.so [.] _dl_relocate_object
> 6.75% 6.75% ping ld-2.31.so [.] strcmp
> 3.62% 3.62% ping ld-2.31.so [.] check_match
> 2.72% 2.72% ping libc-2.31.so [.] __vfprintf_internal
> 1.90% 1.90% ping libc-2.31.so [.] _int_malloc
> 1.29% 1.29% ping libc-2.31.so [.] getenv
> 1.28% 1.28% ping libc-2.31.so [.] strcmp
> 1.17% 1.17% ping libc-2.31.so [.]
> _IO_file_xsputn@@GLIBC_2.17
> 1.16% 1.16% ping ld-2.31.so [.] _dl_name_match_p
>
> snip ...
>
> Also i could verify using prints in the tmc-etr-driver that the trace
> buffer gets reused across cores
> as well.
Cool ! So please could you test the newer version of this patch (not functionally
different, but slightly modified code) and add a Tested-by if you are happy
with it ?
https://lore.kernel.org/linux-arm-kernel/1605012309-24812-3-git-send-email-anshuman.khandual@arm.com/
Cheers
Suzuki
More information about the linux-arm-kernel
mailing list