On 5/29/25 19:15, Lorenzo Stoakes wrote: > If a user wishes to enable KSM mergeability for an entire process and all > fork/exec'd processes that come after it, they use the prctl() > PR_SET_MEMORY_MERGE operation. > > This defaults all newly mapped VMAs to have the VM_MERGEABLE VMA flag set > (in order to indicate they are KSM mergeable), as well as setting this flag > for all existing VMAs and propagating this across fork/exec. > > However it also breaks VMA merging for new VMAs, both in the process and > all forked (and fork/exec'd) child processes. > > This is because when a new mapping is proposed, the flags specified will > never have VM_MERGEABLE set. However all adjacent VMAs will already have > VM_MERGEABLE set, rendering VMAs unmergeable by default. > > To work around this, we try to set the VM_MERGEABLE flag prior to > attempting a merge. In the case of brk() this can always be done. > > However on mmap() things are more complicated - while KSM is not supported > for MAP_SHARED file-backed mappings, it is supported for MAP_PRIVATE > file-backed mappings. > > These mappings may have deprecated .mmap() callbacks specified which could, > in theory, adjust flags and thus KSM eligibility. > > So we check to determine whether this is possible. If not, we set > VM_MERGEABLE prior to the merge attempt on mmap(), otherwise we retain the > previous behaviour. > > This fixes VMA merging for all new anonymous mappings, which covers the > majority of real-world cases, so we should see a significant improvement in > VMA mergeability. > > For MAP_PRIVATE file-backed mappings, those which implement the > .mmap_prepare() hook and shmem are both known to be safe, so we allow > these, disallowing all other cases. > > Also add stubs for newly introduced function invocations to VMA userland > testing. > > Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> > Fixes: d7597f59d1d3 ("mm: add new api to enable ksm per process") # please no backport! > Reviewed-by: Chengming Zhou <chengming.zhou@xxxxxxxxx> > Acked-by: David Hildenbrand <david@xxxxxxxxxx> > Reviewed-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx> The commit log is much clearer to me now, thanks :) Reviewed-by: Vlastimil Babka <vbabka@xxxxxxx>