Re: Question about IPI
Yuxin Ren <[email protected]>
| Newsgroups | gmane.comp.micro-kernel.l4.devel |
|---|---|
| Message-ID | <CAAKbDrdUAf+TBs3TCtad2eXPMovUb6JLXqi=jHVzuH3BdXcByg@mail.gmail.com> |
Hi, That happens during IPC loop. I am pretty there is no migration during my IPC. However the helping lock will cause migration, right? Bur I do not think this will happen in my case. Do you think something can delay the dequeue operation so that the __pending_rqq is still in the queue when next request happens? Because after I add some delay in the IPC path (add printf somewhere), the number of IPIs is exactly 4 for flex-page mapping IPC, and 2 for simple data-only IPC. Thanks a lot. Yuxin On Thu, Jul 24, 2014 at 4:46 PM, Adam Lackorzynski < [email protected]> wrote: > On Mon Jul 21, 2014 at 10:09:27 +0800, Yuxin Ren wrote: > > 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. > > As I read the code this part is handling the case of migration that > might happen to the thread. Your description does not like like threads > would move between cores. Do you see this during your IPC loop or > before? > > > > Adam > -- > Adam [email protected] > Lackorzynski http://os.inf.tu-dresden.de/~adam/ > > _______________________________________________ > l4-hackers mailing list > [email protected] > http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers > _______________________________________________ l4-hackers mailing list [email protected] http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers