[Bug 219399] System panics after several hours of 14-threads-compilation orgies using poudriere on AMD Ryzen...

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Thu Jul 20 18:07:41 UTC 2017


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=219399

--- Comment #87 from Don Lewis <truckman at FreeBSD.org> ---
This variant of the Ryzen segv test pins each thread to a randomly chosen CPU. 
Top in thread display mode shows that the individual threads are pinned to the
reported CPUs.  I ran it overnight with a loop count parameter of 10000000 and
observed no errors.

--- ryzen_segv_test.c.orig      2017-07-19 17:26:47.686991000 -0700
+++ ryzen_segv_test2.c  2017-07-19 22:05:45.162536000 -0700
@@ -69,6 +69,8 @@
 #include <sys/mman.h>
 #include <sched.h>
 #include <sys/types.h>
+#include <sys/cpuset.h>
+#include <pthread_np.h>
 #include <unistd.h>

 #endif
@@ -332,8 +334,8 @@
        pthread_t t1, t2, t3;
 #ifdef _MSC_VER
 #else
-       cpu_set_t cpuset;
-       int cpu;
+       cpuset_t cpuset;
+       int cpu1, cpu2, cpu3;
 #endif
        pid_t pid = getpid();

@@ -362,11 +364,20 @@

 #ifdef _MSC_VER
 #else
-       cpu = random() % n_cpus;
+       cpu1 = random() % n_cpus;
+       cpu2 = random() % n_cpus;
+       cpu3 = random() % n_cpus;
        CPU_ZERO(&cpuset);
-       CPU_SET(cpu, &cpuset);
-       sched_setaffinity(pid, sizeof(cpu_set_t), &cpuset);
-       fprintf(stderr, "PID:%d CPU:%d\n", (int)pid, cpu);
+       CPU_SET(cpu1, &cpuset);
+       pthread_setaffinity_np(t1,  sizeof(cpuset_t), &cpuset);
+       CPU_ZERO(&cpuset);
+       CPU_SET(cpu2, &cpuset);
+       pthread_setaffinity_np(t2,  sizeof(cpuset_t), &cpuset);
+       CPU_ZERO(&cpuset);
+       CPU_SET(cpu3, &cpuset);
+       pthread_setaffinity_np(t3,  sizeof(cpuset_t), &cpuset);
+       /* cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, pid,
sizeof(cpuset_t), &cpuset); */
+       fprintf(stderr, "PID:%d CPU1:%d, CPU2:%d CPU3:%d\n", (int)pid, cpu1,
cpu2, cpu3);
 #endif

        pthread_join(t1, NULL);

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list