[lkml]   [2012]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [PATCH 0/6] page cgroup diet v5
    On Fri, 17 Feb 2012 18:24:26 +0900
    KAMEZAWA Hiroyuki <> wrote:

    > This patch set is for removing 2 flags PCG_FILE_MAPPED and PCG_MOVE_LOCK on
    > page_cgroup->flags. After this, page_cgroup has only 3bits of flags.
    > And, this set introduces a new method to update page status accounting per memcg.
    > With it, we don't have to add new flags onto page_cgroup if 'struct page' has
    > information. This will be good for avoiding a new flag for page_cgroup.
    > Fixed pointed out parts.
    > - added more comments
    > - fixed texts
    > - removed redundant arguments.
    > Passed some tests on 3.3.0-rc3-next-20120216.

    Here is a micro benchmark test before/after this series.
    mmap 1G bytes twice and repeat fault->drop repeatedly. (test program is attached)

    == Before == 3 runs after 1st run
    [root@bluextal test]# time ./mmap 1G

    real 0m21.053s
    user 0m6.046s
    sys 0m14.743s
    [root@bluextal test]# time ./mmap 1G

    real 0m21.302s
    user 0m6.027s
    sys 0m14.979s
    [root@bluextal test]# time ./mmap 1G

    real 0m21.061s
    user 0m6.020s
    sys 0m14.722s

    == After == 3 runs after 1st run
    [root@bluextal test]# time ./mmap 1G

    real 0m20.969s
    user 0m5.960s
    sys 0m14.777s
    [root@bluextal test]# time ./mmap 1G

    real 0m20.968s
    user 0m6.069s
    sys 0m14.650s
    [root@bluextal test]# time ./mmap 1G

    real 0m21.164s
    user 0m6.152s
    sys 0m14.707s

    I think there is no regression.


    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <sys/mman.h>
    #include <fcntl.h>

    void reader(int fd, int size)
    int i, off, x;
    char *addr;

    addr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
    for (i = 0; i < 100; i++) {
    for(off = 0; off < size; off += 4096) {
    x += *(addr + off);
    madvise(addr, size, MADV_DONTNEED);

    int main(int argc, char *argv[])
    int fd;
    char *addr, *c;
    unsigned long size;
    struct stat statbuf;

    fd = open(argv[1], O_RDONLY);
    if (fd < 0) {
    perror("cannot open file");
    return 1;

    if (fstat(fd, &statbuf)) {
    perror("fstat failed");
    return 1;
    size = statbuf.st_size;
    /* mmap in 2 place. */
    addr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
    mlock(addr, size);
    reader(fd, size);
     \ /
      Last update: 2012-02-17 11:09    [W:0.028 / U:31.684 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site