From: Andrzej Hajda <a.hajda@samsung.com>
To: linux-mm@kvack.org
Cc: Andrzej Hajda <a.hajda@samsung.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
linux-kernel@vger.kernel.org
Subject: [RFC PATCH 0/4] kstrdup optimization
Date: Mon, 29 Dec 2014 15:48:26 +0100 [thread overview]
Message-ID: <1419864510-24834-1-git-send-email-a.hajda@samsung.com> (raw)
Hi,
kstrdup if often used to duplicate strings where neither source neither
destination will be ever modified. In such case we can just reuse the source
instead of duplicating it. The problem is that we must be sure that
the source is non-modifiable and its life-time is long enough.
I suspect the good candidates for such strings are strings located in kernel
.rodata section, they cannot be modifed because the section is read-only and
their life-time is equal to kernel life-time.
This small patchset proposes alternative version of kstrdup - kstrdup_const,
which returns source string if it is located in .rodata otherwise it fallbacks
to kstrdup.
To verify if the source is in .rodata function checks if the address is between
sentinels __start_rodata, __end_rodata, I think it is OK, but maybe sombebody
with deeper knowledge can say if it is OK for all supported architectures and
configuration options.
The main patch is accompanied by three patches constifying kstrdup for cases
where situtation described above happens frequently.
The patchset is based on next-20141226.
As I have tested it on mobile platform (exynos4210-trats) it saves above 2600
string duplications. Below simple stats about the most frequent duplications:
Count String
880 power
874 subsystem
130 device
126 parameters
61 iommu_group
40 driver
28 bdi
28 none
25 sclk_mpll
23 sclk_usbphy0
23 sclk_hdmi24m
23 xusbxti
22 sclk_vpll
22 sclk_epll
22 xxti
20 sclk_hdmiphy
11 aclk100
Regards
Andrzej
Andrzej Hajda (4):
mm/util: add kstrdup_const
kernfs: use kstrdup_const for node name allocation
clk: use kstrdup_const for clock name allocations
mm/slab: use kstrdup_const for allocating cache names
drivers/clk/clk.c | 12 ++++++------
fs/kernfs/dir.c | 12 ++++++------
include/linux/string.h | 3 +++
mm/slab_common.c | 6 +++---
mm/util.c | 22 ++++++++++++++++++++++
5 files changed, 40 insertions(+), 15 deletions(-)
--
1.9.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/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next reply other threads:[~2014-12-29 14:50 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-29 14:48 Andrzej Hajda [this message]
2014-12-29 14:48 ` [RFC PATCH 1/4] mm/util: add kstrdup_const Andrzej Hajda
2014-12-29 14:48 ` [RFC PATCH 2/4] kernfs: use kstrdup_const for node name allocation Andrzej Hajda
2014-12-29 14:48 ` [RFC PATCH 3/4] clk: use kstrdup_const for clock name allocations Andrzej Hajda
2014-12-29 14:48 ` [RFC PATCH 4/4] mm/slab: use kstrdup_const for allocating cache names Andrzej Hajda
2014-12-30 6:45 ` [RFC PATCH 0/4] kstrdup optimization Andi Kleen
2014-12-30 7:16 ` Andrzej Hajda
2014-12-30 8:32 ` Andreas Mohr
2014-12-30 21:29 ` Andi Kleen
2015-01-08 10:54 ` Andrzej Hajda
2014-12-31 13:05 ` Andrzej Hajda
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=1419864510-24834-1-git-send-email-a.hajda@samsung.com \
--to=a.hajda@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=m.szyprowski@samsung.com \
/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