From owner-freebsd-fs@FreeBSD.ORG Mon Mar 3 09:32:48 2014 Return-Path: Delivered-To: freebsd-fs@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id CC07EEAD; Mon, 3 Mar 2014 09:32:48 +0000 (UTC) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id EAA8CEE8; Mon, 3 Mar 2014 09:32:47 +0000 (UTC) Received: from porto.starpoint.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id LAA03512; Mon, 03 Mar 2014 11:32:46 +0200 (EET) (envelope-from avg@FreeBSD.org) Received: from localhost ([127.0.0.1]) by porto.starpoint.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1WKPEs-000NaS-1f; Mon, 03 Mar 2014 11:32:46 +0200 Message-ID: <53144C06.40207@FreeBSD.org> Date: Mon, 03 Mar 2014 11:31:50 +0200 From: Andriy Gapon User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: freebsd-fs Subject: Re: l2arc_feed_thread cpu utlization References: <52B2D8D6.8090306@FreeBSD.org> <52FE0378.7070608@FreeBSD.org> In-Reply-To: <52FE0378.7070608@FreeBSD.org> X-Enigmail-Version: 1.6 Content-Type: text/plain; charset=x-viet-vps Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Mar 2014 09:32:48 -0000 on 14/02/2014 13:52 Andriy Gapon said the following: > on 19/12/2013 13:30 Andriy Gapon said the following: >> >> This is just a heads up, no patch yet. >> >> l2arc_feed_thread periodically wakes up and scans certain amount of ARC buffers >> and writes eligible buffers to a cache device. >> Number of scanned buffers is limited by a threshold on the amount of data in the >> buffers seen. The threshold is applied on a per buffer list basis. In upstream >> there are 4 relevant lists: (data, metadata) X (MFU, MRU). In FreeBSD each of >> the lists was subdivided into 16 lists. This was done to reduce contention on >> the locks that protect the lists. But as a side effect l2arc_feed_thread can >> scan 16 times more data (~ buffers). >> >> So, if you have a rather large ARC and L2ARC and your buffers tend to be >> sufficiently small, then you could observe l2arc_feed_thread burning a >> noticeable amount of CPU. On some of our systems I observed it using up to 40% >> of a single core. Scaling back the threshold by factor of 16 makes CPU >> utilization go down by the same factor. >> >> I plan to commit this change to FreeBSD ZFS code. >> Any comments are welcome. > > Here is what I have in mind: > https://github.com/avg-I/freebsd/compare/wip;hc;l2arc_feed_thread_scan_rate > > The calculations in the macro look somewhat ugly, but they should be correct :-) > Looks like the patch did more than I wanted. Not only it limited how much data is scanned per list, but it also limited how much data was written in total. So, this new patch should be better: https://github.com/avg-I/freebsd/compare/master...review;l2arc-feed-thread-scan-size.diff -- Andriy Gapon