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.
next prev parent 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.