Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp273042imm; Thu, 21 Jun 2018 18:18:25 -0700 (PDT) X-Google-Smtp-Source: ADUXVKIxvePlFMpEMYNGrIg/elD5F/C/ZezE7+pqDxTkh7sjbVWYUUAewQCyVKOYpMN2yqFnzsnk X-Received: by 2002:a17:902:778e:: with SMTP id o14-v6mr30577714pll.214.1529630305777; Thu, 21 Jun 2018 18:18:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529630305; cv=none; d=google.com; s=arc-20160816; b=nRxegFuvD/KTeQdM/cdnGdCe6dY0W60R9nQTXfKtbSbWmuOrD7YUo4wbGDDO/T7NBm 09QfHM1ZnE6IF5TW1jTU7c7bXuqwJEh2CFExIdhK7dsff3TWqJ14hhrjuQyJf5eKd680 i30nfI/LjltRzOd1A7Ag1IrKWQJ4P7NkfAKrJhZV1W53JTY09GhoOQ9RXr7rwwccSv0j gRPAoZ+dyt/C+YInZxjaV0oNn+I7Dcjj4dR62jn/jkf0gl5pT7jza7AUygj+4i6OqU2V IcuVRnWiTPaEfnQ6xQef0sRJKW+Fbdl2OPupUsAORt7MUU4XYOHInLPa8eGrxkT6maxd dnmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :message-id:in-reply-to:subject:cc:to:from:date :arc-authentication-results; bh=E1aqRpKSeSqQJmu6V5Ra2VuxVq244tSBErEmjvV8tD8=; b=S50Aexfddb5UybS3SFSXnxo0UkbCZ1pAlIhlQR5zmkUQXOam5xfkfg4nzVP1tCCO90 zw4q2YohuSoliHWb8I6K9v48wnzWGrabaj1vl4uhAHHHuZYr1CZlh37BgvUSV1rJecI0 pK7R68EKg0hwSSqhLE/MrYSthm87AI2Tnh10jAafsvYKBWRAsgkQONpfoBrI7oXqzNRm ieXa0gkb6HEXop45+V1a61+Le0gifg8NIt3DMFI7chVz/gT5+UJ+Nf/jBnpbATnGCqZj 0BOrsP672mTYPAuUUtTSW3rRoPnXq/KGb4o1H14eCWILaEhNLXG8kn71uC6uCLAdJuao OWPQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e88-v6si6372228pfk.198.2018.06.21.18.18.10; Thu, 21 Jun 2018 18:18:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934118AbeFVBRa (ORCPT + 99 others); Thu, 21 Jun 2018 21:17:30 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:55514 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933129AbeFVBR3 (ORCPT ); Thu, 21 Jun 2018 21:17:29 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9B0468182D1F; Fri, 22 Jun 2018 01:17:28 +0000 (UTC) Received: from file01.intranet.prod.int.rdu2.redhat.com (file01.intranet.prod.int.rdu2.redhat.com [10.11.5.7]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 48AC5111DD1D; Fri, 22 Jun 2018 01:17:25 +0000 (UTC) Received: from file01.intranet.prod.int.rdu2.redhat.com (localhost [127.0.0.1]) by file01.intranet.prod.int.rdu2.redhat.com (8.14.4/8.14.4) with ESMTP id w5M1HPtD016689; Thu, 21 Jun 2018 21:17:25 -0400 Received: from localhost (mpatocka@localhost) by file01.intranet.prod.int.rdu2.redhat.com (8.14.4/8.14.4/Submit) with ESMTP id w5M1HOeB016685; Thu, 21 Jun 2018 21:17:25 -0400 X-Authentication-Warning: file01.intranet.prod.int.rdu2.redhat.com: mpatocka owned process doing -bs Date: Thu, 21 Jun 2018 21:17:24 -0400 (EDT) From: Mikulas Patocka X-X-Sender: mpatocka@file01.intranet.prod.int.rdu2.redhat.com To: Michal Hocko cc: jing xia , Mike Snitzer , agk@redhat.com, dm-devel@redhat.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: dm bufio: Reduce dm_bufio_lock contention In-Reply-To: <20180619104312.GD13685@dhcp22.suse.cz> Message-ID: References: <20180614073153.GB9371@dhcp22.suse.cz> <20180615073201.GB24039@dhcp22.suse.cz> <20180615115547.GH24039@dhcp22.suse.cz> <20180615130925.GI24039@dhcp22.suse.cz> <20180619104312.GD13685@dhcp22.suse.cz> User-Agent: Alpine 2.02 (LRH 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Fri, 22 Jun 2018 01:17:28 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Fri, 22 Jun 2018 01:17:28 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'mpatocka@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 19 Jun 2018, Michal Hocko wrote: > On Mon 18-06-18 18:11:26, Mikulas Patocka wrote: > [...] > > I grepped the kernel for __GFP_NORETRY and triaged them. I found 16 cases > > without a fallback - those are bugs that make various functions randomly > > return -ENOMEM. > > Well, maybe those are just optimistic attempts to allocate memory and > have a fallback somewhere else. So I would be careful calling them > outright bugs. But maybe you are right. I was trying to find the fallback code when I triaged them and maked as "BUG" those cases where I didn't find it. You can search harder and perhaps you'll find something that I didn't. > > Most of the callers provide callback. > > > > There is another strange flag - __GFP_RETRY_MAYFAIL - it provides two > > different functions - if the allocation is larger than > > PAGE_ALLOC_COSTLY_ORDER, it retries the allocation as if it were smaller. > > If the allocations is smaller than PAGE_ALLOC_COSTLY_ORDER, > > __GFP_RETRY_MAYFAIL will avoid the oom killer (larger order allocations > > don't trigger the oom killer at all). > > Well, the primary purpose of this flag is to provide a consistent > failure behavior for all requests regardless of the size. > > > So, perhaps __GFP_RETRY_MAYFAIL could be used instead of __GFP_NORETRY in > > the cases where the caller wants to avoid trigerring the oom killer (the > > problem is that __GFP_NORETRY causes random failure even in no-oom > > situations but __GFP_RETRY_MAYFAIL doesn't). > > myabe yes. > > > So my suggestion is - fix these obvious bugs when someone allocates memory > > with __GFP_NORETRY without any fallback - and then, __GFP_NORETRY could be > > just changed to return NULL instead of sleeping. > > No real objection to fixing wrong __GFP_NORETRY usage. But __GFP_NORETRY > can sleep. Nothing will really change in that regards. It does a > reclaim and that _might_ sleep. > > But seriously, isn't the best way around the throttling issue to use > PF_LESS_THROTTLE? Yes - it could be done by setting PF_LESS_THROTTLE. But I think it would be better to change it just in one place than to add PF_LESS_THROTTLE to every block device driver (because adding it to every block driver results in more code). What about this patch? If __GFP_NORETRY and __GFP_FS is not set (i.e. the request comes from a block device driver or a filesystem), we should not sleep. Signed-off-by: Mikulas Patocka Cc: stable@vger.kernel.org Index: linux-2.6/mm/vmscan.c =================================================================== --- linux-2.6.orig/mm/vmscan.c +++ linux-2.6/mm/vmscan.c @@ -2674,6 +2674,7 @@ static bool shrink_node(pg_data_t *pgdat * the LRU too quickly. */ if (!sc->hibernation_mode && !current_is_kswapd() && + (sc->gfp_mask & (__GFP_NORETRY | __GFP_FS)) != __GFP_NORETRY && current_may_throttle() && pgdat_memcg_congested(pgdat, root)) wait_iff_congested(BLK_RW_ASYNC, HZ/10);