Question about IPI

Yuxin Ren ryx at gwmail.gwu.edu
Mon Jul 21 04:09:27 CEST 2014


Thank you so much.
I think I have found the reson. But I cannot understand the logic of that
code.
In the Context::enqueue_drq method, there is a piece of code to determin if
IPI is needed.
          if (!_pending_rq.queued())
          {
              if (!q.first())
                    ipi = true;
              q.enqueue(&_pending_rq);
          }
In my understanding, the logic behind this is to check if _pending_rq is
queued first, if it is queued, it's done; else enqueue it.
And check if the queue is empty. If it is empty, IPI is needed, else this
request can be picked up by IPI of other request.
The problem is I cannot image in what case the _pending_rq is already
queued, at least in my program.
My scenario is: there is only one client and one server in different core,
and client sends ipc in a tight loop. I think each time the server receives
the request, it should dequeue _pending_rq, so it is not possible for
client to see the _pending_rq is queued when it wants to ipc.But I observed
this indeed happan sometime.
I hope I descibe my question clearly.
Could you give me some hints?

Best,
Yuxin


On Mon, Jul 21, 2014 at 5:23 AM, Adam Lackorzynski <
adam at os.inf.tu-dresden.de> wrote:

> On Thu Jul 17, 2014 at 13:03:31 -0400, Yuxin Ren wrote:
> > Now I want to how many IPIs are sent during an IPC. So I add a counter
> for
> > IPI in the kernel, and in the user level, there is a client sending IPC
> to
> > a server on another core.
> > But I found some behavior are very strange.
> >
> > 1. The total number of IPI are not multiple times of the number of IPC.
> It
> > seems that there are some "extra IPIs", and with the number of IPC
> > increases, the number of "extra IPIs" are also increasing.
>
> Well, as we already discussed, depending on the situation there might be
> two or four IPIs. Do you mean that with 'extra IPIs'?
>
> >   So my question is if there are some background program in the kernel or
> > L4Re to send IPIs?
>
> In user-land there's nothing per default that runs on other CPUs, so no.
> The kernel will also only send IPIs around when necessary (what else :) )
> such as when doing IPC.
>
> > 2. If I add printf statement in the kernel, the number of IPIs are also
> > increasing. Does printf in the kernel cause sending IPI? If it does, is
> > there any methods to avoid this. Like in Linux, it has printk function in
> > the kernel.
>
> printf in the kernel does not use IPIs. But I could image that is alters
> timing and thus order which can lead to more IPIs for IPC (as above).
>
>
>
> Adam
> --
> Adam                 adam at os.inf.tu-dresden.de
>   Lackorzynski         http://os.inf.tu-dresden.de/~adam/
>
> _______________________________________________
> l4-hackers mailing list
> l4-hackers at os.inf.tu-dresden.de
> http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://os.inf.tu-dresden.de/pipermail/l4-hackers/attachments/20140721/f56568f2/attachment.html>


More information about the l4-hackers mailing list