[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-id: <163218319798.3992.1165186037496786892@noble.neil.brown.name>
Date: Tue, 21 Sep 2021 10:13:17 +1000
From: "NeilBrown" <neilb@...e.de>
To: "Mel Gorman" <mgorman@...hsingularity.net>
Cc: "Linux-MM" <linux-mm@...ck.org>, "Theodore Ts'o" <tytso@....edu>,
"Andreas Dilger" <adilger.kernel@...ger.ca>,
"Darrick J . Wong" <djwong@...nel.org>,
"Matthew Wilcox" <willy@...radead.org>,
"Michal Hocko" <mhocko@...e.com>,
"Dave Chinner" <david@...morbit.com>,
"Rik van Riel" <riel@...riel.com>,
"Vlastimil Babka" <vbabka@...e.cz>,
"Johannes Weiner" <hannes@...xchg.org>,
"Jonathan Corbet" <corbet@....net>,
"Linux-fsdevel" <linux-fsdevel@...r.kernel.org>,
"LKML" <linux-kernel@...r.kernel.org>,
"Mel Gorman" <mgorman@...hsingularity.net>
Subject: Re: [PATCH 1/5] mm/vmscan: Throttle reclaim until some writeback
completes if congested
On Mon, 20 Sep 2021, Mel Gorman wrote:
> -long wait_iff_congested(int sync, long timeout)
> -{
> - long ret;
> - unsigned long start = jiffies;
> - DEFINE_WAIT(wait);
> - wait_queue_head_t *wqh = &congestion_wqh[sync];
> -
> - /*
> - * If there is no congestion, yield if necessary instead
> - * of sleeping on the congestion queue
> - */
> - if (atomic_read(&nr_wb_congested[sync]) == 0) {
> - cond_resched();
> -
> - /* In case we scheduled, work out time remaining */
> - ret = timeout - (jiffies - start);
> - if (ret < 0)
> - ret = 0;
> -
> - goto out;
> - }
> -
> - /* Sleep until uncongested or a write happens */
> - prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
Uninterruptible wait.
....
> +static void
> +reclaim_throttle(pg_data_t *pgdat, enum vmscan_throttle_state reason,
> + long timeout)
> +{
> + wait_queue_head_t *wqh = &pgdat->reclaim_wait;
> + unsigned long start = jiffies;
> + long ret;
> + DEFINE_WAIT(wait);
> +
> + atomic_inc(&pgdat->nr_reclaim_throttled);
> + WRITE_ONCE(pgdat->nr_reclaim_start,
> + node_page_state(pgdat, NR_THROTTLED_WRITTEN));
> +
> + prepare_to_wait(wqh, &wait, TASK_INTERRUPTIBLE);
Interruptible wait.
Why the change? I think these waits really need to be TASK_UNINTERRUPTIBLE.
Thanks,
NeilBrown
Powered by blists - more mailing lists