All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: Minor page faults from memory compaction causing in-band transitions
@ 2026-05-04 17:52 Jay Sridharan
  2026-05-06  7:40 ` Philippe Gerum
  0 siblings, 1 reply; 4+ messages in thread
From: Jay Sridharan @ 2026-05-04 17:52 UTC (permalink / raw)
  To: rpm; +Cc: Brandon Ho, brho, jsridharan, xenomai

Hi Phillipe,

Let me know what you think of this patch for the docs:

diff --git a/content/core/caveat.md b/content/core/caveat.md
index b24e270..e11d605 100644
--- a/content/core/caveat.md
+++ b/content/core/caveat.md
@@ -70,6 +70,68 @@ which depend on instrumenting the spinlock constructs (e.g.
 `CONFIG_DEBUG_PREEMPT`), you may want to disable all the related kernel
 options, starting with `CONFIG_SMP`.

+### Memory compaction and page migration impact real-time behavior
{#caveat-memory-compaction}
+
+Several kernel configuration options related to memory management can
+introduce unpredictable latency through page migration and page fault
+handling, which is problematic for real-time workloads:
+
+- `CONFIG_COMPACTION`: Enables memory compaction to reduce fragmentation
+  by migrating pages to create larger contiguous memory regions. The
+  compaction process can trigger page migrations that introduce latency.
+
+- `CONFIG_MIGRATION`: Allows the migration of the physical location of
+  memory pages of processes while the virtual addresses are not changed.
+  Useful for allowing the kernel to move pages between NUMA
+  nodes or during compaction. Page migration involves copying page
+  contents and updating page table entries, which can take time, or
+  cause page faults when page table entries become temporarily unavailable.
+  The use of `mlock` or `mlockall` does **NOT** automatically guarantee
+  that a page will not be migrated. See below for more.
+
+- `CONFIG_TRANSPARENT_HUGEPAGE`: Transparent Hugepages (THP) reduces page
+  faults by mapping 2MB instead of 4KB pages, but causes higher latency
+  during faults due to intensive memory allocation and zeroing. While
+  reducing the number of faults, THP can incur higher latency during
+  initial memory access or when khugepaged compacts memory.
+
+The best approach depends on your workload characteristics. In an ideal
+situation, you would disable `CONFIG_COMPACTION`,
+`CONFIG_MIGRATION`, and `CONFIG_TRANSPARENT_HUGEPAGE` entirely. In other
+situations, you may need to keep these options enabled
+
+If you are running applications that alloc/free memory often, and/or need
+a steady source of consecutive pages, you may need to keep `CONFIG_MIGRATION`
+and `CONFIG_COMPACTION` enabled. Without it, your in-band applications may
+experience out-of-memory issues.
+
+Luckily, procfs provides tunables to control compaction behavior:
+
+- `vm.compaction_proactiveness`: determines how aggressively compaction is
+  done in the background. Write of a non zero value to this tunable will
+  immediately trigger the proactive compaction. Setting it to 0 disables
+  proactive compaction.
+- `vm.compact_unevictable_allowed`: When set to 1, compaction is allowed
+  to examine the unevictable lru (mlocked pages) for pages to compact. This
+  should be used on systems where stalls for minor page faults are an
+  acceptable trade for large contiguous free memory. Set to 0 to prevent
+  compaction from moving pages that are unevictable. On EVL, the default
+  value is 0 in order to avoid a page fault due to compaction.
+  (`CONFIG_COMPACT_UNEVICTABLE_DEFAULT`)
+
+procfs also provides an interface to manually trigger a memory compaction
+operation using `vm.compact_memory`.
+
+Using these options, you can perform a sequence such as the following to
+prime the system for reliability:
+
+- Launch EVL threads. At the end of initialization, but before
calling mlockall..
+- Trigger a memory compaction manually using `vm.compact_memory`
+- Once complete, call `mlockall` to lock pages.
+- Then, disable `vm.compact_unevictable_allowed` to prevent those pages
+  from getting migrated.
+- Finally, launch other in-band applications.
+
 ## Architecture-specific issues

 ### x86 {#x86-caveat}

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: Minor page faults from memory compaction causing in-band transitions
  2026-05-04 17:52 Minor page faults from memory compaction causing in-band transitions Jay Sridharan
@ 2026-05-06  7:40 ` Philippe Gerum
  2026-05-14 19:02   ` [PATCH] update caveat.md about memory compaction Jay Sridharan
  0 siblings, 1 reply; 4+ messages in thread
From: Philippe Gerum @ 2026-05-06  7:40 UTC (permalink / raw)
  To: Jay Sridharan; +Cc: Brandon Ho, brho, jsridharan, xenomai


Hi Jay,

Looks good to me, very useful for understanding some of the intricacies
of virtual memory management vs real-time workloads, and how to address
them. I would happily merge a commit with this information as-is.

[I noticed a couple of hiccups breaking the patch format likely due to
the MUA].

Jay Sridharan <jayasurya.sridharan@gmail.com> writes:

> Hi Phillipe,
>
> Let me know what you think of this patch for the docs:
>
> diff --git a/content/core/caveat.md b/content/core/caveat.md
> index b24e270..e11d605 100644
> --- a/content/core/caveat.md
> +++ b/content/core/caveat.md
> @@ -70,6 +70,68 @@ which depend on instrumenting the spinlock constructs (e.g.
>  `CONFIG_DEBUG_PREEMPT`), you may want to disable all the related kernel
>  options, starting with `CONFIG_SMP`.
>
> +### Memory compaction and page migration impact real-time behavior
> {#caveat-memory-compaction}

<line wrapped>

> +
> +- Launch EVL threads. At the end of initialization, but before
> calling mlockall..

<line wrapped>

-- 
Philippe.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] update caveat.md about memory compaction
  2026-05-06  7:40 ` Philippe Gerum
@ 2026-05-14 19:02   ` Jay Sridharan
  2026-05-14 19:28     ` Philippe Gerum
  0 siblings, 1 reply; 4+ messages in thread
From: Jay Sridharan @ 2026-05-14 19:02 UTC (permalink / raw)
  To: rpm; +Cc: brandonho667, brho, jayasurya.sridharan, jsridharan, xenomai

From: Jay Sridharan <jsridharan@relativityspace.com>

Thanks Phillipe - maybe try it now? First time sending in patches via email...

---
 content/core/caveat.md | 62 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)

diff --git a/content/core/caveat.md b/content/core/caveat.md
index b24e270..912b5ba 100644
--- a/content/core/caveat.md
+++ b/content/core/caveat.md
@@ -70,6 +70,68 @@ which depend on instrumenting the spinlock constructs (e.g.
 `CONFIG_DEBUG_PREEMPT`), you may want to disable all the related kernel
 options, starting with `CONFIG_SMP`.
 
+### Memory compaction and page migration impact real-time behavior {#caveat-memory-compaction}
+
+Several kernel configuration options related to memory management can
+introduce unpredictable latency through page migration and page fault
+handling, which is problematic for real-time workloads:
+
+- `CONFIG_COMPACTION`: Enables memory compaction to reduce fragmentation
+  by migrating pages to create larger contiguous memory regions. The
+  compaction process can trigger page migrations that introduce latency.
+
+- `CONFIG_MIGRATION`: Allows the migration of the physical location of
+  memory pages of processes while the virtual addresses are not changed.
+  Useful for allowing the kernel to move pages between NUMA
+  nodes or during compaction. Page migration involves copying page
+  contents and updating page table entries, which can take time, or
+  cause page faults when page table entries become temporarily unavailable.
+  The use of `mlock` or `mlockall` does **NOT** automatically guarantee
+  that a page will not be migrated. See below for more.
+
+- `CONFIG_TRANSPARENT_HUGEPAGE`: Transparent Hugepages (THP) reduces page
+  faults by mapping 2MB instead of 4KB pages, but causes higher latency
+  during faults due to intensive memory allocation and zeroing. While
+  reducing the number of faults, THP can incur higher latency during
+  initial memory access or when khugepaged compacts memory.
+
+The best approach depends on your workload characteristics. In an ideal
+situation, you would disable `CONFIG_COMPACTION`,
+`CONFIG_MIGRATION`, and `CONFIG_TRANSPARENT_HUGEPAGE` entirely. In other
+situations, you may need to keep these options enabled
+
+If you are running applications that alloc/free memory often, and/or need
+a steady source of consecutive pages, you may need to keep `CONFIG_MIGRATION`
+and `CONFIG_COMPACTION` enabled. Without it, your in-band applications may
+experience out-of-memory issues.
+
+Luckily, procfs provides tunables to control compaction behavior:
+
+- `vm.compaction_proactiveness`: determines how aggressively compaction is
+  done in the background. Write of a non zero value to this tunable will
+  immediately trigger the proactive compaction. Setting it to 0 disables
+  proactive compaction.
+- `vm.compact_unevictable_allowed`: When set to 1, compaction is allowed
+  to examine the unevictable lru (mlocked pages) for pages to compact. This
+  should be used on systems where stalls for minor page faults are an
+  acceptable trade for large contiguous free memory. Set to 0 to prevent
+  compaction from moving pages that are unevictable. On EVL, the default
+  value is 0 in order to avoid a page fault due to compaction.
+  (`CONFIG_COMPACT_UNEVICTABLE_DEFAULT`)
+
+procfs also provides an interface to manually trigger a memory compaction
+operation using `vm.compact_memory`.
+
+Using these options, you can perform a sequence such as the following to
+prime the system for reliability:
+
+- Launch EVL threads. At the end of initialization, but before calling mlockall..
+- Trigger a memory compaction manually using `vm.compact_memory`
+- Once complete, call `mlockall` to lock pages.
+- Then, disable `vm.compact_unevictable_allowed` to prevent those pages
+  from getting migrated.
+- Finally, launch other in-band applications.
+
 ## Architecture-specific issues
 
 ### x86 {#x86-caveat}
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] update caveat.md about memory compaction
  2026-05-14 19:02   ` [PATCH] update caveat.md about memory compaction Jay Sridharan
@ 2026-05-14 19:28     ` Philippe Gerum
  0 siblings, 0 replies; 4+ messages in thread
From: Philippe Gerum @ 2026-05-14 19:28 UTC (permalink / raw)
  To: Jay Sridharan; +Cc: brandonho667, brho, jsridharan, xenomai

Jay Sridharan <jayasurya.sridharan@gmail.com> writes:

> From: Jay Sridharan <jsridharan@relativityspace.com>
>
> Thanks Phillipe - maybe try it now? First time sending in patches via email...
>

Merged thanks. The changes should appear within minutes (i.e. after the CI run).

-- 
Philippe.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-05-14 19:28 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-04 17:52 Minor page faults from memory compaction causing in-band transitions Jay Sridharan
2026-05-06  7:40 ` Philippe Gerum
2026-05-14 19:02   ` [PATCH] update caveat.md about memory compaction Jay Sridharan
2026-05-14 19:28     ` Philippe Gerum

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.