Hi Jack,

On 1/1/24 08:53, Ho-Ren (Jack) Chuang wrote:
Introduce a new configuration option 'host-mem-type=' in the
'-object memory-backend-ram', allowing users to specify
from which type of memory to allocate.

Users can specify 'cxlram' as an argument, and QEMU will then
automatically locate CXL RAM NUMA nodes and use them as the backend memory.
For example:
        -object memory-backend-ram,id=vmem0,size=19G,host-mem-type=cxlram \
        -device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
        -device cxl-rp,port=0,bus=cxl.1,id=root_port13,chassis=0,slot=2 \
        -device cxl-type3,bus=root_port13,volatile-memdev=vmem0,id=cxl-vmem0 \
        -M 
cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=19G,cxl-fmw.0.interleave-granularity=8k
 \

In v1, we plan to move most of the implementations to util and break down
this patch into different smaller patches.

Signed-off-by: Ho-Ren (Jack) Chuang <horenchu...@bytedance.com>
Signed-off-by: Hao Xiang <hao.xi...@bytedance.com>
---
  backends/hostmem.c       | 184 +++++++++++++++++++++++++++++++++++++++
  include/sysemu/hostmem.h |   1 +
  qapi/common.json         |  19 ++++
  qapi/qom.json            |   1 +
  qemu-options.hx          |   2 +-
  5 files changed, 206 insertions(+), 1 deletion(-)

diff --git a/backends/hostmem.c b/backends/hostmem.c


+#define CXL_DEVICE_PATH "/sys/bus/cxl/devices/"
+#define REGION_PATH_LEN 307
+#define DAX_REGION_PATH_LEN 563
+#define DAX_PATH_LEN 819
+#define TARGET_FILE_PATH_LEN 831

How do you get these numbers?

diff --git a/qapi/common.json b/qapi/common.json
index 6fed9cde1a..591fd73291 100644
--- a/qapi/common.json
+++ b/qapi/common.json
@@ -167,6 +167,25 @@
  { 'enum': 'HostMemPolicy',
    'data': [ 'default', 'preferred', 'bind', 'interleave' ] }
+##
+# @HostMemType:
+#
+# Automatically find a backend memory type on host.

This description is not clear (to me).

+# Can be further extened to support other types such as cxlpmem, hbm.

Typo "extended" although I'm not sure it is helpful to mention it.

+#
+# @none: do nothing (default).

"do nothing" is confusing here, I'd drop it.

+#
+# @cxlram: a CXL RAM backend on host.
+#
+# Note: HostMemType and HostMemPolicy/host-nodes cannot be set at the same
+# time. HostMemType is used to automatically bind with one kind of
+# host memory types.
+#
+# Since: 8.3

9.0

+##
+{ 'enum': 'HostMemType',
+  'data': [ 'none', 'cxlram' ] }
+
  ##
  # @NetFilterDirection:
  #
diff --git a/qapi/qom.json b/qapi/qom.json
index 95516ba325..fa3bc29708 100644
--- a/qapi/qom.json
+++ b/qapi/qom.json
@@ -626,6 +626,7 @@
              '*host-nodes': ['uint16'],
              '*merge': 'bool',
              '*policy': 'HostMemPolicy',
+            '*host-mem-type': 'HostMemType',

Missing documentation in MemoryBackendProperties.

              '*prealloc': 'bool',
              '*prealloc-threads': 'uint32',
              '*prealloc-context': 'str',


Reply via email to