qemu-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[no subject]


From: Alex Bennée
Date: Fri, 12 Nov 2021 10:21:25 +0000

Subject: Re: riscv64 system emulation maximum core count with virt machine
Date: Fri, 12 Nov 2021 10:16:34 +0000
References: 
<CADJL7eegP=UajgcOxcb=cs1QFim+W3wt0ieq_On6siznEU-byw@mail.gmail.com> 
<D5150EE4-3E9E-43F3-828D-630CA3673A2F@getmailspring.com> 
<CADJL7ecO089N_1GC6GPY5SJmRbVh81i7hE=8nsPZaEDuXHbR2w@mail.gmail.com>
User-agent: mu4e 1.7.4; emacs 28.0.60
In-reply-to: 
<CADJL7ecO089N_1GC6GPY5SJmRbVh81i7hE=8nsPZaEDuXHbR2w@mail.gmail.com>


Mark Wyse <wysem@cs.washington.edu> writes:

> Thanks Rahul,
>
> After some digging I came to the same conclusions. I'll dig deeper to see if 
> there are any impacts in raising max CPU count for RISC-V Virt
> machine, but I definitely agree that it should be set higher.

If you look at the commit that added the #define:

18df0b4695 (hw/riscv: virt: Allow creating multiple NUMA sockets)

You'll see amongst other things the number of vCPUs affected the size of
the one of the regions (IRQ controller?):

     [VIRT_RTC] =         {   0x101000,        0x1000 },
     [VIRT_CLINT] =       {  0x2000000,       0x10000 },
     [VIRT_PCIE_PIO] =    {  0x3000000,       0x10000 },
-    [VIRT_PLIC] =        {  0xc000000,     0x4000000 },
+    [VIRT_PLIC] =        {  0xc000000, VIRT_PLIC_SIZE(VIRT_CPUS_MAX * 2) },
     [VIRT_UART0] =       { 0x10000000,         0x100 },
     [VIRT_VIRTIO] =      { 0x10001000,        0x1000 },

which I suspects limits the total number you can handle without messing
around with the MMIO memory map.

> FWIW, I was able to run a 32-core kernel after adjusting code and kernel 
> appropriately and don't recall any warning or error messages
> popping up.

I should also point out from a emulation performance point of view you
will run into diminishing returns as you increases the number of CPUs as
the emulator has to spend more time ensuring cross-vCPU consistency when
things like the TLBs are flushed.

>
> Best,
> Mark
>
> On Wed, Sep 29, 2021 at 10:16 AM Rahul Pathak <rpathakmailbox@gmail.com> 
> wrote:
>
>  If you want to boot with more than 8 harts then you also need to increase 
> the CONFIG_NR_CPUS in the kernel. Along with change in
>  QEMU - VIRT_CPUS_MAX in  "include/hw/riscv/virt.h" 
>
>  But, the limit of 8 is low and should be increased. Don't know the reason 
> why its 8.
>
>  On Sep 22 2021, at 10:19 pm, Mark Wyse <wysem@cs.washington.edu> wrote:
>
>  Hello all,
>
>  Apologies if I missed the answer in the docs, but I am wondering why the 
> virt machine is limited to only 8 cores when running
>  RISC-V 64 system emulation? I am interested in booting a 16, 24, or even 32 
> core SMP Linux kernel with OpenSBI as the
>  bootloader on the generic virt machine before adding a custom machine 
> definition. I was able to successfully boot Linux kernel
>  5.9.0 with OpenSBI v0.9 and 8 cores/harts with an ext4 filesystem provided 
> by Buildroot.
>
>  I poked around the docs and source code a bit, and found mention of the core 
> count limit in the docs
>  (https://qemu.readthedocs.io/en/latest/system/riscv/virt.html), but no 
> reason as to why this is the limit. It also appears that
>  providing a custom device tree blob and setting QEMU's -smp option to match 
> might overcome this limitation, but it would be
>  better if more than 8 cores was supported directly.
>
>  Best,
>  Mark
>
>  Mark Wyse
>  pronouns: he/him/his
>  PhD Student
>  Paul G. Allen School of Computer Science & Engineering
>  University of Washington


-- 
Alex Bennée



reply via email to

[Prev in Thread] Current Thread [Next in Thread]