All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Ahern <dsa@cumulusnetworks.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Edward Cree <ec429@cantab.net>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Idea for reducing sysfs memory usage
Date: Tue, 16 Feb 2016 17:53:38 -0700	[thread overview]
Message-ID: <56C3C492.9040401@cumulusnetworks.com> (raw)
In-Reply-To: <20160217004730.GA7558@kroah.com>

On 2/16/16 5:47 PM, Greg Kroah-Hartman wrote:
> How many sysfs entries are you creating for that 20kb?  And how did you
> measure it?  If you don't access the files, the backing store is not
> allocated, saving you a lot of memory.  If you do access it, it will be
> freed later on afterward, so it's sometimes really hard to measure this
> accurately.

Using the kmem tracepoints:

perf record  -g \
-e 
kmem:kmalloc,kmem:kmem_cache_alloc,kmem:mm_page_alloc,kmem:kfree,kmem:kmem_cache_free,kmem:mm_page_free 
        -- ip link add dummy1 type dummy

First go round I painstakenly examined each allocation and location.
After that I modified perf-kmem to do the summary for me for other use 
cases.


I can forward the full notes if you want them. Here's the first few and 
last few:

################
# sysfs -- start

# directory

# device_add -> kobject_add -- register with generic layer

ip  1732 [005] 27128.556548: kmem:kmalloc: ptr=0xffff8800ba9a5d60 
bytes_req=7 bytes_alloc=32 gfp_flags=37748928
	ffffffff8113e5ce __kmalloc_track_caller ([kernel.kallsyms])
	ffffffff81116643 kstrdup ([kernel.kallsyms])
	ffffffff8111667c kstrdup_const ([kernel.kallsyms])
	ffffffff811a6bf5 __kernfs_new_node ([kernel.kallsyms])
	ffffffff811a7397 kernfs_new_node ([kernel.kallsyms])
	ffffffff811a7813 kernfs_create_dir_ns ([kernel.kallsyms])
	ffffffff811a95f0 sysfs_create_dir_ns ([kernel.kallsyms])
	ffffffff8126f76f kobject_add_internal ([kernel.kallsyms])
	ffffffff8126fa62 kobject_add ([kernel.kallsyms])
	ffffffff81319317 device_add ([kernel.kallsyms])
	ffffffff81408528 netdev_register_kobject ([kernel.kallsyms])
	ffffffff813f2cbb register_netdevice ([kernel.kallsyms])
	ffffffff81401314 rtnl_newlink ([kernel.kallsyms])

# directory

ip  1732 [005] 27128.556555: kmem:kmem_cache_alloc: 
ptr=0xffff8801399d6018 bytes_req=168 bytes_alloc=168 gfp_flags=37781696
	ffffffff8113ee09 kmem_cache_alloc ([kernel.kallsyms])
	ffffffff811a6c0e __kernfs_new_node ([kernel.kallsyms])
	ffffffff811a7397 kernfs_new_node ([kernel.kallsyms])
	ffffffff811a7813 kernfs_create_dir_ns ([kernel.kallsyms])
	ffffffff811a95f0 sysfs_create_dir_ns ([kernel.kallsyms])
	ffffffff8126f76f kobject_add_internal ([kernel.kallsyms])
	ffffffff8126fa62 kobject_add ([kernel.kallsyms])
	ffffffff81319317 device_add ([kernel.kallsyms])
	ffffffff81408528 netdev_register_kobject ([kernel.kallsyms])
	ffffffff813f2cbb register_netdevice ([kernel.kallsyms])
	ffffffff81401314 rtnl_newlink ([kernel.kallsyms])

# device_add -> device_create_file(dev, &dev_attr_uevent) --> 
sysfs_create_file(&dev->kobj, &attr->attr)

ip  1732 [005] 27128.556583: kmem:kmem_cache_alloc: 
ptr=0xffff8801399d60c0 bytes_req=168 bytes_alloc=168 gfp_flags=37781696
	ffffffff8113ee09 kmem_cache_alloc ([kernel.kallsyms])
	ffffffff811a6c0e __kernfs_new_node ([kernel.kallsyms])
	ffffffff811a7397 kernfs_new_node ([kernel.kallsyms])
	ffffffff811a8ac7 __kernfs_create_file ([kernel.kallsyms])
	ffffffff811a9310 sysfs_add_file_mode_ns ([kernel.kallsyms])
	ffffffff811a9370 sysfs_create_file_ns ([kernel.kallsyms])
	ffffffff81317f3b device_create_file ([kernel.kallsyms])
	ffffffff81319342 device_add ([kernel.kallsyms])
	ffffffff81408528 netdev_register_kobject ([kernel.kallsyms])
	ffffffff813f2cbb register_netdevice ([kernel.kallsyms])
	ffffffff81401314 rtnl_newlink ([kernel.kallsyms])

...

ip  1732 [005] 27128.560734: kmem:kmem_cache_alloc: 
ptr=0xffff8800b94758a0 bytes_req=168 bytes_alloc=168 gfp_flags=37781696
	ffffffff8113ee09 kmem_cache_alloc ([kernel.kallsyms])
	ffffffff811a6c0e __kernfs_new_node ([kernel.kallsyms])
	ffffffff811a7397 kernfs_new_node ([kernel.kallsyms])
	ffffffff811a8ac7 __kernfs_create_file ([kernel.kallsyms])
	ffffffff811a9310 sysfs_add_file_mode_ns ([kernel.kallsyms])
	ffffffff811a9cd2 internal_create_group ([kernel.kallsyms])
	ffffffff811a9e20 sysfs_create_group ([kernel.kallsyms])
	ffffffff814083ca netdev_queue_update_kobjects ([kernel.kallsyms])
	ffffffff81408583 netdev_register_kobject ([kernel.kallsyms])
	ffffffff813f2cbb register_netdevice ([kernel.kallsyms])
	ffffffff81401314 rtnl_newlink ([kernel.kallsyms])

ip  1732 [005] 27128.560789: kmem:kmem_cache_alloc: 
ptr=0xffff880139cd0400 bytes_req=256 bytes_alloc=256 gfp_flags=37748928
	ffffffff8113ee09 kmem_cache_alloc ([kernel.kallsyms])
	ffffffff813df48a __alloc_skb ([kernel.kallsyms])
	ffffffff81270485 kobject_uevent_env ([kernel.kallsyms])
	ffffffff81270703 kobject_uevent ([kernel.kallsyms])
	ffffffff814083da netdev_queue_update_kobjects ([kernel.kallsyms])
	ffffffff81408583 netdev_register_kobject ([kernel.kallsyms])
	ffffffff813f2cbb register_netdevice ([kernel.kallsyms])
	ffffffff81401314 rtnl_newlink ([kernel.kallsyms])

ip  1732 [005] 27128.560798: kmem:kmalloc: ptr=0xffff8800bab97c00 
bytes_req=512 bytes_alloc=512 gfp_flags=37814976
	ffffffff8113e5ce __kmalloc_track_caller ([kernel.kallsyms])
	ffffffff813def36 __kmalloc_reserve.isra.50 ([kernel.kallsyms])
	ffffffff813df4bc __alloc_skb ([kernel.kallsyms])
	ffffffff81270485 kobject_uevent_env ([kernel.kallsyms])
	ffffffff81270703 kobject_uevent ([kernel.kallsyms])
	ffffffff814083da netdev_queue_update_kobjects ([kernel.kallsyms])
	ffffffff81408583 netdev_register_kobject ([kernel.kallsyms])
	ffffffff813f2cbb register_netdevice ([kernel.kallsyms])
	ffffffff81401314 rtnl_newlink ([kernel.kallsyms])

# end netdev_register_kobject
###############################

  reply	other threads:[~2016-02-17  0:53 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-16 23:46 Idea for reducing sysfs memory usage Edward Cree
2016-02-16 23:55 ` Greg Kroah-Hartman
2016-02-17  0:37   ` Edward Cree
2016-02-17  0:44     ` David Ahern
2016-02-17  2:30       ` Greg Kroah-Hartman
2016-02-17  0:47     ` Greg Kroah-Hartman
2016-02-17  0:53       ` David Ahern [this message]
2016-02-17  1:26       ` Edward Cree
2016-02-17  2:27         ` Greg Kroah-Hartman
2016-02-17  0:38 ` Greg Kroah-Hartman

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=56C3C492.9040401@cumulusnetworks.com \
    --to=dsa@cumulusnetworks.com \
    --cc=ec429@cantab.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.