From owner-svn-src-head@FreeBSD.ORG Tue Mar 12 14:23:26 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id DB6DA11F for ; Tue, 12 Mar 2013 14:23:26 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from c00l3r.networx.ch (c00l3r.networx.ch [62.48.2.2]) by mx1.freebsd.org (Postfix) with ESMTP id 4E8DCCC7 for ; Tue, 12 Mar 2013 14:23:25 +0000 (UTC) Received: (qmail 10735 invoked from network); 12 Mar 2013 15:35:52 -0000 Received: from c00l3r.networx.ch (HELO [127.0.0.1]) ([62.48.2.2]) (envelope-sender ) by c00l3r.networx.ch (qmail-ldap-1.03) with SMTP for ; 12 Mar 2013 15:35:52 -0000 Message-ID: <513F3A54.3090702@freebsd.org> Date: Tue, 12 Mar 2013 15:23:16 +0100 From: Andre Oppermann User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130107 Thunderbird/17.0.2 MIME-Version: 1.0 To: Gleb Smirnoff Subject: Re: svn commit: r248196 - head/sys/nfs References: <201303121219.r2CCJN5Z069789@svn.freebsd.org> In-Reply-To: <201303121219.r2CCJN5Z069789@svn.freebsd.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Mar 2013 14:23:26 -0000 On 12.03.2013 13:19, Gleb Smirnoff wrote: > Author: glebius > Date: Tue Mar 12 12:19:23 2013 > New Revision: 248196 > URL: http://svnweb.freebsd.org/changeset/base/248196 > > Log: > Use m_get2() to get mbuf of appropriate size. The problem with m_get2() is that it will attempt to use jumbo mbufs larger than PAGE_SIZE if the request size is sufficiently large. In light of the recent issues with jumbo > PAGE_SIZE allocations on loaded systems I don't think it is appropriate to extend this practice further. Anything that needs more than PAGE_SIZE (where PAGE_SIZE == 4K) mbuf space should allocate an mbuf chain with m_getm2(). That is what we have mbuf chains for. Sufficient availability of mbufs > PAGE_SIZE cannot be guaranteed after some uptime and/or a loaded system due to memory fragmentation. Allocation can fail non-deterministically for mbufs > PAGE_SIZE long before smaller mbufs become unavailable due to overall (kernel) memory exhaustion. Mbufs > PAGE_SIZE are not only contiguous in kernel address space but also in real memory address space. They are intended jumbo frames on poor NIC's without scatter-capable DMA engines. When you put the m_get2() function proposal for review and comments I already highlighted these issues and put forward serious concerns about this. Please change m_get2() to limit itself to mbuf allocations <= PAGE_SIZE. -- Andre Please note that I applaud your general clean up of mbuf related allocation functions and users thereof. :-)