On Tue, Mar 19, 2024 at 02:32:17PM -0400, Gregory Price wrote:
On Tue, Mar 19, 2024 at 06:20:33PM +0000, Matthew Wilcox wrote:
On Tue, Mar 19, 2024 at 02:14:33PM -0400, Gregory Price wrote:
On Tue, Mar 19, 2024 at 05:52:46PM +0000, Matthew Wilcox wrote:
On Tue, Mar 19, 2024 at 01:26:09PM -0400, Gregory Price wrote:
Implement simple ktest that looks up the physical address via /proc/self/pagemap and migrates the page based on that information.
What? LOL. No.
Certainly the test is stupid and requires admin, but I could not come up an easier test to demonstrate the concept - and the docs say to include a test with all syscall proposals.
Am I missing something else important? (stupid question: of course I am, but alas I must ask it)
It's not that the test is stupid. It's the concept that's stupid.
Ok i'll bite.
The 2 major ways page-hotness is detected right now is page-faults (induced or otherwise) and things like IBS/PEBS.
page-faults cause overhead, and IBS/PEBS actually miss upwards of ~66% of all traffic (if you want the details i can dig up the presentation, but TL;DR: prefetcher traffic is missed entirely).
so OCP folks have been proposing hotness-tracking offloaded to the memory devices themselves:
https://www.opencompute.org/documents/ocp-cms-hotness-tracking-requirements-...
(it's come along further than this white paper, but i need to dig up the new information).
These devices are incapable of providing virtual addressing information, and doing reverse lookups of addresses is inordinately expensive from user space. This leaves: Do it all in a kernel task, or give user space an an interface to operate on data provided by the device.
The syscall design is mostly being posted right now to collaborate via public channels, but if the idea is so fundamentally offensive then i'll drop it and relay the opinion accordingly.
The syscall design is wrong. Exposing physical addresses to userspace is never the right answer. Think rowhammer.
I'm vehemently opposed to all of the bullshit around CXL. However, if you are going to propose something, it should be based around an abstraction. Say "We have 8 pools of memory. This VMA is backed by memory from pools 3 & 6. The relative hotness of the 8 pools are <vector>. The quantities of memory in the 8 ppols are <vector>". And then you can say "migrate this range of memory to pool 2".
That's just an initial response to the idea. I refuse to invest a serious amount of time in a dead-end idea like CXL memory pooling.