On Mon, Jan 18, 2021 at 12:02:53AM +0900, Akira Yokosawa wrote: > Hi Paul, > > This patch set is last minute updates for the Second Edition. > > Patch 1/3 fixes a regression resulting in the "(m)" flag in the > watermark of footnote area. It can happen only in parallel make > of first build. See the commit log of the root cause of the false > flag. I don't see a patch 1/3, but I did apply and push the others, thank you! See below for a delta on top of patch 2/3. > Patches 2/3 and 3/3 are my attempt to update Figure 12.4 to extend > the bar chart up to Linux v5.10. > > I thought all I need to do would be to append data of v5.x releases. > However, when I ran the rcutorture.sh (for the first time), I noticed > the differences in line counts of RCU code of previous releases. > > My guess is that when you collected the data, your Linux git > repository had some untracked file(s) which unfortunately matched > the wildcard pattern in the script. > > Can you check the data on your own? I do see some differences. For one thing, your formal/data/rcu-test.dat file has "" in the version field for every three of four versions. (I don't see how the script does that. Was this something that you hand-edited?) The numbers were different, but to your point about untracked files, I cloned a fresh repo to avoid untracked files. After that, the numbers match yours except for v5.8 onwards, which have refscale.sh instead of refperf.sh. > Also, the discussion of the evolution of use of validation needs > some expansion to mention the trend of v5.x era. > Especially, v5.0 had a spike in test ratio. > A new trend of RCU code increase can be seen since v5.8. > Can you add some explanation regarding them? Done! Please see the second diff below. Thanx, Paul ------------------------------------------------------------------------ diff --git a/CodeSamples/formal/rcutorture.sh b/CodeSamples/formal/rcutorture.sh index 0782b39..bc9a285 100644 --- a/CodeSamples/formal/rcutorture.sh +++ b/CodeSamples/formal/rcutorture.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# rcutorture.sh: Output LaTeX table entries showing the fraction of +# rcutorture.sh: Output gnuplot .dat entries showing the fraction of # Linux-kernel RCU that is test code. Run in a git clone of # the Linux-kernel source tree. # @@ -25,9 +25,9 @@ tags="`git tag -l | grep '^v' | grep -v -e - | grep -v '\..*\..*\.' | grep -v '2 for t in $tags do git reset --hard $t > /dev/null 2>&1 - nontorture="`ls kernel/*rcu*.* kernel/rcu/* include/linux/*rcu* 2> /dev/null | grep -v torture | grep -v rcuperf | grep -v refperf | grep -v rcuscale`" + nontorture="`ls kernel/*rcu*.* kernel/rcu/* include/linux/*rcu* 2> /dev/null | grep -v torture | grep -v rcuperf | grep -v refperf | grep -v rcuscale | grep -v refscale`" ntn="`wc -l $nontorture 2> /dev/null | tail -1 | awk '{ print $1 }'`" - tn="`wc -l tools/testing/selftests/rcutorture/configs/*/*.sh kernel/rcutorture.c kernel/rcu/torture.c kernel/rcu/rcutorture.c kernel/rcu/rcuperf.c kernel/rcu/refperf.c kernel/rcu/rcuscale.c kernel/torture.c tools/testing/selftests/rcutorture/bin/* 2> /dev/null | tail -1 | awk '{ print $1 }'`" + tn="`wc -l tools/testing/selftests/rcutorture/configs/*/*.sh kernel/rcutorture.c kernel/rcu/torture.c kernel/rcu/rcutorture.c kernel/rcu/rcuperf.c kernel/rcu/refperf.c kernel/rcu/rcuscale.c kernel/rcu/refscale.c kernel/torture.c tools/testing/selftests/rcutorture/bin/* 2> /dev/null | tail -1 | awk '{ print $1 }'`" frac="`awk -v ntn=$ntn -v tn=$tn 'END { printf "%.1f", 100 * tn / (tn + ntn) "%"; }' < /dev/null`" echo $t $ntn $tn $((ntn + tn)) $frac done ------------------------------------------------------------------------ commit 3c8c4764725cccdf9f25dc1b87b9080d8b4f5199 Author: Paul E. McKenney <paulmck@xxxxxxxxxx> Date: Tue Jan 19 10:18:12 2021 -0800 formal: Add commentary on changes in Linux-kernel RCU This commit adds explanations for the larger changes shown in the Figure 12.4 bar graph. Reported-by: Akira Yokosawa <akiyks@xxxxxxxxx> Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx> diff --git a/formal/formal.tex b/formal/formal.tex index 2428942..99d13aa 100644 --- a/formal/formal.tex +++ b/formal/formal.tex @@ -343,6 +343,14 @@ Linux kernel v3.14 added scripting that automated testing and also analysis of test results, moving RCU towards continuous integration. Linux kernel v4.7 added a performance validation suite for RCU's update-side primitives. +Linux kernel v4.12 added Tree SRCU, featuring improved update-side +scalability, and v4.13 removed the old less-scalable SRCU implementation. +Linux kernel v5.0 briefly hosted the \path{nolibc} library within +the rcutorture scripting directory before it moved to its long-term +home in \path{tools/include/nolibc}. +Linux kernel v5.8 added the Tasks Trace and Rude flavors of RCU. +Linux kernel v5.9 added the \path{refscale.c} suite of read-side performance +tests. Numerous other changes may be found in the Linux kernel's \co{git} archives. % rcutorture % v2.6.15: First torture test @@ -355,7 +363,11 @@ Numerous other changes may be found in the Linux kernel's \co{git} archives. % v3.15: Add support for multiple torture-tests suites for locktorture. % v3.16: Add support for conditional grace-period primitives. % v4.7: Add update-side performance validation suite. * +% v4.12: Added Tree SRCU. +% v4.13: Removed non-Tree SRCU. % v5.0: nolibc was briefly in the rcutorture scripting directory. +% v5.8: Added Tasks Trace RCU and Rude RCU. +% v5.9: Added refscale.c. We have established that the validation budget varies from one project to the next, and also over the lifetime of any given project.