Page MenuHomeFreeBSD

Reduce object locking in vm_fault. The object is only needed until we have an exclusive busy.
ClosedPublic

Authored by jeff on Jan 4 2020, 8:26 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sun, May 5, 5:25 PM
Unknown Object (File)
Sun, Apr 28, 5:41 AM
Unknown Object (File)
Thu, Apr 25, 9:03 PM
Unknown Object (File)
Mar 9 2024, 1:39 AM
Unknown Object (File)
Jan 18 2024, 11:33 AM
Unknown Object (File)
Jan 13 2024, 2:27 AM
Unknown Object (File)
Dec 20 2023, 7:17 AM
Unknown Object (File)
Nov 21 2023, 9:06 AM
Subscribers

Details

Summary

This drastically shortens maximum hold times on object locks in fault. We will basically only hold it through page allocation. It also eliminates some ugly lock/unlock/relock style code.

I intend to continue to refactor fault into smaller functions but I wanted to introduce the locking change first since it has the largest functional impact.

Diff Detail

Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 28481
Build 26542: arc lint + arc unit

Event Timeline

jeff added reviewers: alc, dougm, kib, markj.
jeff set the repository for this revision to rS FreeBSD src repository - subversion.
sys/vm/vm_fault.c
340

We could almost drop the lock before pmap_enter() but we are relying on it to prevent invalidation of pages for read-only faults.

633

I don't really like this but my only other option is to perhaps make this bool part of the fault_state.

962

Default objects hold the lock for the full duration.

1114

I don't like the extra label but I am continuing to break this function up and simplify control flow in later patches.

1210

Fixed indentation while adding the extra TRYWLOCK.

1462

This is actually a fairly substantial win.

sys/vm/vm_fault.c
337

So we potentially dirty the object even despite the pmap_enter() could fail, same for prefault.

962

This explanation should be added to the comment, perhaps ?

1185

'A valid page has been found, busied by us' (modulo my english).

1210

And remove useless () around conditions while there, please.

sys/vm/vm_fault.c
337

Yeah it's safe to move this down. I can do so.

1185

A valid page has been found and exclusively busied.

1210

will do.

Review feedback. Mostly style and comments. Re-shuffle vm_fault_soft_fast() to properly handle the error case.

This revision is now accepted and ready to land.Jan 13 2020, 8:39 PM