tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

RFC: m_tag pool cache



Hi,

Currently, m_tag_get() calls malloc()(kern_malloc()), and then
kern_malloc() calls pool_cache_get() as long as m_tag size is not too
large.

According to my measurements of using DTrace, there is a certain
overhead between kern_malloc() and pool_cache_get(). Here is each
function's average turnaround times in my measurement.

    m_tag_get            | 124205 [ns]
    kern_malloc          | 108007 [ns]
    kmem_intr_alloc      |  89636 [ns]
    pool_cache_get_paddr |  65942 [ns]

i.e. the overhead between kern_malloc() and pool_cache_get() is 42065[ns],
this overhead is considerable compared to pool_cache_get_paddr()'s
turnaround time.

Of course, m_tag_get() is used by packet processing path, this overhead
would have a certain influence on packet throughput and latency.
So, I think m_tag should use a dedicated pool cache like mbuf to call
pool_cache_get() directly.

Here is the patch to introduce mbuf pool cache.
    http://www.netbsd.org/~knakahara/mtag-pool-cache/mtag-pool-cache.patch

Could you comment this patch? Any comments are welcome.


Thanks,

-- 
//////////////////////////////////////////////////////////////////////
Internet Initiative Japan Inc.

Device Engineering Section,
Core Product Development Department,
Product Division,
Technology Unit

Kengo NAKAHARA <k-nakahara%iij.ad.jp@localhost>



Home | Main Index | Thread Index | Old Index