From: Seth Jennings <sjenning@linux.vnet.ibm.com>
To: gregkh@suse.de
Cc: dan.magenheimer@oracle.com, ngupta@vflare.org,
cascardo@holoscopio.com, devel@driverdev.osuosl.org,
linux-kernel@vger.kernel.org, rdunlap@xenotime.net,
linux-mm@kvack.org, rcj@linux.vnet.ibm.com,
dave@linux.vnet.ibm.com, brking@linux.vnet.ibm.com,
Seth Jennings <sjenning@linux.vnet.ibm.com>
Subject: [PATCH v2 0/3] staging: zcache: xcfmalloc support
Date: Wed, 7 Sep 2011 09:09:04 -0500 [thread overview]
Message-ID: <1315404547-20075-1-git-send-email-sjenning@linux.vnet.ibm.com> (raw)
Changelog:
v2: fix bug in find_remove_block()
fix whitespace warning at EOF
This patchset introduces a new memory allocator for persistent
pages for zcache. The current allocator is xvmalloc. xvmalloc
has two notable limitations:
* High (up to 50%) external fragmentation on allocation sets > PAGE_SIZE/2
* No compaction support which reduces page reclaimation
xcfmalloc seeks to fix these issues by using scatter-gather model that
allows for cross-page allocations and relocatable data blocks.
In tests, with pages that only compress to 75% of their original
size, xvmalloc had an effective compression (pages stored / pages used by the
compressed memory pool) of ~95% (~20% lost to fragmentation). Almost nothing
was gained by the compression in this case. xcfmalloc had an effective
compression of ~77% (about ~2% lost to fragmentation and metadata overhead).
xcfmalloc uses the same locking scheme as xvmalloc; a single pool-level
spinlock. This can lead to some contention. However, in my tests on a 4
way SMP system, the contention was minimal (200 contentions out of 600k
aquisitions). The locking scheme may be able to be improved in the future.
In tests, xcfmalloc and xvmalloc had identical throughputs.
While the xcfmalloc design lends itself to compaction, this is not yet
implemented. Support will be added in a follow-on patch.
Based on 3.1-rc4.
=== xvmalloc vs xcfmalloc ===
Here are some comparison metrics vs xvmalloc. The tests were done on
a 32-bit system in a a cgroup with a memory.limit_in_bytes of 256MB.
I ran a program that allocates 512MB, one 4k page a time. The pages
can be filled with zeros or text depending on the command arguments.
The text is english text that has an average compression ratio, using
lzo1x, of 75% with little deviation. zv_max_mean_zsize and zv_max_zsize are
both set to 3584 (7 * PAGE_SIZE / 8).
xvmalloc
curr_pages zv_page_count effective compression
zero filled 65859 1269 1.93%
text (75%) 65925 65892 99.95%
xcfmalloc (descriptors are 24 bytes, 170 per 4k page)
curr_pages zv_page_count zv_desc_count effective compression
zero filled 65845 2068 65858 3.72% (+1.79)
text (75%) 65965 50848 114980 78.11% (-21.84)
This shows that xvmalloc is 1.79 points better on zero filled pages.
This is because xcfmalloc has higher internal fragmentation because
the block sizes aren't as granular as xvmalloc. This contributes
to 1.21 points of the delta. xcfmalloc also has block descriptors,
which contributes to the remaining 0.58 points.
It also shows that xcfmalloc is 21.84 points better on text filled
pages. This is because of xcfmalloc allocations can span different
pages which greatly reduces external fragmentation compared to xvmalloc.
I did some quick tests with "time" using the same program and the
timings are very close (3 run average, little deviation):
xvmalloc:
zero filled 0m0.852s
text (75%) 0m14.415s
xcfmalloc:
zero filled 0m0.870s
text (75%) 0m15.089s
I suspect that the small decrease in throughput is due to the
extra memcpy in xcfmalloc. However, these timing, more than
anything, demonstrate that the throughput is GREATLY effected
by the compressibility of the data.
In all cases, all swapped pages where captured by frontswap with
no put failures.
Seth Jennings (3):
staging: zcache: xcfmalloc memory allocator for zcache
staging: zcache: replace xvmalloc with xcfmalloc
staging: zcache: add zv_page_count and zv_desc_count
drivers/staging/zcache/Makefile | 2 +-
drivers/staging/zcache/xcfmalloc.c | 652 ++++++++++++++++++++++++++++++++++
drivers/staging/zcache/xcfmalloc.h | 28 ++
drivers/staging/zcache/zcache-main.c | 154 ++++++---
4 files changed, 789 insertions(+), 47 deletions(-)
create mode 100644 drivers/staging/zcache/xcfmalloc.c
create mode 100644 drivers/staging/zcache/xcfmalloc.h
--
1.7.4.1
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next reply other threads:[~2011-09-07 14:11 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-07 14:09 Seth Jennings [this message]
2011-09-07 14:09 ` [PATCH v2 1/3] staging: zcache: xcfmalloc memory allocator for zcache Seth Jennings
2011-09-07 14:09 ` [PATCH v2 2/3] staging: zcache: replace xvmalloc with xcfmalloc Seth Jennings
2011-09-07 14:09 ` [PATCH v2 3/3] staging: zcache: add zv_page_count and zv_desc_count Seth Jennings
2011-09-09 20:34 ` [PATCH v2 0/3] staging: zcache: xcfmalloc support Greg KH
2011-09-10 2:41 ` Nitin Gupta
2011-09-12 14:35 ` Seth Jennings
2011-09-13 1:55 ` Nitin Gupta
2011-09-13 15:58 ` Seth Jennings
2011-09-13 21:18 ` Nitin Gupta
2011-09-15 16:31 ` Seth Jennings
2011-09-15 17:29 ` Dan Magenheimer
2011-09-15 19:24 ` Seth Jennings
2011-09-15 20:07 ` Dan Magenheimer
2011-10-03 15:59 ` Dave Hansen
2011-10-03 17:54 ` Nitin Gupta
2011-10-03 18:22 ` Dave Hansen
2011-10-05 1:03 ` Dan Magenheimer
2011-09-15 22:17 ` Dave Hansen
2011-09-15 22:27 ` Dan Magenheimer
2011-09-16 17:36 ` Nitin Gupta
2011-09-16 17:52 ` Nitin Gupta
2011-09-16 17:46 ` Nitin Gupta
2011-09-16 18:33 ` Seth Jennings
2011-11-01 17:30 ` Dave Hansen
2011-11-01 18:35 ` Dan Magenheimer
2011-11-02 2:42 ` Nitin Gupta
2011-09-29 17:47 ` Seth Jennings
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1315404547-20075-1-git-send-email-sjenning@linux.vnet.ibm.com \
--to=sjenning@linux.vnet.ibm.com \
--cc=brking@linux.vnet.ibm.com \
--cc=cascardo@holoscopio.com \
--cc=dan.magenheimer@oracle.com \
--cc=dave@linux.vnet.ibm.com \
--cc=devel@driverdev.osuosl.org \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ngupta@vflare.org \
--cc=rcj@linux.vnet.ibm.com \
--cc=rdunlap@xenotime.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).