All of lore.kernel.org
 help / color / mirror / Atom feed
From: Olivier Reynet <olivier.reynet@domain.hid>
To: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Cc: xenomai@xenomai.org
Subject: Re: [Xenomai-help] Xenomai 2.5.6 and Round Robin
Date: Wed, 09 Nov 2011 11:27:17 +0100	[thread overview]
Message-ID: <4EBA5585.8050807@domain.hid> (raw)
In-Reply-To: <4EB9C562.9040107@domain.hid>

OK, I understand that it is rt_task_slice that must be used.
The problem is that i dont see any RR effect during execution.
The code is simple and inspired by this no more suitable but useful code 
: http://www.cs.ru.nl/lab/xenomai/exercises/ex06/ex06a.c .

4 non periodic tasks are set. They are calling rt_timer_spin(SPINTIME) 
to do nothing during EXECTIME.
1. They are set with priority 60.
2. Then the RR quantum is set to 3*SPINTIME.
I would like to see the task 0 preempted but it is not.  It looks like 
FIFO scheduling without RR.

Here below is the code and the output follows :

#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<sys/mman.h>
#include<native/task.h>
#include<native/timer.h>
#include<native/sem.h>
#include<rtdk.h>
#include<sys/io.h>

#define NTASKS 4
RT_TASK demo_task[NTASKS];
RT_SEM mysync;

#define EXECTIME   2e7   // execution time in ns ==>  20 ms
#define SPINTIME   1e6   // spin time in ns ==>  1 ms

void demo(void *arg)
{
     RTIME runtime;
     runtime = 0;
     rt_sem_p(&mysync,TM_INFINITE);
     // inquire current task
     RT_TASK *curtask;
     RT_TASK_INFO curtaskinfo;
     curtask=NULL;
     rt_task_inquire(curtask,&curtaskinfo);
     while(curtaskinfo.exectime<  EXECTIME) {
       rt_timer_spin(SPINTIME);  // spin cpu doing nothing
       rt_task_inquire(curtask,&curtaskinfo);
       rt_printf("Running %s priority[%d]  at : %d ms\n",curtaskinfo.name,curtaskinfo.cprio,curtaskinfo.exectime/1000000);
     }
     rt_printf("End of %s\n",curtaskinfo.name);
}

//startup code
void startup()
{
   int i;
   char  str[10] ;
   RT_TASK_INFO ataskinfo;
   // semaphore to sync task startup on
   rt_sem_create(&mysync,"MySemaphore",0,S_FIFO);
   // starting tasks
   for(i=0;i<NTASKS;i++) {
     sprintf(str,"Task%d",i);
     int priority=60;
     rt_task_create(&demo_task[i], str, 0, priority, 0);
     rt_task_start(&demo_task[i],&demo, NULL);
     rt_task_inquire(&demo_task[i],&ataskinfo);
     rt_printf("Starting task  : %s with priority %d\n",ataskinfo.name,ataskinfo.cprio);
   }
   // set RR
   for(i=0;i<NTASKS;i++) {
     RTIME quantum=rt_timer_ns2tsc(3*SPINTIME);
     int err=rt_task_slice(&demo_task[i],quantum);
     rt_printf("error set  quantum ? %d\n",err);
     rt_task_inquire(&demo_task[i],&ataskinfo);
     rt_printf("Setting round robin policy to %s with quantum %i\n",ataskinfo.name,quantum);
   }
   rt_printf("wake up all tasks\n");
   rt_sem_broadcast(&mysync);
}

void init_xenomai() {
   /* Avoids memory swapping for this program */
   mlockall(MCL_CURRENT|MCL_FUTURE);
   /* Perform auto-init of rt_print buffers if the task doesn't do so */
   rt_print_auto_init(1);
}

int main(int argc, char* argv[])
{
   printf("\nType CTRL-C to end this program\n\n" );
   // code to set things to run xenomai
   init_xenomai();
   //startup code
   startup();
   pause();
   int i;
   for (i=0;i<NTASKS;i++)
     rt_task_join(&demo_task[i]);
   return 0;
}

And the ouput :

# ./xeno_sched

Type CTRL-C to end this program

Starting task  : Task0 with priority 60
Starting task  : Task1 with priority 60
Starting task  : Task2 with priority 60
Starting task  : Task3 with priority 60
error set  quantum ? 0
Setting round robin policy to Task0 with quantum 9875004
error set  quantum ? 0
Setting round robin policy to Task1 with quantum 9875004
error set  quantum ? 0
Setting round robin policy to Task2 with quantum 9875004
error set  quantum ? 0
Setting round robin policy to Task3 with quantum 9875004
wake up all tasks
Running Task0 priority[60]  at : 1 ms
Running Task0 priority[60]  at : 2 ms
Running Task0 priority[60]  at : 3 ms
Running Task0 priority[60]  at : 4 ms
Running Task0 priority[60]  at : 5 ms
Running Task0 priority[60]  at : 6 ms
Running Task0 priority[60]  at : 7 ms
Running Task0 priority[60]  at : 8 ms
Running Task0 priority[60]  at : 9 ms
Running Task0 priority[60]  at : 10 ms
Running Task0 priority[60]  at : 11 ms
Running Task0 priority[60]  at : 12 ms
Running Task0 priority[60]  at : 13 ms
Running Task0 priority[60]  at : 14 ms
Running Task0 priority[60]  at : 15 ms
Running Task0 priority[60]  at : 16 ms
Running Task0 priority[60]  at : 17 ms
Running Task0 priority[60]  at : 18 ms
Running Task0 priority[60]  at : 19 ms
Running Task0 priority[60]  at : 20 ms
End of Task0
Running Task1 priority[60]  at : 1 ms
Running Task1 priority[60]  at : 2 ms
Running Task1 priority[60]  at : 3 ms
Running Task1 priority[60]  at : 4 ms
Running Task1 priority[60]  at : 5 ms
Running Task1 priority[60]  at : 6 ms
Running Task1 priority[60]  at : 7 ms
Running Task1 priority[60]  at : 8 ms
Running Task1 priority[60]  at : 9 ms
Running Task1 priority[60]  at : 10 ms
Running Task1 priority[60]  at : 11 ms
Running Task1 priority[60]  at : 12 ms
Running Task1 priority[60]  at : 13 ms
Running Task1 priority[60]  at : 14 ms
Running Task1 priority[60]  at : 15 ms
Running Task1 priority[60]  at : 16 ms
Running Task1 priority[60]  at : 17 ms
Running Task1 priority[60]  at : 18 ms
Running Task1 priority[60]  at : 19 ms
Running Task1 priority[60]  at : 20 ms
End of Task1
Running Task2 priority[60]  at : 1 ms
Running Task2 priority[60]  at : 2 ms
Running Task2 priority[60]  at : 3 ms
Running Task2 priority[60]  at : 4 ms
Running Task2 priority[60]  at : 5 ms
Running Task2 priority[60]  at : 6 ms
Running Task2 priority[60]  at : 7 ms
Running Task2 priority[60]  at : 8 ms
Running Task2 priority[60]  at : 9 ms
Running Task2 priority[60]  at : 10 ms
Running Task2 priority[60]  at : 11 ms
Running Task2 priority[60]  at : 12 ms
Running Task2 priority[60]  at : 13 ms
Running Task2 priority[60]  at : 14 ms
Running Task2 priority[60]  at : 15 ms
Running Task2 priority[60]  at : 16 ms
Running Task2 priority[60]  at : 17 ms
Running Task2 priority[60]  at : 18 ms
Running Task2 priority[60]  at : 19 ms
Running Task2 priority[60]  at : 20 ms
End of Task2
Running Task3 priority[60]  at : 1 ms
Running Task3 priority[60]  at : 2 ms
Running Task3 priority[60]  at : 3 ms
Running Task3 priority[60]  at : 4 ms
Running Task3 priority[60]  at : 5 ms
Running Task3 priority[60]  at : 6 ms
Running Task3 priority[60]  at : 7 ms
Running Task3 priority[60]  at : 8 ms
Running Task3 priority[60]  at : 9 ms
Running Task3 priority[60]  at : 10 ms
Running Task3 priority[60]  at : 11 ms
Running Task3 priority[60]  at : 12 ms
Running Task3 priority[60]  at : 13 ms
Running Task3 priority[60]  at : 14 ms
Running Task3 priority[60]  at : 15 ms
Running Task3 priority[60]  at : 16 ms
Running Task3 priority[60]  at : 17 ms
Running Task3 priority[60]  at : 18 ms
Running Task3 priority[60]  at : 19 ms
Running Task3 priority[60]  at : 20 ms
End of Task3






Le 09/11/2011 01:12, Gilles Chanteperdrix a écrit :
> See also ksrc/skins/native/API.CHANGES in xeny omai sources.



  reply	other threads:[~2011-11-09 10:27 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-08 21:06 [Xenomai-help] Xenomai 2.5.6 and Round Robin Olivier Reynet
2011-11-09  0:12 ` Gilles Chanteperdrix
2011-11-09 10:27   ` Olivier Reynet [this message]
2011-11-09 11:02     ` Gilles Chanteperdrix
2011-11-09 11:41       ` Olivier Reynet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4EBA5585.8050807@domain.hid \
    --to=olivier.reynet@domain.hid \
    --cc=gilles.chanteperdrix@xenomai.org \
    --cc=xenomai@xenomai.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.