Page MenuHomeFreeBSD

vm_object: Modify vm_object_allocate_anon() to return OBJT_SWAP objects
ClosedPublic

Authored by markj on Jul 12 2022, 4:22 PM.
Tags
None
Referenced Files
Unknown Object (File)
Fri, Nov 8, 2:44 AM
Unknown Object (File)
Fri, Nov 8, 2:44 AM
Unknown Object (File)
Tue, Nov 5, 11:50 AM
Unknown Object (File)
Fri, Nov 1, 1:09 AM
Unknown Object (File)
Mon, Oct 28, 4:15 PM
Unknown Object (File)
Thu, Oct 17, 4:41 PM
Unknown Object (File)
Oct 15 2024, 9:36 PM
Unknown Object (File)
Oct 15 2024, 6:50 PM
Subscribers

Details

Summary

With this change, OBJT_DEFAULT objects are no longer allocated.
Instead, anonymous objects are always of type OBJT_SWAP and always have
OBJ_SWAP set.

Modify the page fault handler to check the swap block radix tree in
places where it checked for objects of type OBJT_DEFAULT. In
particular, there's no need to invoke getpages for an anonymous object
with no swap blocks assigned. It might be that we could relax this to
non-anonymous objects as well (e.g., we could perhaps avoid needlessly
calling getpages during faults on mappings of tmpfs files).

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

markj requested review of this revision.Jul 12 2022, 4:22 PM
sys/vm/vm_fault.c
235

Why do you require OBJ_ANON there?

sys/vm/vm_fault.c
235

I think it is not strictly required. Just being conservative since the fault handler previously only looked for OBJT_DEFAULT objects, and those are almost always anonymous objects. I think I would relax this check in a separate commit, if at all.

kib added inline comments.
sys/vm/vm_fault.c
235

This is not strictly equivalent to the old condition, anyway.

I see no reason to keep OBJ_ANON.

This revision is now accepted and ready to land.Jul 12 2022, 6:08 PM

In _vm_object_allocate(), initialize swp.writemappings as we do the swap block
tree.

This revision now requires review to proceed.Jul 13 2022, 1:24 PM
sys/vm/vm_fault.c
227

I would replace "does" by "can" because a copy is not certain to exist even if this function returns true.

235

I found the inclusion of OBJ_ANON here to be unexpected and confusing; in other words, it forced me to think. So, I would also argue for removing it.

Elide getpages for all swap objects with no swap blocks assigned, not just anonymous objects.

markj marked 4 inline comments as done.

Tweak the wording of fault_object_needs_getpages()'s comment.

This revision is now accepted and ready to land.Jul 14 2022, 10:03 AM