[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <201106212055.25400.nai.xia@gmail.com>
Date: Tue, 21 Jun 2011 20:55:25 +0800
From: Nai Xia <nai.xia@...il.com>
To: Andrew Morton <akpm@...ux-foundation.org>
Cc: Izik Eidus <izik.eidus@...ellosystems.com>,
Andrea Arcangeli <aarcange@...hat.com>,
Hugh Dickins <hughd@...gle.com>,
Chris Wright <chrisw@...s-sol.org>,
Rik van Riel <riel@...hat.com>,
"linux-mm" <linux-mm@...ck.org>,
Johannes Weiner <hannes@...xchg.org>,
"linux-kernel" <linux-kernel@...r.kernel.org>
Subject: [PATCH 0/2 V2] ksm: take dirty bit as reference to avoid volatile pages scanning
Compared to the first version, this patch set addresses the problem of
dirty bit updating of virtual machines, by adding two mmu_notifier interfaces.
So it can now track the volatile working set inside KVM guest OS.
V1 log:
Currently, ksm uses page checksum to detect volatile pages. Izik Eidus
suggested that we could use pte dirty bit to optimize. This patch series
adds this new logic.
Preliminary benchmarks show that the scan speed is improved by up to 16
times on volatile transparent huge pages and up to 8 times on volatile
regular pages.
Following is the test program to show this top speed up (you need to make
ksmd takes about more than 90% of the cpu and watch the ksm/full_scans).
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#define MADV_MERGEABLE 12
#define SIZE (2000*1024*1024)
#define PAGE_SIZE 4096
int main(int argc, char **argv)
{
unsigned char *p;
int j;
int ret;
p = mmap(NULL, SIZE, PROT_WRITE|PROT_READ,
MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
if (p == MAP_FAILED) {
printf("mmap error\n");
return 0;
}
ret = madvise(p, SIZE, MADV_MERGEABLE);
if (ret==-1) {
printf("madvise failed \n");
return 0;
}
memset(p, 1, SIZE);
while (1) {
for (j=0; j<SIZE; j+=PAGE_SIZE) {
*((long*)(p+j+PAGE_SIZE-4)) = random();
}
}
return 0;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists