From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A465FC0219D for ; Thu, 13 Feb 2025 12:29:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 128A7280001; Thu, 13 Feb 2025 07:29:12 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0B09D6B008A; Thu, 13 Feb 2025 07:29:12 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E92D2280001; Thu, 13 Feb 2025 07:29:11 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id CE1B96B0089 for ; Thu, 13 Feb 2025 07:29:11 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 60AE4A0DD5 for ; Thu, 13 Feb 2025 12:29:11 +0000 (UTC) X-FDA: 83114851302.17.0CC7394 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf30.hostedemail.com (Postfix) with ESMTP id 7863A8000C for ; Thu, 13 Feb 2025 12:29:09 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=ZPbgX6EA; spf=pass (imf30.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.214.169 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739449749; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Ip5h1JfWGabWfAWrvBtypMY3P6wpAqFefktZh/UCz2c=; b=6RpAIaIuaJSnTToCU+ohQDJ0BjOpPCTur4gacLAQO7+lHHfq9/e0sBZf9Cu1kzYst6W4zU IIYUbnxkBV2HJ3T/yKDvSf3ZBt/EG5GjmAnCpU2wk+/FO5o2XmQYRPLM7F3y5K8S9j0PSt 5AxWzjQQTWKYCS5J8noK2z1dHj8n2gg= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=ZPbgX6EA; spf=pass (imf30.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.214.169 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739449749; a=rsa-sha256; cv=none; b=WHp8X5+a/pHqXmKv/wyIFuaISx3JjvMzhecQ7HSWGP1p1O5iJG7jEF1Jm3uosiGjof9Oit 9spgrUS21hGpC2XMaVPO4QKCUiBNB5tSv9TGA5zLY6B0EkCH/Fcp1tJmTGQY4cXY+WrhcR Cuz3KcNEDTi2AorABuSDqkbGxJ1/DrY= Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-220d28c215eso10360105ad.1 for ; Thu, 13 Feb 2025 04:29:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1739449748; x=1740054548; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=Ip5h1JfWGabWfAWrvBtypMY3P6wpAqFefktZh/UCz2c=; b=ZPbgX6EA4KZJrfi0Rrq+iD+POe12PHbFujKC7Wt/ZXr8PFWRyDBzjlRVePuLiaaF7U xlprGicMK3UMdudgiIR2EhP/rtQENRLYVh0ka/y+b4KPjcRwQh5ffPii6rQpCm6Fc8WJ A+KQFFaDPH+ZLxGzvyFjS1/D3152ZZcjIHjWs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739449748; x=1740054548; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Ip5h1JfWGabWfAWrvBtypMY3P6wpAqFefktZh/UCz2c=; b=jZgwBK27lnWylkwtR9M1a212yuY8hI9VYX9wncQNWwHLgg4YF6xjQs8L/fYM1zZ2jA 6YZyxqPk4ePXA+tJuqco9LS3g18/IAQewo+x7BUjrGH39BHNmPRNBISvcmkqnNAqQ64u fDUiQUwszvljwD3uH0ve8zipI55AHc1+TKBxSavxvjZH5Uf2L538WrtKyHnUubRjqh/g AC9gSvruJ8y1JJX4a5DOkJKqTp9mxSLYE/KbSzhS6HqWCkmJqXRojNrZj6i4uURsBvuW PyfmYLwmJ1CSHN0DfWNi87J87XQ8eKOFo4Cg3CCuw0MPTAcuCnV4lWXFGDicZz/kB+Mq gSIQ== X-Forwarded-Encrypted: i=1; AJvYcCVib70Ty6rJWFcoyRhQGCYUSJm/uQ1jjFx2lSyk7PftmgogCC16d1pClR7YF6jhh92te61iy6NGHw==@kvack.org X-Gm-Message-State: AOJu0YzLG5xFJSivrq47DeBKUZDcyatl73+X4vqpir/uwW3Oegmhih6q +J1l1iS7r2/VuuVK5oLwTQl10hNTurxlXOcyO5VudlYCDx5Sin6zY22mLv5Y3A== X-Gm-Gg: ASbGncsfIPk1SEaDnS4NVmuzwaJnHBcX+vVUoSASW6TP3Lzsx4SmiCy5ow+rltzzA3j LDCGK15m2EblvRKAkoFGHcjzdJElhrrgQ7gYO7kIgCuqUTHGb0BuUbesR5dDBcFfIagHID/ZL6w 3rIsDIuXgVahrRHQ/udyePb7fI/9OxqD7UKs3/FRrZtILMcOWoXQyeLm6IoGrQkh8b8WQUgyz8x NIRYQSy5hCQxJUkGUc89nOWinMse8Agk9YTEpP8XQ9f5SNOwYdZjtYxn1lmYM/ePEJx3im30uwV s4TnPKSamQVmkvIcSj8= X-Google-Smtp-Source: AGHT+IGvy9bHiW6eLIQST65q4a0D5N/cE4ix+Nk7FRtNm71aqWece00BtmbRZzNr2vej9UsDDSn/cg== X-Received: by 2002:a17:903:138a:b0:215:aee1:7e3e with SMTP id d9443c01a7336-220d1eb567cmr53800975ad.5.1739449748326; Thu, 13 Feb 2025 04:29:08 -0800 (PST) Received: from google.com ([2401:fa00:8f:203:3ed3:97ce:5f5f:1f61]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fbf98f4f62sm3209135a91.26.2025.02.13.04.29.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2025 04:29:07 -0800 (PST) Date: Thu, 13 Feb 2025 21:29:01 +0900 From: Sergey Senozhatsky To: Hillf Danton Cc: Sergey Senozhatsky , Yosry Ahmed , Kairui Song , Minchan Kim , Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v5 12/18] zsmalloc: make zspage lock preemptible Message-ID: References: <20250212063153.179231-1-senozhatsky@chromium.org> <20250213113248.2225-1-hdanton@sina.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250213113248.2225-1-hdanton@sina.com> X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 7863A8000C X-Stat-Signature: 61ftc83cms8exd6txihp4rzscdzoi9ap X-HE-Tag: 1739449749-994332 X-HE-Meta: U2FsdGVkX18kx3aQ0T/oSI7Ebq8IXwt1t2CZ3A/G0oCW+CoqCqByZEUpF4yOz3SPzunM/ZsI3RDZWQAvzIS4Ybno2qs18+fk2/cgicLCjqcQ6ftDECwojjphL1raBRnfObIajmgR7byKrnSyOAl0DMOHsfHRwwpmqFvi+InrezsWqdi9uqJblXF0ZKJ6vCfKjbNyo3SGLGvRhWwUeC9rbQ4AHSY1eo/eZZl7V7HSdgRifNjBd2nCv9NI+GTsOtMV06p7Yz/OiLhuyEjBW+KoWvSuXP/Tab7c9KEl6spRq1AuNksfdfk3KFpWm5YkrRodsHLLtKJQrbqsb7M6xSZVwpvxQ9cXEvQSOOSxPfmPJipCXS3a3YFhJ2P6dUuWVaT4QCoGvD2JP1o9CFYWKx4j/nLFjRCZGMbG5dSPp8inrjnM2oT5H/VnoFaSUi3fLigGYXLvM8Sn5Wp82kZbiCNQ1JWfVMq2qOlzOjUHVk49bQ+jear6efxuBhV+HxRdDEfIsjzdgf0/tUDWudQmSzaAttAj3bWRk0VkZTHX7UL3ubxMVHDCO0mAMJRGb7AkCWthnc0/YevHQYsqs03ogKwLSzmE9FWdfNFosm0mLarRsJqDc9VAHqNW32X/vsZ96w0FOO/d8ZzyW5bfM4DnhNy/0oeTIxOsS7+ehodiQr77gaAi/sbB5URjNk9jIqOt/oc8U3ahGNyGMNJ8OhwiC2oCPttPRVoltnKu2wSIN8/y67vIv5pdbiXAFJPf4C5njH3PwV/KitfXfVkaQXxUux5qGEqRj0VQh9poxx9nnehk9zoMPdWhjdpUf4MYKLTOoQkOC9pb1XP82/hugRsDQHiRu295j2ZowiKPDcG3v6kB7APr/ZOZ6sZ7sRWVQG1wn6pcbXZwmL8WiDwHHTASgHN6nbeRlLYtGxgFgpPh2q1m8pET3HhNzR3xW3dwD5lU+98mZ2PrfPZV7qoXQy6Xwv6 0aIO48PN FotTFPruDhCyb9tDJ95H2IWLJEyQ+4dfNmk8sJO5odeB5B/Etz79lYSfDBdKn6geAH82jcGn9C/JM4n948IUaVG11hZG21CEQXQ4Qf+aGfM3snXRE6qqEgwTkjZHLbc7wUpQmXNtM9j+d/BnUqNsvobYUR5ReInZu6EjoIKj7uFWDpXpvlY2ZcogwFVPK+8QMW7SiBRT+MuwXt7Qe1czcpQBKg0S9NHJvAjwdYlgyIF9ec1pR0qGvXKuxZMulkRFzYlOYcae5uI3JhlllGgnOwlaEHGhsrIpKHgdn+wNgzNRexSVQynJ3HFSo6ct4exYglb8DAAohyApPv+SPdgYYGF2Yp5NxXXS3WkR/cUpQBwYAooI= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000031, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On (25/02/13 19:32), Hillf Danton wrote: [..] > > +static void zspage_read_lock(struct zspage *zspage) > > +{ > > + atomic_t *lock = &zspage->lock; > > + int old = atomic_read_acquire(lock); > > + > > +#ifdef CONFIG_DEBUG_LOCK_ALLOC > > + rwsem_acquire_read(&zspage->lockdep_map, 0, 0, _RET_IP_); > > +#endif > > + > > + do { > > + if (old == ZS_PAGE_WRLOCKED) { > > + cpu_relax(); > > + old = atomic_read_acquire(lock); > > + continue; > > + } > > + } while (!atomic_try_cmpxchg_acquire(lock, &old, old + 1)); > > Given mcs_spinlock, inventing spinlock in 2025 sounds no good. > See below for the spinlock version. I should have sent this series in 2024, when inventing a spinlock sounded good :) > struct zspage_lock { > spinlock_t lock; > int cnt; > struct lockdep_map lockdep_map; > }; > > static __must_check bool zspage_write_trylock(struct zspage_lock *zl) > { > spin_lock(&zl->lock); > if (zl->cnt == ZS_PAGE_UNLOCKED) { > // zl->cnt = ZS_PAGE_WRLOCKED; > rwsem_acquire(&zl->lockdep_map, 0, 1, _RET_IP_); > return true; > } > spin_unlock(&zl->lock); > return false; > } > > static void zspage_write_unlock(struct zspage_lock *zl) > { > rwsem_release(&zl->lockdep_map, _RET_IP_); > spin_unlock(&zl->lock); > } > > static void zspage_read_lock(struct zspage_lock *zl) > { > rwsem_acquire_read(&zl->lockdep_map, 0, 0, _RET_IP_); > > spin_lock(&zl->lock); > zl->cnt++; > spin_unlock(&zl->lock); > } > > static void zspage_read_unlock(struct zspage_lock *zl) > { > rwsem_release(&zl->lockdep_map, _RET_IP_); > > spin_lock(&zl->lock); > zl->cnt--; > spin_unlock(&zl->lock); > } I see, yeah I can pick it up, thanks. A couple of *minor* things I can think of. First. in the current implementation I also track LOCK_STAT (lock-contended/lock-acquired), something like static inline void __read_lock(struct zspage *zspage) { atomic_t *lock = &zspage->lock; int old = atomic_read_acquire(lock); rwsem_acquire_read(&zspage->dep_map, 0, 0, _RET_IP_); do { if (old == ZS_PAGE_WRLOCKED) { lock_contended(&zspage->dep_map, _RET_IP_); cpu_relax(); old = atomic_read_acquire(lock); continue; } } while (!atomic_try_cmpxchg_acquire(lock, &old, old + 1)); lock_acquired(&zspage->dep_map, _RET_IP_); } I'll add lock-stat to zsl, but it's worth mentioning that zsl "splits" the stats into zsl spin-lock's dep_map and zsl's own dep_map: class name con-bounces contentions waittime-min waittime-max waittime-total waittime-avg acq-bounces acquisitions holdtime-min holdtime-max holdtime-total holdtime-avg zspage->lock-R: 0 0 0.00 0.00 0.00 0.00 1 2 6.19 11.61 17.80 8.90 &zspage->zsl.lock: 0 0 0.00 0.00 0.00 0.00 5457 1330106 0.10 118.53 174917.46 0.13 That is, quite likely, fine. One can just add the numbers, I assume. Second, we'll be carrying around two dep_map-s per-zsl in lockdep builds now, but, again, that is, likely, not a problem as sizeof(lockdep_map) isn't too huge (around 48 bytes).