Memory hotplug - Problem Statement and Scope. Problem Statement: The ability to add and remove memory while the system is up and running is extremely useful for several reasons. It is an important feature for data centers and high-end system because it provides RAS support (reliability, availability, serviceability) by allowing replacement of failing memory without any down time. Memory hotplug also allows for dynamic partitioning where memory can be moved from one partition to the other as the need occurs. Also to accommodate customers' growth predictions while avoiding the upfront cost the use of memory hotplug in Instant Capacity on Demand is very valued. Last but not least the growing area of virtualization were the hardware resources are distributed among several virtual machines make heavy use of hotplugging. There are different levels of difficulty in the removal of memory depending on the use of the memory one is considering; for example, user memory is a lot easier to deal with than kernel memory. Also because of its nature any operation done on a portion of the memory has potential repercussions on the whole system's stability and performance. The Linux memory hotplug community has first focused on the problem of adding more memory. The code to support memory add is written and is currently being submitted into mainline. Regression, integration and performance testing will need to be done. The more difficult problem of memory removal is still in the development phase. In order to allow for memory to be removed one has to first migrate its content to a new memory location with no or minimal disruption to the overall system. Depending on the type of memory that needs to be removed this task can be very challenging. As the code gets developed regression testing is crucial; integration and performance testing will be done as well as the progress in implementation code allows for it. Up-to-date documentation from a developer and user point-of-view needs to be written. Scope: The scope of this project is to evaluate the stability and effectiveness of memory hotplug as it applies in various situations such as 1) support for Reliability/Availability by providing a mechanism to replace defective memory, 2) support for dynamic partitioning by allowing transfer of a physical system resource from partition to another partition in order to accommodate work loads needs 3) support for memory add and remove to meet the need of virtual machines (virtualization applications), 4) support for Instant Capacity on Demand to allow for memory physically present in a system to be onlined as needed. The tasks involved in achieving this include: 1) contributing to the community efforts to implement memory hotplug by submitting code, 2) performing regression testing on a continuous basis to track the impact on the latest submits to the stability and correctness of the code, 3) performing integration testing to verify that the code changes for memory hotplug do not adversely impact other parts of the kernel and vice-versa, 4) performing performance testing to verify how the memory hotplug code affect the overall performance of the kernel 5) providing documentation for developers to understand the implementation details and choices and for user to learn how to use that feature. It is important to note that all types of memory no matter what their use (user, DMA, kernel, etc) will be considered as well as all types of memory architectures (SMP, NUMA).