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)
Sat, Nov 23, 8:54 PM
Unknown Object (File)
Fri, Nov 15, 8:58 AM
Unknown Object (File)
Fri, Nov 15, 8:25 AM
Unknown Object (File)
Fri, Nov 15, 8:21 AM
Unknown Object (File)
Fri, Nov 15, 7:52 AM
Unknown Object (File)
Fri, Nov 15, 7:23 AM
Unknown Object (File)
Fri, Nov 8, 2:44 AM
Unknown Object (File)
Fri, Nov 8, 2:44 AM
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
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 46405
Build 43294: arc lint + arc unit

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