Re: [RFC PATCH 0/6] Add support for shared PTEs across processes

From: Khalid Aziz
Date: Tue Jan 18 2022 - 17:52:40 EST


On 1/18/22 15:06, Dave Hansen wrote:
On 1/18/22 1:19 PM, Khalid Aziz wrote:
This is a proposal to implement a mechanism in kernel to allow
userspace processes to opt into sharing PTEs. The proposal is to add
a new system call - mshare(), which can be used by a process to
create a region (we will call it mshare'd region) which can be used
by other processes to map same pages using shared PTEs. Other
process(es), assuming they have the right permissions, can then make
the mashare() system call to map the shared pages into their address
space using the shared PTEs.

One thing that went over my head here was that this allowing sharing of
relatively arbitrary *EXISTING* regions. The mshared'd region might be
anonymous or an plain mmap()'d file. It can even be a filesystem or
device DAX mmap().

In other words, donors can (ideally) share anything. Consumers have
must use msharefs to access the donated areas.

Right?

( btw... thanks to willy for the correction on IRC.)


Hi Dave,

Consumers use msharefs only to get information on address and size of shared region. Access to the donated are does not go through msharefs. So the consumer opens the file in msharefs to read starting address and size:

fd = open("testregion", O_RDONLY);

if ((count = read(fd, &mshare_info, sizeof(mshare_info)) > 0))
printf("INFO: %ld bytes shared at addr %lx \n",
mshare_info[1], mshare_info[0]);
else
perror("read failed");

close(fd);

It then uses that information to map in the donated region:

addr = (char *)mshare_info[0];
err = syscall(MSHARE_SYSCALL, "testregion", (void *)mshare_info[0],
mshare_info[1], O_RDWR, 600);

Makes sense?

Thanks,
Khalid