[gem5-users] Re: Tracking read()/write() system calls in gem5

2020-09-23 Thread Ciro Santilli via gem5-users
Also have a look at --debug-flags SyscallBase,SyscallVerbose


On Tue, Sep 22, 2020 at 8:26 PM ABD ALRHMAN ABO ALKHEEL via gem5-users
 wrote:
>
> Hi All, can I track the read()/write() system calls in GEM5 in SE mode? If 
> so, how I can do that? Any help would be appreciated. Thanks
> ___
> gem5-users mailing list -- gem5-users@gem5.org
> To unsubscribe send an email to gem5-users-le...@gem5.org
> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
___
gem5-users mailing list -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s


[gem5-users] Using perf_event with the ARM PMU inside gem5 on Linux

2020-09-23 Thread Pierre Ayoub via gem5-users
Hi gem5's users, 

TL;DR: 
-- 

I know that the ARM PMU is partially implemented, thanks to the gem5 source 
code and some publications. I have a binary which uses perf_event to access the 
PMU on a Linux-based OS, under an ARM processor, on real hardware. Could it use 
perf_event inside a gem5 full-system simulation with a Linux kernel, under the 
ARM ISA? So far, I haven't found the right way to do it. If someone knows, I 
will be very grateful! 

Detailed information: 
- 

I have a binary (developed by myself) which uses perf_event on real ARM 
hardware, to get cache misses and mispredicted branches, and it works well. My 
"perf_event_attr.type" is configured with "PERF_TYPE_HARDWARE" and the 
".config" field with "PERF_COUNT_HW_CACHE_MISSES" and another with 
"PERF_COUNT_HW_BRANCH_MISSES." However, when I put this binary on a gem5 fs 
simulation, configured with the DerivO3CPU, ArmSystem, and RealView platform, I 
got the following error: 

"ENOENT (2): No such file or directory" 

The perf_event file descriptor is not created by the kernel (equal to -1). I 
wish to precise that this error arrives at the return of the perf_event_open() 
syscall. Finally, this error is documented in the perf_event_open.2 manpage, 
and also discussed here. However, it didn't help me to understand the error 
regarding gem5. 

I don't know if we can access the PMU through perf_event into gem5. If so, 
maybe we have to use RAW events? (i.e., do you know if perf_event is supposed 
to be initialized with PERF_EVENT_HARDWARE or PERF_EVENT_RAW, to be used with 
gem5?) In the gem5 example code under configs, I have found a snippet in 
devices.py which "Instantiates 1 ArmPMU per PE" (addPMUs()). However, after few 
tries, I don't understand how to use this correctly and how it is related to 
perf_event. 

I used a code similar to addPMUs() in devices.py, with PPI interrupts number 
20, 21, 22, and 23 (one by core) according to the RealView interrupts mapping, 
with the ArmPPI class. However, perf_event_open() still return the same 
error. Note also that I got this message during the boot: 

src/arch/arm/pmu.cc:293: warn: Not doing anything for write to miscreg 
pmuserenr_el0. 

This register is documented in the ARMv8-A architecture manual. I have checked 
the pmu.cc file, and saw that writing to this register is not implemented (TODO 
state). Normally, it should not be a problem since this register allows (when 
set to 1) userland access to the PMU, which we don't want because I want to 
access it through the Linux kernel perf_event interface. 


With --debug-flags=PMUVerbose, I get the following: 

0: system.cpu_cluster.cpus0.isa.pmu: Initializing the PMU. 
[...] 
0: system.cpu_cluster.cpus0.isa.pmu: PMU: Adding Probe Driven event with id 
'0x2'as probe system.cpu_cluster.cpus0.itb:Refills 
[...] 
8687351673751: system.cpu_cluster.cpus0.isa.pmu: Assigning PMU to ContextID 0. 
[...] 
8687351673751: system.cpu_cluster.cpus0.isa.pmu: updateCounter(31): Disabling 
counter 
[...] 

Now, you know all I know about this issue! 

___
gem5-users mailing list -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s