Thanks for the reply.
The architecture is x86. For pistachio, I got ~2000 cycles for a round-trip IPC with all kernel debug features disabled. With kernel debug (i.e. tracebuffer etc.) features, the number is about 300K cycles.
For Fiasco.OC, the number is also around 300K cycles no matter jdb debugging switch is on or off.
All these numbers are obtained from Virtualbox simulations (4-core processors).
In the pingpong benchmark (found in pistachio userland), I replaced the L4_Ipc call with a send/wait pair. Specifically, ping thread does L4_Send/L4_Wait; and pong thread does L4_Wait/L4_Send. These two calls are changed to l4_ipc_wait and l4_ipc_send for Fiasco.OC. I don't understand why my pingpong program shows such slow IPCs.
Chen
On Fri, Feb 4, 2011 at 3:43 PM, Gernot Heiser gernot@cse.unsw.edu.au wrote:
What are the actual figures, and on what processor? Practical limits on IPC round-trip times (i.e. ping-pong) depend on the architecture.
On x86 it is in the range of 500-5000 cycles depending on the microarchitecture (worst on Pentium-4, better on more recent implementations, and historically better on AMD than on Intel processors, although that might have changed since I last looked at it in detail). Pistachio IPC performance used to be fairly optimal, but probably hasn't been maintained, so may not show the full benefit of the more recent microarchitectures. But if you're seeing more than 2000 cycles round-trip on a recent x86 processor you're a fair bit away from optimal.
For comparison, on ARM we're seeing about 300-500 cycles depending on architecture version and core implementation.
Gernot
On 04/02/2011, at 10:47 , Chen Tian wrote:
Hello,
I am trying to compare the IPC performance between Pistachio and Fiasco.OC. I found the performances are almost the same for the Pingpong benchmark (I modified the one in Pistachio so that it can run with Fiasco.OC as well). I notice that if I turn off "tracebuffer" and "perfmon counter" switches when compiling Pistachio kernel, the IPC of Pistachio is much faster -- about 150x speedup for Pingpong! I tried to do the same thing for Fiasco.OC by turning off debugging related switches. However, I was not able to observe any performance improvement. I wonder if what config options that can dramatically affect the IPC performance for Fiasco.OC.
Also, I will appreciate it if anyone could explain to me the major IPC implementation differences.
Thanks,
Chen
l4-hackers mailing list l4-hackers@os.inf.tu-dresden.de http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers