From: Andreas Dilger <adilger@turbolinux.com>
To: Matthew Dharm <mdharm-kernel@one-eyed-alien.net>
Cc: Linux kernel development list <linux-kernel@vger.kernel.org>
Subject: Re: Simple example of using slab allocator?
Date: Tue, 19 Jun 2001 01:51:32 -0600 (MDT) [thread overview]
Message-ID: <200106190751.f5J7pXVb031505@webber.adilger.int> (raw)
In-Reply-To: <20010618230537.B28162@one-eyed-alien.net> "from Matthew Dharm at Jun 18, 2001 11:05:37 pm"
Matthew Dharm writes:
> Well, if it's really that simple....
>
> Another aspect of this, tho, is that I'd like to be able to profile my
> memory usage. Does the SA have any ability to report (easily) the number
> of pages allocated and how full each one is?
Then "cat /proc/slabinfo" is your friend. It lists currently allocated
objects, maximum objects that will fit in the current allocated pages,
size of object, pages used if objects were tightly packed, real pages
used, and pages per slab.
On SMP systems it also lists the number of slab cache objects kept
local to each CPU to avoid global locking when they need to allocate.
Cheers, Andreas
> On Mon, Jun 18, 2001 at 10:56:36AM -0600, Andreas Dilger wrote:
> > The slab allocator IS dead simple to use, basically:
> >
> > - driver global variable:
> >
> > kmem_cache_t *usb_mass_cachep;
> >
> > - in the driver init function:
> >
> > usb_mass_cachep = kmem_cache_create("usb_mass_cache",
> > sizeof(struct whatever),
> > 0, SLAB_HWCACHE_ALIGN,
> > NULL, NULL);
> > (check for NULL usb_mass_slab)
> >
> > - in the driver cleanup function:
> >
> > if (usb_mass_cachep && kmem_cache_destroy(usb_mass_cachep))
> > printk(KERN_ERR "usb_mass_cache: not all structures freed\n");
> >
> > - wherever you need an item from the slab cache:
> >
> > whateverp = kmem_cache_alloc(usb_mass_cachep, GFP_KERNEL);
> > (check for NULL whateverp)
> >
> > - when you are done with it:
> >
> > kmem_cache_free(usb_mass_cachep, whateverp);
> >
> > Notes:
> > - if you have a slab leak and you don't free all of the items (hence the slab
> > cache is not removed), you will probably get an oops when you reload the
> > driver. You can only have one slab cache per name ("usb_mass_cache" here).
> > - You may need different alignment (SLAB_HWCACHE_ALIGN), or not
> > - You may need different allocation policy (GFP_KERNEL), or not
--
Andreas Dilger \ "If a man ate a pound of pasta and a pound of antipasto,
\ would they cancel out, leaving him still hungry?"
http://www-mddsp.enel.ucalgary.ca/People/adilger/ -- Dogbert
prev parent reply other threads:[~2001-06-19 7:52 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-06-15 22:19 Matthew Dharm
2001-06-18 16:56 ` Andreas Dilger
2001-06-19 6:05 ` Matthew Dharm
2001-06-19 7:51 ` Andreas Dilger [this message]
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=200106190751.f5J7pXVb031505@webber.adilger.int \
--to=adilger@turbolinux.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mdharm-kernel@one-eyed-alien.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
all inboxes | Powered by JetHome®