lkml.org 
[lkml]   [1999]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: Clearing the I/O caches? (for benchmark tests)
    From
    Date
    "Stephen C. Tweedie" <sct@redhat.com> writes:
    > On 14 Jul 1999 16:42:47 -0700, tmk@cse.ucsc.edu (Tom M. Kroeger) said:
    >
    > > In any case the memory exhausting approach still cleared far more
    > > space than sys_sync & invalidate_buffers etc... (are these buffers
    > > taken from ext2 when memory becomes very low?) Any idea as to why?
    >
    > Of course it will. Invalidating buffers etc. won't do anything about
    > the page cache. A memory flush will also flush out the page cache very
    > effectvely.

    My apologies, I may have been unclear. I've been trying to clear all
    the cache data and have been calling the following: to reduce the

    dcache -- prune_dcache(0);

    page cache -- empty_dcache(); -- a clone of prune dcache that calls
    clear_inode_pages() for each dcache entry
    -- and/or a modified shrink_mmap() that
    if (xxxx_under_min()) removed and (below)

    inode cache -- free_inode_memory(20);

    buffer cache -- sys_sync(); & invalidate_all_buffers();


    all in an order something like this.

    Is there a better way you'd recommend for clearing the cached I/O
    data? I suspect the best things seems to be a reboot, and then memory
    exhaust will suffice as an approximation despite its side effects.

    In any case, sincerely thanks for your patience and help,

    --

    tmk

    -----------------------------------------------------------------------
    Tom M. Kroeger Pray for wind
    Graduate Student, UC Santa Cruz \ Pray for waves
    e-mail: tmk@cs.ucsc.edu |\ and Pray it's your day off!
    http://www.cse.ucsc.edu/~tmk |~\
    (831) 459-4458 |__\
    (831) 426-9055 home ,----+--



    int shrink_mmap_all( void)
    {
    struct page * page;
    int i;

    i = max_mapnr;
    while (i-- > 0) {

    int referenced;
    page = mem_map +i;

    /* This works even in the presence of PageSkip because
    * the first two entries at the beginning of a hole will
    * be marked, not just the first.
    */

    if (PageSkip(page)) {
    continue;
    }

    referenced = test_and_clear_bit(PG_referenced, &page->flags);

    if (PageLocked(page))
    continue;

    /* We can't free pages unless there's just one user */
    if (atomic_read(&page->count) != 1)
    continue;

    if (PageSwapCache(page)) {
    if (referenced && swap_count(page->offset) != 1)
    continue;
    delete_from_swap_cache(page);
    continue;
    }

    if (referenced)
    continue;

    /* Is it a buffer page? */
    if (page->buffers) {
    debug(11,"buffer page %d\n",i);
    free_buffers(page);
    continue;
    }

    /* is it a page-cache page? */
    if (page->inode) {
    remove_inode_page(page);
    }
    }
    return 0;
    }

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.rutgers.edu
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:53    [W:0.026 / U:59.420 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site