Skip to contentSkip to conversation

NUMA Hotplug emulator

RFC Superseded Shaohui Zheng 3 participants 7 messages May 13, 2010 – May 24, 2010 Memory management

v1 of 9 Superseded Latest is v9 →

lore
Share & tools
lore
#0 lore raw

cover NUMA Hotplug emulator

Hi, All
This patchset introduces NUMA hotplug emulator for x86. it refers too
many files and might introduce new bugs, so we send a RFC to comminity first and expect comments and suggestions, thanks.

* WHAT IS HOTPLUG EMULATOR

NUMA hotplug emulator is collectively named for the hotplug emulation it is able to emulate NUMA Node Hotplug thru a pure software way. It intends to help people easily debug and test node/cpu/memory hotplug related stuff on a none-numa-hotplug-support machine, even an UMA machine.

The emulator provides mechanism to emulate the process of physcial cpu/mem hotadd, it provides possibility to debug CPU and memory hotplug on the machines without NUMA support for kenrel developers. It offers an interface for cpu and memory hotplug test purpose.

* WHY DO WE USE HOTPLUG EMULATOR

We are focusing on the hotplug emualation for a few months. The emualor helps
team to reproduce all the major hotplug bugs. It plays an important role to
the hotplug code quality assuirance. Because of the hotplug emulator, we already move most of the debug working to virtual evironment.

We send it to

* EXPECT BUGS

This is the first version to send to the comminity, but it is already 3rd version in internal. It expected to have bugs.

OPEN: Kernel might use part of hidden memory region as RAM buffer,
now emulator directly hide 128M extra space to workaround this issue. Any better way to avoid this conflict? We expect a better
solution from the community(for patch 002).

* Principles & Usages

NUMA hotplug emulator include 3 different parts, We add a menu item to the menuconfig to enable/disable them
(Refer to http://shaohui.org/images/hpe-krnl-cfg.jpg)

1) Node hotplug emulation:

The emulator firstly hides RAM via E820 table, and then it can fake offlined nodes with the hidden RAM.

After system bootup, user is able to hotplug-add these offlined nodes, which is just similar to a real hotplug hardware behavior.

Using boot option "numa=hide=N*size" to fake offlined nodes:
- N is the number of hidden nodes
- size is the memory size (in MB) per hidden node.

There is a sysfs entry "probe" under /sys/devices/system/node/ for user to hotplug the fake offlined nodes:

- to show all fake offlined nodes:

    $ cat /sys/devices/system/node/probe

- to hotadd a fake offlined node, e.g. nodeid is N:

    $ echo N > /sys/devices/system/node/probe

2) CPU hotplug emulation:

The emulator reserve CPUs throu grub parameter, the reserved CPUs can be hot-add/hot-remove in software method, it emulates the procuess of physical cpu hotplug.

- to hide CPUs
- Using boot option "maxcpus=N" hide CPUs
N is the number of initialize CPUs
- Using boot option "cpu_hpe=on" to enable cpu hotplug emulation
when cpu_hpe is enabled, the rest CPUs will not be initialized

- to hot-add CPU to node

	$ echo nid > cpu/probe

- to hot-remove CPU

	$ echo nid > cpu/release

3) Memory hotplug emulation:

The emulator reserve memory before OS booting, the reserved memory region is remove from e820 table, and they can be hot-added via the probe interface, this interface was extend to support add memory to the specified node, It maintains backwards compatibility.

The difficulty of Memory Release is well-known, we have no plan for it until now.

- reserve memory throu grub parameter
mem=1024m

- add a memory section to node 3

    $ echo 0x40000000,3 > memory/probe
	OR
    $ echo 1024m,3 > memory/probe

* ACKNOWLEDGMENT

hotplug emulator includes a team's efforts, thanks all of them. They are:
Andi Kleen, Haicheng Li, Shaohui Zheng, Fengguang Wu and Yongkang You

Signature · 2 lines
Thanks & Regards,
Shaohui
#1 lore raw

This email was lost after I check the LKML, resend it, sorry if duplicated.

Hi, All
This patchset introduces NUMA hotplug emulator for x86. it refers too
many files and might introduce new bugs, so we send a RFC to comminity first and expect comments and suggestions, thanks.

* WHAT IS HOTPLUG EMULATOR

NUMA hotplug emulator is collectively named for the hotplug emulation it is able to emulate NUMA Node Hotplug thru a pure software way. It intends to help people easily debug and test node/cpu/memory hotplug related stuff on a none-numa-hotplug-support machine, even an UMA machine.

The emulator provides mechanism to emulate the process of physcial cpu/mem hotadd, it provides possibility to debug CPU and memory hotplug on the machines without NUMA support for kenrel developers. It offers an interface for cpu and memory hotplug test purpose.

* WHY DO WE USE HOTPLUG EMULATOR

We are focusing on the hotplug emualation for a few months. The emualor helps
team to reproduce all the major hotplug bugs. It plays an important role to
the hotplug code quality assuirance. Because of the hotplug emulator, we already move most of the debug working to virtual evironment.

We send it to

* EXPECT BUGS

This is the first version to send to the comminity, but it is already 3rd version in internal. It expected to have bugs.

OPEN: Kernel might use part of hidden memory region as RAM buffer,
now emulator directly hide 128M extra space to workaround this issue. Any better way to avoid this conflict? We expect a better
solution from the community(for patch 002).

* Principles & Usages

NUMA hotplug emulator include 3 different parts, We add a menu item to the menuconfig to enable/disable them
(Refer to http://shaohui.org/images/hpe-krnl-cfg.jpg)

1) Node hotplug emulation:

The emulator firstly hides RAM via E820 table, and then it can fake offlined nodes with the hidden RAM.

After system bootup, user is able to hotplug-add these offlined nodes, which is just similar to a real hotplug hardware behavior.

Using boot option "numa=hide=N*size" to fake offlined nodes:
- N is the number of hidden nodes
- size is the memory size (in MB) per hidden node.

There is a sysfs entry "probe" under /sys/devices/system/node/ for user to hotplug the fake offlined nodes:

- to show all fake offlined nodes:

    $ cat /sys/devices/system/node/probe

- to hotadd a fake offlined node, e.g. nodeid is N:

    $ echo N > /sys/devices/system/node/probe

2) CPU hotplug emulation:

The emulator reserve CPUs throu grub parameter, the reserved CPUs can be hot-add/hot-remove in software method, it emulates the procuess of physical cpu hotplug.

- to hide CPUs
- Using boot option "maxcpus=N" hide CPUs
N is the number of initialize CPUs
- Using boot option "cpu_hpe=on" to enable cpu hotplug emulation
when cpu_hpe is enabled, the rest CPUs will not be initialized

- to hot-add CPU to node

	$ echo nid > cpu/probe

- to hot-remove CPU

	$ echo nid > cpu/release

3) Memory hotplug emulation:

The emulator reserve memory before OS booting, the reserved memory region is remove from e820 table, and they can be hot-added via the probe interface, this interface was extend to support add memory to the specified node, It maintains backwards compatibility.

The difficulty of Memory Release is well-known, we have no plan for it until now.

- reserve memory throu grub parameter
mem=1024m

- add a memory section to node 3

    $ echo 0x40000000,3 > memory/probe
	OR
    $ echo 1024m,3 > memory/probe

* ACKNOWLEDGMENT

hotplug emulator includes a team's efforts, thanks all of them. They are:
Andi Kleen, Haicheng Li, Shaohui Zheng, Fengguang Wu and Yongkang You

Signature · 2 lines
Thanks & Regards,
Shaohui
#2 lore raw

This email was lost after I check the LKML, resend it, sorry if duplicated.

Hi, All
This patchset introduces NUMA hotplug emulator for x86. it refers too
many files and might introduce new bugs, so we send a RFC to comminity first and expect comments and suggestions, thanks.

* WHAT IS HOTPLUG EMULATOR

NUMA hotplug emulator is collectively named for the hotplug emulation it is able to emulate NUMA Node Hotplug thru a pure software way. It intends to help people easily debug and test node/cpu/memory hotplug related stuff on a none-numa-hotplug-support machine, even an UMA machine.

The emulator provides mechanism to emulate the process of physcial cpu/mem hotadd, it provides possibility to debug CPU and memory hotplug on the machines without NUMA support for kenrel developers. It offers an interface for cpu and memory hotplug test purpose.

* WHY DO WE USE HOTPLUG EMULATOR

We are focusing on the hotplug emualation for a few months. The emualor helps
team to reproduce all the major hotplug bugs. It plays an important role to
the hotplug code quality assuirance. Because of the hotplug emulator, we already move most of the debug working to virtual evironment.

We send it to

* EXPECT BUGS

This is the first version to send to the comminity, but it is already 3rd version in internal. It expected to have bugs.

OPEN: Kernel might use part of hidden memory region as RAM buffer,
now emulator directly hide 128M extra space to workaround this issue. Any better way to avoid this conflict? We expect a better
solution from the community(for patch 002).

* Principles & Usages

NUMA hotplug emulator include 3 different parts, We add a menu item to the menuconfig to enable/disable them

1) Node hotplug emulation:

The emulator firstly hides RAM via E820 table, and then it can fake offlined nodes with the hidden RAM.

After system bootup, user is able to hotplug-add these offlined nodes, which is just similar to a real hotplug hardware behavior.

Using boot option "numa=hide=N*size" to fake offlined nodes:
- N is the number of hidden nodes
- size is the memory size (in MB) per hidden node.

There is a sysfs entry "probe" under /sys/devices/system/node/ for user to hotplug the fake offlined nodes:

- to show all fake offlined nodes:

    $ cat /sys/devices/system/node/probe

- to hotadd a fake offlined node, e.g. nodeid is N:

    $ echo N > /sys/devices/system/node/probe

2) CPU hotplug emulation:

The emulator reserve CPUs throu grub parameter, the reserved CPUs can be hot-add/hot-remove in software method, it emulates the procuess of physical cpu hotplug.

- to hide CPUs
- Using boot option "maxcpus=N" hide CPUs
N is the number of initialize CPUs
- Using boot option "cpu_hpe=on" to enable cpu hotplug emulation
when cpu_hpe is enabled, the rest CPUs will not be initialized

- to hot-add CPU to node

	$ echo nid > cpu/probe

- to hot-remove CPU

	$ echo nid > cpu/release

3) Memory hotplug emulation:

The emulator reserve memory before OS booting, the reserved memory region is remove from e820 table, and they can be hot-added via the probe interface, this interface was extend to support add memory to the specified node, It maintains backwards compatibility.

The difficulty of Memory Release is well-known, we have no plan for it until now.

- reserve memory throu grub parameter
mem=1024m

- add a memory section to node 3

    $ echo 0x40000000,3 > memory/probe
	OR
    $ echo 1024m,3 > memory/probe

* ACKNOWLEDGMENT

hotplug emulator includes a team's efforts, thanks all of them. They are:
Andi Kleen, Haicheng Li, Shaohui Zheng, Fengguang Wu and Yongkang You

Signature · 8 lines
Thanks & Regards,
Shaohui

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#3 lore raw
In reply to Shaohui Zheng
Quoted 12 lines · Shaohui Zheng

Hi, All
This patchset introduces NUMA hotplug emulator for x86. it refers too
many files and might introduce new bugs, so we send a RFC to comminity first and expect comments and suggestions, thanks.

* WHAT IS HOTPLUG EMULATOR

NUMA hotplug emulator is collectively named for the hotplug emulation it is able to emulate NUMA Node Hotplug thru a pure software way. It intends to help people easily debug and test node/cpu/memory hotplug related stuff on a none-numa-hotplug-support machine, even an UMA machine.

Quoted 5 lines

The emulator provides mechanism to emulate the process of physcial cpu/mem hotadd, it provides possibility to debug CPU and memory hotplug on the machines without NUMA support for kenrel developers. It offers an interface for cpu and memory hotplug test purpose.

Sounds like an interesting project, could you please

Post your patches as threaded, ideally having 0/7 to 7/7 in a thread helps track the patches and comments.

Signature · 8 lines
	Three Cheers,
	Balbir

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#4 lore raw
Quoted 20 lines · Balbir Singh
Quoted 12 lines · Shaohui Zheng

Hi, All
This patchset introduces NUMA hotplug emulator for x86. it refers too
many files and might introduce new bugs, so we send a RFC to comminity first and expect comments and suggestions, thanks.

* WHAT IS HOTPLUG EMULATOR

NUMA hotplug emulator is collectively named for the hotplug emulation it is able to emulate NUMA Node Hotplug thru a pure software way. It intends to help people easily debug and test node/cpu/memory hotplug related stuff on a none-numa-hotplug-support machine, even an UMA machine.

Quoted 5 lines

The emulator provides mechanism to emulate the process of physcial cpu/mem hotadd, it provides possibility to debug CPU and memory hotplug on the machines without NUMA support for kenrel developers. It offers an interface for cpu and memory hotplug test purpose.

Quoted 8 lines

Sounds like an interesting project, could you please

Post your patches as threaded, ideally having 0/7 to 7/7 in a thread helps track the patches and comments.

Signature · 2 lines
	Three Cheers,
	Balbir

Sorry for the late response, I have no experience to post all the patches into one thread, I will consult local expert.

Thanks Balbir, because of your guys's feedbacks and review comments, the code quality should be guaranteed.

Signature · 8 lines
Thanks & Regards,
Shaohui

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#5 lore raw
In reply to Shaohui Zheng

Hi,

Quoted 5 lines · Shaohui Zheng

Hi, All
This patchset introduces NUMA hotplug emulator for x86. it refers too
many files and might introduce new bugs, so we send a RFC to comminity first and expect comments and suggestions, thanks.

<snip>

Quoted 19 lines

* Principles & Usages

NUMA hotplug emulator include 3 different parts, We add a menu item to the menuconfig to enable/disable them
(Refer to http://shaohui.org/images/hpe-krnl-cfg.jpg)

1) Node hotplug emulation:

The emulator firstly hides RAM via E820 table, and then it can fake offlined nodes with the hidden RAM.

After system bootup, user is able to hotplug-add these offlined nodes, which is just similar to a real hotplug hardware behavior.

Using boot option "numa=hide=N*size" to fake offlined nodes:
- N is the number of hidden nodes
- size is the memory size (in MB) per hidden node.

Quoted 9 lines

There is a sysfs entry "probe" under /sys/devices/system/node/ for user to hotplug the fake offlined nodes:

- to show all fake offlined nodes:

    $ cat /sys/devices/system/node/probe

- to hotadd a fake offlined node, e.g. nodeid is N:

    $ echo N > /sys/devices/system/node/probe

I tried the patchset on a non-NUMA machine. So, inorder to create fake NUMA nodes and be able to emulate the hotplug behavior, I used the following commandline:

	"numa=fake=4  numa=hide=2*2048"

on a machine with 8G memory. I expected to see 4 nodes, out of which 2 would be hidden. However, the system comes up the 4 online nodes and 2 offline nodes (thus a total of 6 nodes). While we could decide this to be the semantics, however, I feel that numa=fake should define the total number of nodes. So in the above case, the system should have come up with 2 online nodes and 2 offline nodes.

Also, "numa=hide=N" could also be supported, with the size of the hidden nodes being equal to the entire size of the node, with or without numa=fake parameter.

On onlining one of the offline nodes, I see another issue that the memory under it is not automatically brought online. For example:

#ls /sys/devices/system/node
.... node0 node1 node2..

#cat /sys/devices/system/node/probe
3

#echo 3 > /sys/devices/system/node/probe
#ls /sys/devices/system/node
.... node0 node1 node2 node3

#cat /sys/devices/system/node/node3/meminfo

Node 3 MemTotal:              0 kB
Node 3 MemFree:               0 kB
Node 3 MemUsed:               0 kB
Node 3 Active:                0 kB

......

i.e, as memory-less nodes. However, these nodes were designated to have memory. So, on onlining the nodes, maybe we could have all their memory brought into online state as well ?

Signature · 11 lines
Regards,                                                                        
Ankita Garg ([email protected])                                                 
Linux Technology Center                                                         
IBM India Systems & Technology Labs,                                            
Bangalore, India

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#6 lore raw
Quoted 5 lines · Ankita Garg

I tried the patchset on a non-NUMA machine. So, inorder to create fake NUMA nodes and be able to emulate the hotplug behavior, I used the following commandline:

Quoted 8 lines
	"numa=fake=4  numa=hide=2*2048"

on a machine with 8G memory. I expected to see 4 nodes, out of which 2 would be hidden. However, the system comes up the 4 online nodes and 2 offline nodes (thus a total of 6 nodes). While we could decide this to be the semantics, however, I feel that numa=fake should define the total number of nodes. So in the above case, the system should have come up with 2 online nodes and 2 offline nodes.

Ankita,
it is the expected result, NUMA_EMU and NUMA_HOTPLUG_EMU are 2 different
features, there is no dependency between the 2 features. Even if you disable NUMA_EMU, the hotplug emualation still working, this implementatin reduces the dependency, it make things simple and easy to understand.
You concern makes sense in semantices, but we do not pefer to combine 2
independent modules together.

Quoted 23 lines

Also, "numa=hide=N" could also be supported, with the size of the hidden nodes being equal to the entire size of the node, with or without numa=fake parameter.

On onlining one of the offline nodes, I see another issue that the memory under it is not automatically brought online. For example:

#ls /sys/devices/system/node
.... node0 node1 node2..

#cat /sys/devices/system/node/probe
3

#echo 3 > /sys/devices/system/node/probe
#ls /sys/devices/system/node
.... node0 node1 node2 node3

#cat /sys/devices/system/node/node3/meminfo

Node 3 MemTotal:              0 kB
Node 3 MemFree:               0 kB
Node 3 MemUsed:               0 kB
Node 3 Active:                0 kB
Quoted 5 lines

......

i.e, as memory-less nodes. However, these nodes were designated to have memory. So, on onlining the nodes, maybe we could have all their memory brought into online state as well ?

it is the same result with the real implemetation for memory hotplug in linux
kernel, when we hot-add physical memory into machine, the linux kernel create
the memory entires and create the related data structure, but the OS will never
online the memory, it should finish in user space.

the node hotplug emulation and memory hotplug emualtioni feature follows up the same rules with the kernel.

As we know, when we allocate memory from a memory-less node, it will cause a OOM issue, Some engineer is already focus on this bug. Because of the OOM issue can be reproduced with the hotplug emulator, it helps the engineer so much.

This feature is flexible. As I know, Some OSV already online the hotplug memory automatically, if the mainline kernel decide do the same thing, we will change the related code, too.

Quoted 7 lines
Signature · 6 lines
-- 
Regards,                                                                        
Ankita Garg ([email protected])                                                 
Linux Technology Center                                                         
IBM India Systems & Technology Labs,                                            
Bangalore, India
Signature · 8 lines
Thanks & Regards,
Shaohui

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>