Hi all, my x86 PC (32bit, Intel core i7, 8 cores) is started with "isolcpus=1-15". Kernel: 3.6.11-rt31 I have an application having a real time thread bound to one CPU core (core 2). This threads runs in an endless loop with real time priority (prio 80). This leads to RCU stalls after a while. I was now looking at the RCU_BOOST feature to see if this is a way to get rid of the RCU stalls. My understanding is now, if I enable RCU_BOOST, set the RCU_BOOST_PRIO to "97" this should avoid the issue with the RCU stalls. However, this works not as I expected. Please see the following test-application, --------- BEGIN CODE --------- #define _GNU_SOURCE #include <stdio.h> #include <string.h> #include <pthread.h> #include <unistd.h> #include <math.h> #include <sys/time.h> volatile int end=0; int set_rt_prio_and_core(int prio, int core) { { int rc; struct sched_param param; memset(¶m, 0, sizeof(param)); param.sched_priority = prio; rc = sched_setscheduler(0, SCHED_FIFO, ¶m); if (rc) { perror("sched_setscheduler"); } } { int rc; cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(core, &mask); rc = sched_setaffinity(0, sizeof(mask), &mask); if (rc) { perror("sched_setaffinity"); } } return 0; } void *thread_func(void *arg) { int i; volatile double f = 0.0; set_rt_prio_and_core(80,2); for (i=0; !end; i++) { f = f + sin(2.3*i); // Some dummy load... } return NULL; } int main(void) { pthread_t thr; pthread_create(&thr, NULL, thread_func, NULL); sleep(1000); end = 1; pthread_join(thr, NULL); return 0; } --------- END CODE --------- When I start this application it runs as expected with roughly 100% CPU load on this thread. However after one minute, I got the following dmesg: -------- BEGIN DMESG --------- INFO: rcu_preempt self-detected stall on CPU { 2} (t=6000 jiffies) Pid: 5312, comm: full-load Not tainted 3.6.11-rt31-1 #2 Call Trace: [<c106e298>] rcu_check_callbacks+0x150/0x4a5 [<c1032a1e>] update_process_times+0x37/0x43 [<c10585cb>] tick_sched_timer+0x19f/0x1d0 [<c104232e>] __run_hrtimer+0xf6/0x1e4 [<c105842c>] ? tick_init_highres+0x14/0x14 [<c1042f49>] hrtimer_interrupt+0x1c6/0x34f [<c101a92a>] smp_apic_timer_interrupt+0x6c/0x7f [<c13a651a>] apic_timer_interrupt+0x2a/0x30 -------- END DMESG --------- What does this mean? Is it just an informational message that the boost worked? If yes: How can I switch off this message. Looking at the RCU kernel threads I see the following: ps ax -o cmd,rtprio,lastcpu | grep rcu [rcuc/0] 1 0 [rcun/0] 99 0 [rcub/0] 97 0 [rcun/1] 99 0 [rcub/1] 97 0 [rcuc/1] 1 1 [rcuc/2] 1 2 [rcuc/3] 1 3 [rcuc/4] 1 4 [rcuc/5] 1 5 [rcuc/6] 1 0 [rcuc/7] 1 7 What is really unclear to me is the fact that there is a [rcun/0] and [rcun/1] but no /2 , /3, ... (the same with rcub). Also, the "lastcpu" of [rcun/1] and [rcub/1] is 0 which is fairly surprising to me (I expected the CPU 1 here). Any help or feedback on this is welcome. Best regards Mathias -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html