Tauist. Bit twiddler. Advocate for continued logarithms.
User Details
- User Since
- Jun 30 2017, 3:18 PM (379 w, 1 d)
Yesterday
Rename *_iter( functions to *_iter_init. Though I'd swear I'd done that once already.
Add pctrie_replace to the set of functions taking a hassmr parameter.
Revert changes from the last update to subr_pctrie.c, since, as @alc points out, those changes are not the topic of this change. Let's save all the unrelated subr_pctrie complaints for a different change.
Get a complete version of the iter_insert_lookup here, with hassmr.
Fri, Oct 4
Rewrite the sb->p checks in meta_build to match the arrangement of the MPASS after the allocated label.
Address all the concerns expressed so far.
Add a missing function argument.
Copy @alc's edit.
Avoid checking the same page for validity twice, at the cost of finding the next page when it might turn out not to matter.
Wed, Oct 2
Fix some sloppiness.
Mon, Sep 30
Sun, Sep 29
Reset the page iterator too.
Update to account for overlapping changes to swap_pager.c. Address comments from @alc. Drop variable 'pi'.
Sat, Sep 28
Fri, Sep 27
What exactly do you mean by "freeing"? I wouldn't expect this patch on its own to affect how fast we can free pages, or is this including your other iterator patches?
With this patch:
{F96917947}
I compared the cycles consumed freeing 1000000 pages without and with this patch. The results from ministat:
My concern with this is that if the argument n to the macro has side effects, they will be effected twice. I don't find examples of that in the kernel, though I do find somewhere that n is a function call, so that a function would be invoked twice.
Wed, Sep 25
A performance test. With this patch {F96492700}, which computes stats on calls to swp_pager_meta_free, I ran all 8 stress2 swap tests, recording the stats immediately before and aofter the tests. The stats are 'cycles', 'calls', and 'pages' (freed). The results are:
Tue, Sep 24
Address @alc feedback.
Mon, Sep 23
Update the patch to reflect the changes already checked in to main to address the last couple of comments.
Let the assertion remain.
Define no-radix-tree-modification versions of vm_page_remove and vm_page_free and use them.
Sun, Sep 22
Undo the last non-whitespace change, since it breaks swap_pager_find_least by possibly creating an empty block.
Address @markj concerns.
Apply iterators to vm_kern.c:_kmem_unback.
Sat, Sep 21
Process vm_object_collapse_scan similarly.
Fri, Sep 20
Thu, Sep 19
Wed, Sep 18
Back out one change that isn't ripe yet, as it depends on other changes not yet offered for review.
Mon, Sep 16
Incorporate changes from comments-only commit. Fix calculation of initial start value.
Sun, Sep 15
Accept as many suggestions as possible, but without defining a FOREACH macro.
Move pctrie_iter struct declaration in vm_page.h.
This proposal proved much less popular with its intended audience than I anticipated.
Incorporate meta_transfer changes. Use blk.index for sp->p in several places. Compute 'start' more simply.
Sat, Sep 14
Address @alc feedback.
Fri, Sep 13
Use a bitmask. Scope the bitmask outside of the loop to avoid reinitializing to zero.
A version without bitmasking. Perhaps this is acceptable?