Hi Alec,

Thanks for welcoming me!
What is current status in the implementation RISC-V FS mode?
Also, what are the open issues and where are you tracking them?
For now, I will check the above files pointed by you.

Thanks and Regards,
Rishabh Jain



On Fri, Mar 8, 2019 at 8:17 PM Alec Roelke <ar...@virginia.edu> wrote:

> The RISC-V CSRs are implemented as misc regs, which are the responsibility
> of the ISA to maintain.  ISA traits for RISC-V are implemented in
> src/arch/riscv/isa.cc and .hh.  The ISA object itself does not have any
> references to CPUs or threads, so CSRs such as performance counters and
> MHARTID can't be initialized and continuously updated by them.  However,
> their methods for getting the values of these registers take ThreadContexts
> as arguments (implemented in src/cpu/thread_context.cc and .hh), which
> *do* have pointers the CPU they are running on and can thus be used to
> get that information.  So, to get performance counts or a hartid, rather
> than reading from the misc reg file, these methods return data stored by
> the ThreadContext making the request.  This is why trying to read directly
> from the misc reg file won't work, because that is technically never
> updated.  For hartid, I tried implementing it using the ThreadContext's
> threadId() method, but as you noticed that seems to not always work, so I
> will have to find another solution.
>
> As for FS mode, yes, I have been slowly working toward implementing it.  I
> am always happy for others to contribute to RISC-V development, so I invite
> you to contribute if you can.  If you want any help or have any questions
> about what is already there, I'll be happy to answer them.
>
> On Thu, Mar 7, 2019 at 4:58 AM Rishabh Jain <rishucod...@gmail.com> wrote:
>
>> Hi Alec,
>>
>> Thanks for the reply.
>> For the mhart id issue, could you please point out the file which
>> implements mhart id?
>> I will give a shot to understand the necessary files.
>> If you can let me know, I can send a pull request regarding the same
>> which you can check and merge.
>> Also, do you plan to implement RISC-V FS mode? If yes, I wish to help by
>> contributing to gem5.
>>
>> Please let me know how to get started.
>>
>> Thanks and regards,
>> Rishabh Jain
>>
>>
>>
>> On Thu, Mar 7, 2019 at 8:19 AM Alec Roelke <ar...@virginia.edu> wrote:
>>
>>> When gem5 runs in SE mode, it is intended to mainly run user-level code,
>>> which higher-privilege code that executes during system calls offloaded to
>>> the host.  The privileged instructions do have definitions and at least
>>> partial implementations, and you can run them in SE mode because privilege
>>> checking hasn't been implemented yet (and would only matter for FS mode
>>> anyway).
>>>
>>> You should be able to run garnet2.0 and ruby, since they are separate
>>> from the ISA definitions and I didn't see anything in the ISAs that needs
>>> to be implemented for them while poking around when I was implementing
>>> RISC-V.  I haven't actually used them myself, though.
>>>
>>> Yes, inline assembly with CSRR is what I had intended.  I'll take a
>>> closer look at it this weekend and try to fix it.
>>>
>>> On Mon, Mar 4, 2019 at 12:22 PM Rishabh Jain <rishucod...@gmail.com>
>>> wrote:
>>>
>>>> Hi Alec,
>>>>
>>>> Thanks for the reply.
>>>>
>>>> First, I have a few queries (for RISCV ISA):
>>>> 1. In which privilege mode does gem5 boot in? If it is supervisor mode
>>>> or user mode, then how do I run binaries in machine mode?
>>>> 2. Can I use garnet2.0 and ruby model for riscv?
>>>>
>>>> I applied the patch by updating the src/arch/riscv/isa.cc file. Then, I
>>>> rebuilt the system using "$ scons build/RISCV/gem5.opt -j4".
>>>> I compiled my C program file using the command: "
>>>> riscv64-unknown-linux-gnu-gcc-7.2.0 -static hello1.c -o a.out"
>>>> Again, I ran my python config file using the command " $
>>>> build/RISCV/gem5.opt configs/multi_core/two_core/two_core_copy.py "
>>>> and I got the same previous value of mhartid. Both 0.
>>>> I used inline assembly :
>>>> asm ("csrr %0,0xF14\n\t"
>>>> :"=r" (hartID)
>>>> );
>>>> to read the value of mhartid and store in variable hartID. But here, I
>>>> am using the csrr instruction, right?
>>>> As you mentioned earlier, may you please elaborate on reading CSRR
>>>> instruction?
>>>>
>>>> Thanks and Regards,
>>>> Rishabh Jain
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Mon, Mar 4, 2019 at 1:57 AM Alec Roelke <ar...@virginia.edu> wrote:
>>>>
>>>>> Hi Rishabh,
>>>>>
>>>>> You're right that mhartid should not be the same for every CPU.  It
>>>>> looks like you may have found a bug in RISC-V in that mhartid had not been
>>>>> implemented yet.  This is odd, though, because I thought I had implemented
>>>>> it.  In any case, try this patch (
>>>>> https://gem5-review.googlesource.com/c/public/gem5/+/16988), which
>>>>> implements this CSR by returning the current thread's ID.  Note that 
>>>>> trying
>>>>> to manually get the contents of the register by inspecting it as you did
>>>>> will still get 0 for all CPUs, but reading it using the CSRR instruction
>>>>> should produce correct results.  It would also be helpful if you review 
>>>>> the
>>>>> patch (just +1 or -1 is okay unless you have more information you want to
>>>>> share) so I know it works on others' machines.
>>>>>
>>>>> As for your other problem, did you compile with the Linux toolchain or
>>>>> the Newlib one?  Gem5 is generally intended to run Linux binaries, so 
>>>>> there
>>>>> may be problems running code compiled for Newlib.  I tried your program
>>>>> with both, and it works with the Linux toolchain.  Try that and let me 
>>>>> know
>>>>> if it still fails.
>>>>>
>>>>> -Alec
>>>>>
>>>>> On Fri, Mar 1, 2019 at 9:50 AM Rishabh Jain <rishucod...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hi everyone,
>>>>>>
>>>>>> I have started working with gem5 from past 2 weeks and am trying to
>>>>>> simulate a multi-core CPU system with RISC-V ISA on gem5.
>>>>>>
>>>>>> I have written a C file where I use inline assembly snippet to grab
>>>>>> the value of mhartid (Hardware Thread id), marchid and mstatus.
>>>>>> I used this command to statically compile C code: $
>>>>>> riscv64-unknown-elf-gcc-7.2.0 -static hello1.c
>>>>>> The C code is available at (hello1.c) https://pastebin.com/t5XBBWEz.
>>>>>>
>>>>>> I have written my multi-core python configuration code: where the
>>>>>> system has two CPU cores, each having a private
>>>>>> I cache and D cache. These cache memories are connected to shared L2
>>>>>> cache via L2 bus. The L2 cache memory
>>>>>> is connected to the memory controller via membus.
>>>>>> The code is attached or available at (python configuration file)
>>>>>> https://pastebin.com/utxxNfJg
>>>>>> I used the cache python file which Jason has provided as part of
>>>>>> learning-gem5 book. ((python cache file)
>>>>>> https://pastebin.com/sTc8vwdh)
>>>>>> The command used to simulate on gem5: $ build/RISCV/gem5.opt
>>>>>> configs/multi_core/two_core/two_core_copy.py
>>>>>>
>>>>>> After running this command, I get the console log : (console log
>>>>>> without loop) https://pastebin.com/t8rM9thk
>>>>>> From this log, I am able to get the values as follows:
>>>>>> CPU1:
>>>>>> mhartid = 0
>>>>>>  marchid = 8192
>>>>>> mstatus = 0
>>>>>>
>>>>>> CPU2:
>>>>>> mhartid = 0
>>>>>>  marchid = 8192
>>>>>> mstatus = 0
>>>>>>
>>>>>> I strongly feel that mhartid of each processor should be different.
>>>>>> Can someone explain to me why they are the same?
>>>>>>
>>>>>> Out of curiosity, I had put a loop in the C code to observe cache
>>>>>> misses! (please uncomment the loop in above C code to run! )
>>>>>> Again, I compiled the C code using the above command and simulated
>>>>>> using gem5.
>>>>>> I get a long message starting with "panic: Page table fault when
>>>>>> accessing virtual address 0x8000000000000000".
>>>>>> (console log with loop) https://pastebin.com/0xNyGkCE
>>>>>>
>>>>>> Also, my max_miss_count parameter in config.ini remains to be 0 for
>>>>>> all caches.
>>>>>> I am unable to understand this error?
>>>>>>
>>>>>> Other than this, may someone guide me to the steps of finding memory
>>>>>> trace and instruction trace for a binary executed on gem5 in RISC-V isa.
>>>>>>
>>>>>> Thanks and regards,
>>>>>> Rishabh Jain
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
_______________________________________________
gem5-users mailing list
gem5-users@gem5.org
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to