comp.lang.ada
 help / color / mirror / Atom feed
From: singo <sander.ingo@gmail.com>
Subject: Re: Task Priorities on Ubuntu Linux
Date: Thu, 10 Dec 2009 00:27:47 -0800 (PST)
Date: 2009-12-10T00:27:47-08:00	[thread overview]
Message-ID: <ed379fae-24d9-4f7e-b7eb-c0489154746a@k17g2000yqh.googlegroups.com> (raw)
In-Reply-To: dcade4ed-6b35-4e23-9659-10a3948652a3@g26g2000yqe.googlegroups.com

On Dec 9, 10:20 pm, sjw <simon.j.wri...@mac.com> wrote:
> On Dec 9, 2:34 pm, singo <sander.i...@gmail.com> wrote:
>
>
>
> > Hi,
>
> > Another question on the real-time annex and its implementation in
> > gnat-4.3 (Ubuntu Linux).
>
> > When I use different task priorities I get an - at least for me -
> > unexpected behavior... I have defined 10 tasks with different
> > priority. When I run my program, I expect only one task per processor
> > (this means four on my quad-core machine) to run. However,
> > unexpectedly all 10 tasks are run on my machine.
>
> > Is this because the tasks are mapped on the underlying OS (here
> > Linux), which then instead schedules the tasks of different priority
> > with some kind of time-slicing (round-robin) approach? I would
> > appreciate some clarification in this matter.
>
> > Best regards
>
> > Ingo
>
> > P.S: Here comes my example program:
>
> > pragma Task_Dispatching_Policy(FIFO_Within_Priorities);
> > pragma Queuing_Policy(Priority_Queuing);
>
> > with Ada.Text_IO;
> > use Ada.Text_IO;
>
> > with Ada.Real_Time;
> > use Ada.Real_Time;
>
> > procedure TaskPriorities is
>
> >    task type T(Id: Integer) is
> >       pragma Priority(Id);
> >    end;
>
> >    task body T is
> >    begin
> >       loop
> >          Put(Integer'Image(Id));
> >       end loop;
> >    end T;
>
> >    Task10 : T(11);
> >    Task9  : T(12);
> >    Task8  : T(13);
> >    Task7  : T(14);
> >    Task6  : T(15);
> >    Task5  : T(16);
> >    Task4  : T(17);
> >    Task3  : T(18);
> >    Task2  : T(19);
> >    Task1  : T(20);
>
> > begin
> >    null;
> > end TaskPriorities;
>
> It used to be that on Linux you would have to run as root for
> specified priorities to be respected.
>
> FWIW, on Mac OS X Dmitry's program behaves much the same as an
> ordinary user and as root: variously,
>
> $ ./taskpriorities
>  11 13 12 15 14 18 17 20 19^C
> $ ./taskpriorities
>  19 20 18 16 14^C
> $ ./taskpriorities
>  19 20 18 17^C
> $ sudo ./taskpriorities
> Password:
>  19 20 18 16 14^C

Thanks a lot for the information!

Yes, you are right! In order to get a correct behavior I have to run
the program as root (which I was not aware of). I made a small change
of Dimitri's program (I moved the 'Put' statement after the loop),
i.e.

   task body T is
      I : Integer;
   begin
      for Index in Integer'Range loop
         I := Index;
      end loop;
      Put (Integer'Image (Id));
   end T;

and then I get the following expected output:

On a machine with four cores:

> sudo ./taskpriorities
 17 18 20 19 16 15 14 13 12 11

On a machine with one core:

> sudo ./taskpriorities
 20 19 18 17 16 15 14 13 12 11

Best regards

Ingo



      reply	other threads:[~2009-12-10  8:27 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-09 14:34 Task Priorities on Ubuntu Linux singo
2009-12-09 15:10 ` Dmitry A. Kazakov
2009-12-09 21:20 ` sjw
2009-12-10  8:27   ` singo [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox