Skip to content

Commit

Permalink
shmem: implement manual anon shared memory dedup
Browse files Browse the repository at this point in the history
We use the same dumping and restoring mechanism for anon private and
anon shared memory. Because of this we can implement manual deduplication
of shared anon memory the same way we do it with private anonymous memory.
Also we need to rename pid parameter of cr_dedup_one_pagemap to id because
now we can pass either pid or shmid there and the actual meaning depends
on flags: PR_TASK is for pid, PR_SHMEM is for shmid.

Signed-off-by: Fyodor Bocharov <bocharovfedor@gmail.com>
Signed-off-by: Eugene Batalov <eabatalov89@gmail.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
  • Loading branch information
fbocharov authored and xemul committed Aug 23, 2016
1 parent 127d0e3 commit 502e755
Showing 1 changed file with 16 additions and 7 deletions.
23 changes: 16 additions & 7 deletions criu/cr-dedup.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
#include "pagemap.h"
#include "restorer.h"

static int cr_dedup_one_pagemap(int pid);
static int cr_dedup_one_pagemap(int id, int flags);

int cr_dedup(void)
{
int close_ret, ret = 0;
int pid;
int id;
DIR * dirp;
struct dirent *ent;

Expand All @@ -35,10 +35,18 @@ int cr_dedup(void)
break;
}

ret = sscanf(ent->d_name, "pagemap-%d.img", &pid);
ret = sscanf(ent->d_name, "pagemap-%d.img", &id);
if (ret == 1) {
pr_info("pid=%d\n", pid);
ret = cr_dedup_one_pagemap(pid);
pr_info("pid=%d\n", id);
ret = cr_dedup_one_pagemap(id, PR_TASK);
if (ret < 0)
break;
}

ret = sscanf(ent->d_name, "pagemap-shmem-%d.img", &id);
if (ret == 1) {
pr_info("shmid=%d\n", id);
ret = cr_dedup_one_pagemap(id, PR_SHMEM);
if (ret < 0)
break;
}
Expand All @@ -58,14 +66,15 @@ int cr_dedup(void)
return 0;
}

static int cr_dedup_one_pagemap(int pid)
static int cr_dedup_one_pagemap(int id, int flags)
{
int ret;
struct page_read pr;
struct page_read * prp;
struct iovec iov;

ret = open_page_read(pid, &pr, PR_TASK | PR_MOD);
flags |= PR_MOD;
ret = open_page_read(id, &pr, flags);
if (ret <= 0)
return -1;

Expand Down

0 comments on commit 502e755

Please sign in to comment.