From c4e57ccfcf9d719b4fe28a1b9351bb413e9effa7 Mon Sep 17 00:00:00 2001 From: John Kacur Date: Thu, 18 Aug 2022 14:16:40 -0400 Subject: [PATCH] Update to latest version upstream Include upstream patch to fix affinity being set even when -a not set --- .gitignore | 1 + ...ds-being-affined-even-when-a-not-set.patch | 116 ++++++++++++++++++ realtime-tests.spec | 11 +- sources | 2 +- 4 files changed, 127 insertions(+), 3 deletions(-) create mode 100644 cyclictest-Fix-threads-being-affined-even-when-a-not-set.patch diff --git a/.gitignore b/.gitignore index 8df38a0..a3d48a2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /rt-tests-1.9.tar.xz /rt-tests-2.2.tar.xz /rt-tests-2.3.tar.xz +/rt-tests-2.4.tar.xz diff --git a/cyclictest-Fix-threads-being-affined-even-when-a-not-set.patch b/cyclictest-Fix-threads-being-affined-even-when-a-not-set.patch new file mode 100644 index 0000000..fa4e63f --- /dev/null +++ b/cyclictest-Fix-threads-being-affined-even-when-a-not-set.patch @@ -0,0 +1,116 @@ +From 2d910eecf10cd806e22abeb1d96189f87ef74d91 Mon Sep 17 00:00:00 2001 +From: John Stultz +Date: Thu, 28 Jul 2022 20:22:36 +0000 +Subject: [PATCH] cyclictest: Fix threads being affined even when -a isn't set + +Using cyclictest without specifying affinity via -a, I was +noticing a strange issue where the rt threads where not +migrating when being blocked. + +After lots of debugging in the kernel, I found its actually an +issue with cyclictest. + +When using -t there is no behavioral difference between specifying +-a or not specifying -a. + +This can be confirmed by adding printf messages around the +pthread_setaffinity_np() call in the threadtest function. + +Currently: + +root@localhost:~/rt-tests# ./cyclictest -t -a -q -D1 +Affining thread 0 to cpu: 0 +Affining thread 1 to cpu: 1 +Affining thread 2 to cpu: 2 +Affining thread 3 to cpu: 3 +Affining thread 4 to cpu: 4 +Affining thread 5 to cpu: 5 +Affining thread 7 to cpu: 7 +Affining thread 6 to cpu: 6 +T: 0 (15034) P: 0 I:1000 C: 1000 Min: 82 Act: 184 Avg: 180 Max: 705 +... + +root@localhost:~/rt-tests# ./cyclictest -t -q -D1 +Affining thread 0 to cpu: 0 +Affining thread 1 to cpu: 1 +Affining thread 2 to cpu: 2 +Affining thread 3 to cpu: 3 +Affining thread 4 to cpu: 4 +Affining thread 5 to cpu: 5 +Affining thread 6 to cpu: 6 +Affining thread 7 to cpu: 7 +T: 0 (15044) P: 0 I:1000 C: 1000 Min: 74 Act: 144 Avg: 162 Max: 860 +.. + +This issue seems to come from the logic in process_options(): + /* if smp wasn't requested, test for numa automatically */ + if (!smp) { + numa = numa_initialize(); + if (setaffinity == AFFINITY_UNSPECIFIED) + setaffinity = AFFINITY_USEALL; + } + +Here, by setting setaffinity = AFFINITY_USEALL, we effectively +pin each thread to its respective cpu, same as the "-a" option. + +This was most recently introduced in commit bdb8350f1b0b +("Revert "cyclictest: Use affinity_mask for steering +thread placement""). + +This seems erronious to me, so I wanted to share this patch +which removes the overriding AFFINITY_UNSPECIFIED with +AFFINITY_USEALL by default. Also, some additional tweaks to +preserve the existing numa allocation affinity. + +With this patch, we no longer call pthread_setaffinity_np() in the +"./cyclictest -t -q -D1" case. + +Cc: John Kacur +Cc: Connor O'Brien +Cc: Qais Yousef +Signed-off-by: John Stultz +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index decea786268a..82759d1cf67b 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -1270,8 +1270,6 @@ static void process_options(int argc, char *argv[], int max_cpus) + /* if smp wasn't requested, test for numa automatically */ + if (!smp) { + numa = numa_initialize(); +- if (setaffinity == AFFINITY_UNSPECIFIED) +- setaffinity = AFFINITY_USEALL; + } + + if (option_affinity) { +@@ -2043,9 +2041,13 @@ int main(int argc, char **argv) + void *stack; + void *currstk; + size_t stksize; ++ int node_cpu = cpu; ++ ++ if (node_cpu == -1) ++ node_cpu = cpu_for_thread_ua(i, max_cpus); + + /* find the memory node associated with the cpu i */ +- node = rt_numa_numa_node_of_cpu(cpu); ++ node = rt_numa_numa_node_of_cpu(node_cpu); + + /* get the stack size set for this thread */ + if (pthread_attr_getstack(&attr, &currstk, &stksize)) +@@ -2056,7 +2058,7 @@ int main(int argc, char **argv) + stksize = PTHREAD_STACK_MIN * 2; + + /* allocate memory for a stack on appropriate node */ +- stack = rt_numa_numa_alloc_onnode(stksize, node, cpu); ++ stack = rt_numa_numa_alloc_onnode(stksize, node, node_cpu); + + /* touch the stack pages to pre-fault them in */ + memset(stack, 0, stksize); +-- +2.37.2 + diff --git a/realtime-tests.spec b/realtime-tests.spec index 534db23..af97c88 100644 --- a/realtime-tests.spec +++ b/realtime-tests.spec @@ -1,7 +1,7 @@ Name: realtime-tests Summary: Programs that test various rt-features -Version: 2.3 -Release: 4%{?dist} +Version: 2.4 +Release: 1%{?dist} License: GPLv2 URL: https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git Source0: https://www.kernel.org/pub/linux/utils/rt-tests/rt-tests-%{version}.tar.xz @@ -14,6 +14,9 @@ BuildRequires: python3-devel Requires: bash Requires: bc +#Patches +Patch1: cyclictest-Fix-threads-being-affined-even-when-a-not-set.patch + %description realtime-tests is a set of programs that test and measure various components of real-time kernel behavior. This package measures timer, signal, and hardware @@ -71,6 +74,10 @@ latency. It also tests the functioning of priority-inheritance mutexes. %{_mandir}/man8/determine_maximum_mpps.8.* %changelog +* Thu Aug 18 2022 John Kacur - 2.4-1 +- Update to latest version upstream +- Include upstream patch to fix affinity being set even when -a not set + * Sat Jul 23 2022 Fedora Release Engineering - 2.3-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild diff --git a/sources b/sources index 4bc7548..0220aed 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (rt-tests-2.3.tar.xz) = 228247616a43031a8a43c1b1334cc16dfdfd86441bfcd43fa7d7efbd24815aea428c6cb257a1da16d0137422aab9472ffc9a806f67107cfd920fb68b549c749c +SHA512 (rt-tests-2.4.tar.xz) = ef72a55ed85c4d6717cef4573d684ea87f6e73f9189b2a2b8e9b69eaf6ea59933522769c9ba9c131ef9d0546645152e65f072427c53fcc0e386bd297fac3a6e1