Re: [PATCH] hw/arm/virt: Enable HMAT on arm virt machine

2022-01-25 Thread chenxiang (M)




在 2022/1/25 20:46, Andrew Jones 写道:

On Tue, Jan 25, 2022 at 07:46:43PM +0800, chenxiang (M) wrote:

Hi Andrew,


在 2022/1/25 18:26, Andrew Jones 写道:

On Tue, Jan 25, 2022 at 05:15:34PM +0800, chenxiang via wrote:

From: Xiang Chen 

Since the patchset ("Build ACPI Heterogeneous Memory Attribute Table (HMAT)"),
HMAT is supported, but only x86 is enabled. Enable HMAT on arm virt machine.

Hi Xiang,

What QEMU commands lines have you tested with which Linux guest kernels?

I tested it with following commands with guest kernel 5.16-rc1, and the boot
log of guest kernel is as attached:

Thanks. Please consider adding HMAT tests, see tests/qtest/numa-test.c and
tests/qtest/bios-tables-test.c, for the virt machine type to this series.
Otherwise,

Reviewed-by: Andrew Jones 


Thanks, i will add those HMAT tests in v2.





Re: [PATCH] hw/arm/virt: Enable HMAT on arm virt machine

2022-01-25 Thread Andrew Jones
On Tue, Jan 25, 2022 at 07:46:43PM +0800, chenxiang (M) wrote:
> Hi Andrew,
> 
> 
> 在 2022/1/25 18:26, Andrew Jones 写道:
> > On Tue, Jan 25, 2022 at 05:15:34PM +0800, chenxiang via wrote:
> > > From: Xiang Chen 
> > > 
> > > Since the patchset ("Build ACPI Heterogeneous Memory Attribute Table 
> > > (HMAT)"),
> > > HMAT is supported, but only x86 is enabled. Enable HMAT on arm virt 
> > > machine.
> > Hi Xiang,
> > 
> > What QEMU commands lines have you tested with which Linux guest kernels?
> 
> I tested it with following commands with guest kernel 5.16-rc1, and the boot
> log of guest kernel is as attached:

Thanks. Please consider adding HMAT tests, see tests/qtest/numa-test.c and
tests/qtest/bios-tables-test.c, for the virt machine type to this series.
Otherwise,

Reviewed-by: Andrew Jones 

Thanks,
drew

> 
> ./qemu-system-aarch64 -m 4G,slots=4,maxmem=8g \
> -object memory-backend-ram,size=2G,id=m0 \
> -object memory-backend-ram,size=2G,id=m1 \
> -numa node,cpus=0-3,nodeid=0,memdev=m0 \
> -numa node,nodeid=1,memdev=m1,initiator=0 \
> -numa 
> hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-latency,latency=5
> \
> -numa 
> hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-bandwidth,bandwidth=200M
> \
> -numa 
> hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-latency,latency=10
> \
> -numa 
> hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-bandwidth,bandwidth=100M
> \
> -numa 
> hmat-cache,node-id=0,size=16K,level=1,associativity=direct,policy=write-back,line=8
> \
> -numa 
> hmat-cache,node-id=1,size=16K,level=1,associativity=direct,policy=write-back,line=8
> \
> -smp 4 \
> -no-reboot \
> -nographic \
> -cpu host \
> -machine virt,accel=kvm,gic-version=3,hmat=on \
> -bios /home/cx/QEMU_EFI.fd \
> -monitor unix:/home/cx/opt/qmp-test,server,nowait \
> -kernel /home/cx/Image  \
> -device virtio-blk-pci,drive=drive0,id=virtblk0,num-queues=4  \
> -drive file=/home/cx/opt/boot.img,if=none,id=drive0 \
> -append "rdinit=init console=ttyAMA0 root=/dev/vda rootfstype=ext4 rw "
> 
> 
> > 
> > Thanks,
> > drew
> > 
> > > Signed-off-by: Xiang Chen 
> > > ---
> > >   hw/arm/Kconfig   | 1 +
> > >   hw/arm/virt-acpi-build.c | 7 +++
> > >   2 files changed, 8 insertions(+)
> > > 
> > > diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
> > > index 2e0049196d..a3c6099829 100644
> > > --- a/hw/arm/Kconfig
> > > +++ b/hw/arm/Kconfig
> > > @@ -29,6 +29,7 @@ config ARM_VIRT
> > >   select ACPI_APEI
> > >   select ACPI_VIOT
> > >   select VIRTIO_MEM_SUPPORTED
> > > +select ACPI_HMAT
> > >   config CHEETAH
> > >   bool
> > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> > > index 449fab0080..f19b55e486 100644
> > > --- a/hw/arm/virt-acpi-build.c
> > > +++ b/hw/arm/virt-acpi-build.c
> > > @@ -42,6 +42,7 @@
> > >   #include "hw/acpi/memory_hotplug.h"
> > >   #include "hw/acpi/generic_event_device.h"
> > >   #include "hw/acpi/tpm.h"
> > > +#include "hw/acpi/hmat.h"
> > >   #include "hw/pci/pcie_host.h"
> > >   #include "hw/pci/pci.h"
> > >   #include "hw/pci/pci_bus.h"
> > > @@ -990,6 +991,12 @@ void virt_acpi_build(VirtMachineState *vms, 
> > > AcpiBuildTables *tables)
> > >   build_slit(tables_blob, tables->linker, ms, vms->oem_id,
> > >  vms->oem_table_id);
> > >   }
> > > +
> > > +if (ms->numa_state->hmat_enabled) {
> > > +acpi_add_table(table_offsets, tables_blob);
> > > +build_hmat(tables_blob, tables->linker, ms->numa_state,
> > > +   vms->oem_id, vms->oem_table_id);
> > > +}
> > >   }
> > >   if (ms->nvdimms_state->is_enabled) {
> > > -- 
> > > 2.33.0
> > > 
> > > 
> > .
> > 
> 

> [root@centos build]# ./qemu-system-aarch64 -m 4G,slots=4,maxmem=8g -object 
> memory-backend-ram,size=2G,id=m0 -object memory-backend-ram,size=2G,id=m1 
> -numa node,cpus=0-3,nodeid=0,memdev=m0 -numa 
> node,nodeid=1,memdev=m1,initiator=0 -numa 
> hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-latency,latency=5
>  -numa 
> hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-bandwidth,bandwidth=200M
>  -numa 
> hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-latency,latency=10
>  -numa 
> hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-bandwidth,bandwidth=100M
>  -numa 
> hmat-cache,node-id=0,size=16K,level=1,associativity=direct,policy=write-back,line=8
>  -numa 
> hmat-cache,node-id=1,size=16K,level=1,associativity=direct,policy=write-back,line=8
>  -smp 4 -no-reboot -nographic -cpu host -machine 
> virt,accel=kvm,gic-version=3,hmat=on -bios /home/cx/QEMU_EFI.fd -monitor 
> unix:/home/cx/opt/qmp-test,server,nowait -kernel /home/cx/Image  -device 
> virtio-blk-pci,drive=drive0,id=virtblk0,num-queues=4  -drive 
> file=/home/cx/opt/boot.img,if=none,id=drive0 -append "rdinit=init 
> console=ttyAMA0 root=/dev/vda rootfstype=ext4 rw "
> WARNING: Image format was not specified for 

Re: [PATCH] hw/arm/virt: Enable HMAT on arm virt machine

2022-01-25 Thread chenxiang (M)

Hi Andrew,


在 2022/1/25 18:26, Andrew Jones 写道:

On Tue, Jan 25, 2022 at 05:15:34PM +0800, chenxiang via wrote:

From: Xiang Chen 

Since the patchset ("Build ACPI Heterogeneous Memory Attribute Table (HMAT)"),
HMAT is supported, but only x86 is enabled. Enable HMAT on arm virt machine.

Hi Xiang,

What QEMU commands lines have you tested with which Linux guest kernels?


I tested it with following commands with guest kernel 5.16-rc1, and the 
boot log of guest kernel is as attached:


./qemu-system-aarch64 -m 4G,slots=4,maxmem=8g \
-object memory-backend-ram,size=2G,id=m0 \
-object memory-backend-ram,size=2G,id=m1 \
-numa node,cpus=0-3,nodeid=0,memdev=m0 \
-numa node,nodeid=1,memdev=m1,initiator=0 \
-numa 
hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-latency,latency=5 
\
-numa 
hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-bandwidth,bandwidth=200M 
\
-numa 
hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-latency,latency=10 
\
-numa 
hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-bandwidth,bandwidth=100M 
\
-numa 
hmat-cache,node-id=0,size=16K,level=1,associativity=direct,policy=write-back,line=8 
\
-numa 
hmat-cache,node-id=1,size=16K,level=1,associativity=direct,policy=write-back,line=8 
\

-smp 4 \
-no-reboot \
-nographic \
-cpu host \
-machine virt,accel=kvm,gic-version=3,hmat=on \
-bios /home/cx/QEMU_EFI.fd \
-monitor unix:/home/cx/opt/qmp-test,server,nowait \
-kernel /home/cx/Image  \
-device virtio-blk-pci,drive=drive0,id=virtblk0,num-queues=4  \
-drive file=/home/cx/opt/boot.img,if=none,id=drive0 \
-append "rdinit=init console=ttyAMA0 root=/dev/vda rootfstype=ext4 rw "




Thanks,
drew


Signed-off-by: Xiang Chen 
---
  hw/arm/Kconfig   | 1 +
  hw/arm/virt-acpi-build.c | 7 +++
  2 files changed, 8 insertions(+)

diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
index 2e0049196d..a3c6099829 100644
--- a/hw/arm/Kconfig
+++ b/hw/arm/Kconfig
@@ -29,6 +29,7 @@ config ARM_VIRT
  select ACPI_APEI
  select ACPI_VIOT
  select VIRTIO_MEM_SUPPORTED
+select ACPI_HMAT
  
  config CHEETAH

  bool
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index 449fab0080..f19b55e486 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -42,6 +42,7 @@
  #include "hw/acpi/memory_hotplug.h"
  #include "hw/acpi/generic_event_device.h"
  #include "hw/acpi/tpm.h"
+#include "hw/acpi/hmat.h"
  #include "hw/pci/pcie_host.h"
  #include "hw/pci/pci.h"
  #include "hw/pci/pci_bus.h"
@@ -990,6 +991,12 @@ void virt_acpi_build(VirtMachineState *vms, 
AcpiBuildTables *tables)
  build_slit(tables_blob, tables->linker, ms, vms->oem_id,
 vms->oem_table_id);
  }
+
+if (ms->numa_state->hmat_enabled) {
+acpi_add_table(table_offsets, tables_blob);
+build_hmat(tables_blob, tables->linker, ms->numa_state,
+   vms->oem_id, vms->oem_table_id);
+}
  }
  
  if (ms->nvdimms_state->is_enabled) {

--
2.33.0



.



[root@centos build]# ./qemu-system-aarch64 -m 4G,slots=4,maxmem=8g -object 
memory-backend-ram,size=2G,id=m0 -object memory-backend-ram,size=2G,id=m1 -numa 
node,cpus=0-3,nodeid=0,memdev=m0 -numa node,nodeid=1,memdev=m1,initiator=0 
-numa 
hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-latency,latency=5
 -numa 
hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-bandwidth,bandwidth=200M
 -numa 
hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-latency,latency=10
 -numa 
hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-bandwidth,bandwidth=100M
 -numa 
hmat-cache,node-id=0,size=16K,level=1,associativity=direct,policy=write-back,line=8
 -numa 
hmat-cache,node-id=1,size=16K,level=1,associativity=direct,policy=write-back,line=8
 -smp 4 -no-reboot -nographic -cpu host -machine 
virt,accel=kvm,gic-version=3,hmat=on -bios /home/cx/QEMU_EFI.fd -monitor 
unix:/home/cx/opt/qmp-test,server,nowait -kernel /home/cx/Image  -device 
virtio-blk-pci,drive=drive0,id=virtblk0,num-queues=4  -drive 
file=/home/cx/opt/boot.img,if=none,id=drive0 -append "rdinit=init 
console=ttyAMA0 root=/dev/vda rootfstype=ext4 rw "
WARNING: Image format was not specified for '/home/cx/opt/boot.img' and probing 
guessed raw.
 Automatically detecting the format is dangerous for raw images, write 
operations on block 0 will be restricted.
 Specify the 'raw' format explicitly to remove the restrictions.
EFI stub: Booting Linux Kernel...
EFI stub: EFI_RNG_PROTOCOL unavailable
EFI stub: Generating empty DTB
EFI stub: Exiting boot services...
[0.00] Booting Linux on physical CPU 0x00 [0x481fd010]
[0.00] Linux version 5.16.0-rc1-15060-g07d132dd883a (chenxiang@plinth) 
(aarch64-linux-gnu-gcc (Linaro GCC 7.3-2018.05-rc1) 7.3.1 20180425 
[linaro-7.3-2018.05-rc1 revision 38aec9a676236eaa42ca03ccb3a6c1dd0182c29f], GNU 
ld (Linaro_Binutils-2018.05-rc1) 

Re: [PATCH] hw/arm/virt: Enable HMAT on arm virt machine

2022-01-25 Thread Andrew Jones
On Tue, Jan 25, 2022 at 05:15:34PM +0800, chenxiang via wrote:
> From: Xiang Chen 
> 
> Since the patchset ("Build ACPI Heterogeneous Memory Attribute Table (HMAT)"),
> HMAT is supported, but only x86 is enabled. Enable HMAT on arm virt machine.

Hi Xiang,

What QEMU commands lines have you tested with which Linux guest kernels?

Thanks,
drew

> 
> Signed-off-by: Xiang Chen 
> ---
>  hw/arm/Kconfig   | 1 +
>  hw/arm/virt-acpi-build.c | 7 +++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
> index 2e0049196d..a3c6099829 100644
> --- a/hw/arm/Kconfig
> +++ b/hw/arm/Kconfig
> @@ -29,6 +29,7 @@ config ARM_VIRT
>  select ACPI_APEI
>  select ACPI_VIOT
>  select VIRTIO_MEM_SUPPORTED
> +select ACPI_HMAT
>  
>  config CHEETAH
>  bool
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index 449fab0080..f19b55e486 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -42,6 +42,7 @@
>  #include "hw/acpi/memory_hotplug.h"
>  #include "hw/acpi/generic_event_device.h"
>  #include "hw/acpi/tpm.h"
> +#include "hw/acpi/hmat.h"
>  #include "hw/pci/pcie_host.h"
>  #include "hw/pci/pci.h"
>  #include "hw/pci/pci_bus.h"
> @@ -990,6 +991,12 @@ void virt_acpi_build(VirtMachineState *vms, 
> AcpiBuildTables *tables)
>  build_slit(tables_blob, tables->linker, ms, vms->oem_id,
> vms->oem_table_id);
>  }
> +
> +if (ms->numa_state->hmat_enabled) {
> +acpi_add_table(table_offsets, tables_blob);
> +build_hmat(tables_blob, tables->linker, ms->numa_state,
> +   vms->oem_id, vms->oem_table_id);
> +}
>  }
>  
>  if (ms->nvdimms_state->is_enabled) {
> -- 
> 2.33.0
> 
>