-2

My system is using Arm cortexa7@1GHz with realtime patchset Linux 4.4.138-rt19 from CIP Community: v4.4.138-cip25-rt19

I has run a prio-preempt.c to verify priority preemption on my system. However I am running an issue: the system only probably runs a number of threads lower than 27 created threads.

About theorical aspect, the ltp app prio-preempt creates 27 worker_threads with different priorities, N busy_threads (N: depend on number of CPU(s), in my case N = 2) with high priority, and master_thread (highest priority).

When deploying the app to the board, threads_running is always lower than 27 while create_fifo_thread(worker_thread,i,...) successfully created 27 worker_thread(s). I ran the same program above on cortexa15@1.5GHz, the issue didn't happen.

For further vision, I thought the issue might come from Linux RT scheduler unable to waken sleep threads after bmutex lock is released.

Anyone has the same problem to me ? plz share your idea.

Community
  • 1
  • 1
Thảo M. Hoàng
  • 1,224
  • 3
  • 20
  • 42

1 Answers1

0

Basically, in Linux FULL Preemptive RT system, higher priority threads always preempt lower priority threads to take control of CPU(s). In my case, the issue actually happened on even higher speed processor, I tested on dual cortexa15@1.5 GHz or quad cortexa15@1.4GHz. However, the failed rate was lower much.

Because the issue randomly happened, in cases of failure, all CPU(s) concurrently do the higher priority threads and forget the lower priority threads.

So, I assigned a certain CPU to do a specific thread (high pri).

#define CPU_0 0x01 /* Bind CPU 0 */
#define CPU_1 0x02 /* Bind CPU 1 */
#define CPU_2 0x04 /* Bind CPU 2 */
#define CPU_3 0x08 /* Bind CPU 3 */
...
{
    unsigned long cpuset = CPU_0;

    if (pthread_setaffinity_np(pthread_self(), sizeof(cpuset), &cpuset) < 0) {
       printf("failed to pthread_setaffinity_np\n");
    }
}

And yield other CPU(s) to do other jobs (low pri). My system doesn't hang-up any more and probably runs all 27 worker_thread (low-pri threads)

Thảo M. Hoàng
  • 1,224
  • 3
  • 20
  • 42