Re: [PATCH v3] sched/cache: Remove the old cache group footprint on exec

From: Chen Yu

Date: Wed Oct 21 2026 - 06:27:02 EST


On Thu, Oct 15, 2026 at 01:36:04PM +0800, Jemmy Wong wrote:

[ ... ]

> @@ -3965,36 +3974,6 @@ static void task_numa_placement(struct task_struct *p)
> ng->total_faults += diff;
> group_faults += ng->faults[mem_idx];
> }
> -#ifdef CONFIG_SCHED_CACHE
> - /*
> - * Per task p->numa_faults[mem_idx] converges,
> - * so the accumulation of each task's faults
> - * converges too - Given the number of threads,
> - * it cannot overflow an unsigned long.

Above comments can be kept for future reference, with minor adjustment:

s/it cannot overflow an unsigned long/it cannot overflow an atomic_long_t

I launched a full hackbench test on a Xeon with multiple LLCs per node. There
is no obvious difference except for some false-positive regress with large
run-to-run variance. This patch looks good to me in terms of turning the
footprint into an accurate counter. Feel free to add:

Reviewed-by: Chen Yu <yu.c.chen@xxxxxxxxx>
Tested-by: Chen Yu <yu.c.chen@xxxxxxxxx>

thanks,
Chenyu



First run:
=========================================
Hackbench comparison
BASE: cas_on_baseline
TEST: cas_on_patched
=========================================
MODE G FD | BASE(s) | TEST(s) | DIFF% | RESULT
------- -- ----+-----------------+-----------------+---------+----------
process 16 1 | 0.178/1.7% | 0.166/0.6% | 6.74% | IMPROVED
process 16 16 | 4.871/9.1% | 5.230/3.8% | -7.37% | REGRESSED
process 16 2 | 1.574/3.0% | 1.296/27.5% | 17.66% | IMPROVED
process 16 20 | 6.502/7.8% | 6.262/1.5% | 3.69% | IMPROVED
process 16 4 | 2.296/5.0% | 2.138/13.0% | 6.88% | IMPROVED
process 16 8 | 2.056/1.1% | 1.982/12.3% | 3.60% | IMPROVED
process 1 1 | 2.040/0.8% | 2.010/4.5% | 1.47% | IMPROVED
process 1 16 | 4.837/3.5% | 4.189/12.7% | 13.40% | IMPROVED
process 1 2 | 3.708/5.0% | 2.768/14.3% | 25.35% | IMPROVED
process 1 20 | 4.552/3.5% | 4.505/2.2% | 1.03% | IMPROVED
process 1 4 | 2.696/17.0% | 3.092/21.8% | -14.69% | REGRESSED
process 1 8 | 5.474/3.4% | 5.372/9.3% | 1.86% | IMPROVED
process 2 1 | 1.089/3.4% | 1.115/2.3% | -2.39% | REGRESSED
process 2 16 | 4.985/13.9% | 5.246/5.1% | -5.24% | REGRESSED
process 2 2 | 1.063/7.2% | 0.998/3.2% | 6.11% | IMPROVED
process 2 20 | 5.091/13.6% | 5.081/3.1% | 0.20% | IMPROVED
process 2 4 | 3.935/18.2% | 3.438/23.2% | 12.63% | IMPROVED
process 2 8 | 4.791/7.0% | 4.925/3.8% | -2.80% | REGRESSED
process 4 1 | 0.690/18.3% | 0.586/1.9% | 15.07% | IMPROVED
process 4 16 | 5.878/3.5% | 6.119/1.9% | -4.10% | REGRESSED
process 4 2 | 0.534/6.4% | 0.512/2.7% | 4.12% | IMPROVED
process 4 20 | 5.839/3.1% | 5.644/5.0% | 3.34% | IMPROVED
process 4 4 | 4.012/1.5% | 3.386/12.0% | 15.60% | IMPROVED
process 4 8 | 4.737/11.0% | 4.703/3.9% | 0.72% | IMPROVED
process 8 1 | 0.317/0.9% | 0.322/0.3% | -1.58% | REGRESSED
process 8 16 | 3.671/5.4% | 3.922/4.8% | -6.84% | REGRESSED
process 8 2 | 0.921/35.8% | 0.812/36.0% | 11.83% | IMPROVED
process 8 20 | 4.878/6.9% | 4.769/1.8% | 2.23% | IMPROVED
process 8 4 | 2.969/10.2% | 3.500/16.5% | -17.88% | REGRESSED
process 8 8 | 4.698/2.6% | 4.263/4.7% | 9.26% | IMPROVED
threads 16 1 | 0.192/0.5% | 0.189/0.0% | 1.56% | IMPROVED
threads 16 16 | 5.430/4.7% | 5.685/1.2% | -4.70% | REGRESSED
threads 16 2 | 0.362/17.4% | 0.577/29.6% | -59.39% | REGRESSED
threads 16 20 | 6.210/3.6% | 5.523/6.2% | 11.06% | IMPROVED
threads 16 4 | 2.678/11.0% | 3.173/5.6% | -18.48% | REGRESSED
threads 16 8 | 2.347/3.3% | 2.394/8.7% | -2.00% | REGRESSED
threads 1 1 | 2.131/1.5% | 2.260/2.5% | -6.05% | REGRESSED
threads 1 16 | 0.379/2.4% | 0.353/2.5% | 6.86% | IMPROVED
threads 1 2 | 2.050/0.9% | 2.003/0.6% | 2.29% | IMPROVED
threads 1 20 | 0.347/2.6% | 0.324/0.9% | 6.63% | IMPROVED
threads 1 4 | 1.342/1.0% | 1.333/1.1% | 0.67% | IMPROVED
threads 1 8 | 0.730/2.5% | 0.732/1.4% | -0.27% | REGRESSED
threads 2 1 | 1.144/1.2% | 1.167/1.2% | -2.01% | REGRESSED
threads 2 16 | 0.286/1.4% | 0.987/71.3% | -245.10% | REGRESSED
threads 2 2 | 1.035/2.4% | 1.040/0.5% | -0.48% | REGRESSED
threads 2 20 | 1.016/73.2% | 2.038/43.5% | -100.59% | REGRESSED
threads 2 4 | 0.647/0.9% | 0.647/1.2% | 0.00% | SAME
threads 2 8 | 0.338/1.8% | 0.335/1.5% | 0.89% | IMPROVED
threads 4 1 | 0.658/1.4% | 0.614/4.4% | 6.69% | IMPROVED
threads 4 16 | 6.434/1.4% | 6.194/1.5% | 3.73% | IMPROVED
threads 4 2 | 0.522/2.1% | 0.521/1.7% | 0.19% | IMPROVED
threads 4 20 | 5.361/1.4% | 6.060/1.6% | -13.04% | REGRESSED
threads 4 4 | 0.324/1.5% | 0.335/1.8% | -3.40% | REGRESSED
threads 4 8 | 0.946/35.4% | 0.854/61.1% | 9.73% | IMPROVED
threads 8 1 | 0.351/5.7% | 0.364/1.9% | -3.70% | REGRESSED
threads 8 16 | 3.818/4.8% | 4.109/4.9% | -7.62% | REGRESSED
threads 8 2 | 0.294/6.5% | 0.276/1.4% | 6.12% | IMPROVED
threads 8 20 | 4.640/5.2% | 4.788/9.1% | -3.19% | REGRESSED
threads 8 4 | 1.548/57.0% | 0.880/11.0% | 43.15% | IMPROVED
threads 8 8 | 5.028/2.2% | 5.161/2.9% | -2.65% | REGRESSED

Then I pick the following test, which seems to have a big regression with a
large stderr%:
threads 2 16 | 0.286/1.4% | 0.987/71.3% | -245.10% | REGRESSED
threads 2 20 | 1.016/73.2% | 2.038/43.5% | -100.59% | REGRESSED
threads 16 2 | 0.362/17.4% | 0.577/29.6% | -59.39% | REGRESSED
threads 16 4 | 2.678/11.0% | 3.173/5.6% | -18.48% | REGRESSED


The following is the second run:
=========================================
MODE G FD | BASE(s) | TEST(s) | DIFF% | RESULT
------- -- ----+-----------------+-----------------+---------+----------
threads 2 16 | 0.915/29.6% | 1.376/66.1% | -50.38% | REGRESSED
threads 2 20 | 2.154/23.0% | 1.299/50.7% | 39.69% | IMPROVED
threads 16 2 | 0.320/18.8% | 0.756/26.3% | -136.25% | REGRESSED
threads 16 4 | 4.139/1.9% | 3.174/18.2% | 23.31% | IMPROVED

So the data seems to be quite unstable when the system is saturated, which
might be another issue that I'll investigate soon.