[omniORB] omniorb/omnievents - How do I improve events/sec
throughput
Ian
ian_xx7 at yahoo.co.uk
Wed Oct 5 13:33:42 BST 2005
--- Alex Tingle <alex.tingle at bronermetals.com> wrote:
> Hi Ian,
>
> Thanks for trying omniEvents. Sorry it's taken a couple of days to
> get
> back to you. I've been busy.
>
Alex,
No problem - less than 24 hours is a quick turn around in my book. I've
had paid for support take even longer!
> > Initially with the above setup I was getting a pretty low
> events/sec
> > rate (<100
> > from memory).
> >
> > The I discovered CYCLE_PERIOD_NS. Knocking this down to 0 got me up
> to
> > ~1300
> > events/sec. All other omniORB/omniEvents configs are as per a
> default
> > installation.
>
> It sounds like you are using a single supplier and consumer.
In my simple example at present that's correct.
> If you
> use
> lots more, you'll find that you get more events/sec through the
> system
> when you increase CYCLE_PERIOD_NS.
>
> > But is it sensible to make CYCLE_PERIOD_NS = 0 ? Are there any
> gotchas
> > looming
> > on the horizon if I do this.
>
> It all depends on how many suppliers/consumers you have, and how
> quickly messages need to be delivered. I suggest you experiment. If
> you
> make CYCLE_PERIOD_NS=0, then performance might be worse in cases
> where
> lots of suppliers & consumers are communicating on the same channel.
>
In general I'm looking at using 1 channel per client/server pair.
> > I also notice that CPU usage is still only running at around 20%
> > usage. I was
> > expecting the above to run the CPU flat out.
>
> CPU use will be higher too with a fast cycle. You are using Linux
> aren't you?
Correct (kernel 2.6.8.1).
>One user who was on Solaris found that it was much easier
>
> to soak up 100% CPU on Solaris than it was on Linux (2.4). At the
> time
> Linux's threading was a bit crude, and unexpected 10ms sleeps were
> keeping the CPU usage down.
>
> > So is there some other omniEvent / omniORB parameter that is
> > throttling my current
> > throughput.
>
> omniEvents is not designed to give you maximum bandwidth between two
> stations on a single channel. Instead it's designed to deliver
> messages
> from many suppliers to many consumer with a certain maximum latency.
>
> The idea behind CYCLE_PERIOD_NS is that you choose how quickly
> messages
> must be delivered, and you then set CYCLE_PERIOD_NS to achieve that.
> Most applications will have a requirement that says "A must respond
> to
> B's trigger within Xms". You would then set CYCLE_PERIOD_NS to X/2
> (or
> whatever).
>
So I can expect more events/sec with multiple consumer/suppliers.
That's fine. That's what my final system probably needs. But at certain
times I still need a high rate (~1000/sec) between some consumer/server
pairs at their peak. With each posted event being the result of a
remote procedure call by the consumer ( so the eventchannel will never
overflow) - as per my simple test.
At 1300 event/sec I'm probably ok. Especially if you say that will
increase with multiple client/servers.
But I'm curious to know why my test isn't using 100% CPU usage. Is
there some omniEvent() or omniORB configuration/coding modification I
can make to get it to pass more events/sec in my simple test?
If it's a rewrite of some major piece of code then I'll probably live
with it as is. If it's something I've simply missed in the
omniEvents/omniOrb documentation or my config then I'd like to try it
out.
Thanks again for the prompt reply.
cheers,
Ian
___________________________________________________________
How much free photo storage do you get? Store your holiday
snaps for FREE with Yahoo! Photos http://uk.photos.yahoo.com
More information about the omniORB-list
mailing list