qemu与内存

本文介绍了如何使用qemu模拟NUMA结构的系统,并探讨了内存热插拔的功能。通过qemu命令行参数,可以设置每个节点的内存大小,实现内存的动态分配。此外,文章还提到了两种内存热插拔方式:纯动态操作和半动态操作,分别适用于不同的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模拟NUMA系统

有时候我们需要模拟NUMA结构的系统,qemu也可以给我们做到~

qemu命令行参数:

-m 8G -numa node,nodeid=0 -numa node,nodeid=1

这样我们就有一台两个节点的系统了。

进入系统,分析一下内存分布:

[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009efff]
[    0.000000]   node   0: [mem 0x0000000000100000-0x00000000bffdefff]
[    0.000000]   node   0: [mem 0x0000000100000000-0x000000013fffffff]
[    0.000000]   node   1: [mem 0x0000000140000000-0x000000023fffffff]

可以看到在node1上的内存是4G,node0上合计也差不多是4G。所以基本上是平分的。

同时qemu也支持了设定每个节点上的内存大小。

qemu命令行:

-m 8G -numa node,mem=1G,nodeid=0 -numa node,mem=7G,nodeid=1

进入系统,再分析一下内存分布:

[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009efff]
[    0.000000]   node   0: [mem 0x0000000000100000-0x000000003fffffff]
[    0.000000]   node   1: [mem 0x0000000040000000-0x00000000bffdefff]
[    0.000000]   node   1: [mem 0x0000000100000000-0x000000023fffffff]

瞧,在node0上的内存差不多是1G了,而在node2上就有7G了。

热插拔

这个blog写得真不错 memory hotplug

如果想要做热插拔,qemu的参数需要有所改动。

-m 8G,slots=32,maxmem=32G

这表示了

  • 最多有32个槽可以进行内存热插拔
  • 最大能够支持到的内存是32G

热插拔有两种方式可以实现:

  • 纯动态,通过qemu monitor来操作
  • 半动态,在qemu命令中指定

其实这两个方式背后的实现是一样的,只是应用场景会有点不一样。前者适用于生产环境上动态添加,后者适用于测试环境避免了每次输入命令行。

我们先来看看纯动态怎么操作。

  • 切换到qemu monitor。
  • object_add memory-backend-ram,id=ram0,size=1G
  • device_add pc-dimm,id=dimm0,memdev=ram0,node=0

完成~简单~

再来看看半动态的命令行怎么写

-object memory-backend-ram,id=mem1,size=256M -object memory-backend-ram,id=mem0,size=256M \
-device pc-dimm,id=dimm1,memdev=mem1,slot=1,node=0 -device pc-dimm,id=dimm0,memdev=mem0,slot=0,node=0

你看,其实长得差不多吧。

啰嗦一句,这里只完成了内存热插拔的物理上线,逻辑上线还需要自己处理哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值