lkml.org 
[lkml]   [2007]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 14/33] Fix errors in tcp_memcalculations.
    -stable review patch.  If anyone has any objections, please let us know.

    ------------------
    From: John Heffner <jheffner@psc.edu>

    In 2.6.18 a change was made to the tcp_mem[] calculations,
    but this causes regressions for some folks up to 2.6.20

    The following fix to smooth out the calculation from the
    pending 2.6.21 tree by John Heffner fixes the problem for
    these folks.

    [TCP]: Fix tcp_mem[] initialization.

    Change tcp_mem initialization function. The fraction of total memory
    is now a continuous function of memory size, and independent of page
    size.

    Signed-off-by: John Heffner <jheffner@psc.edu>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    net/ipv4/tcp.c | 13 ++++++++++---
    1 file changed, 10 insertions(+), 3 deletions(-)

    --- a/net/ipv4/tcp.c
    +++ b/net/ipv4/tcp.c
    @@ -2457,11 +2457,18 @@ void __init tcp_init(void)
    sysctl_max_syn_backlog = 128;
    }

    - /* Allow no more than 3/4 kernel memory (usually less) allocated to TCP */
    - sysctl_tcp_mem[0] = (1536 / sizeof (struct inet_bind_hashbucket)) << order;
    - sysctl_tcp_mem[1] = sysctl_tcp_mem[0] * 4 / 3;
    + /* Set the pressure threshold to be a fraction of global memory that
    + * is up to 1/2 at 256 MB, decreasing toward zero with the amount of
    + * memory, with a floor of 128 pages.
    + */
    + limit = min(nr_all_pages, 1UL<<(28-PAGE_SHIFT)) >> (20-PAGE_SHIFT);
    + limit = (limit * (nr_all_pages >> (20-PAGE_SHIFT))) >> (PAGE_SHIFT-11);
    + limit = max(limit, 128UL);
    + sysctl_tcp_mem[0] = limit / 4 * 3;
    + sysctl_tcp_mem[1] = limit;
    sysctl_tcp_mem[2] = sysctl_tcp_mem[0] * 2;

    + /* Set per-socket limits to no more than 1/128 the pressure threshold */
    limit = ((unsigned long)sysctl_tcp_mem[1]) << (PAGE_SHIFT - 7);
    max_share = min(4UL*1024*1024, limit);

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

    \
     
     \ /
      Last update: 2007-04-26 19:05    [W:0.060 / U:29.712 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site