Messages in this thread | | | Date | Tue, 18 Jan 2022 15:52:12 -0700 | Subject | Re: [RFC PATCH 0/6] Add support for shared PTEs across processes | From | Khalid Aziz <> |
| |
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
| |