[Spread-users] Java API Performance
Mike Perik
michaelperik at yahoo.com
Mon Apr 21 16:52:06 EDT 2008
I run a second instance of the process that only receives and it has the same latency issue. The sender doesn't have to listen but I am doing it to check the latency there as well.
I've removed the sender doing a receive and the latency dropped to approx 1 ms.
Why would the latency increase when I attempt to receive?
If I don't do a receive (I also don't join the group the message is sent to) and just blast the messages out the latency is high also. If I sleep or 1 ms after doing the send the latency drops down to ~1 ms again.
I also did a test where I sent the first 2500 messages without joining the "LATENCY" group and the times were ~1 ms. On the 2500th message I had the sender joining the "LATENCY" group and the latency number jumped from between 2ms - 41 ms. Seems to increment by 2 ms per order.
Recver Latency: 2
Recver Latency: 41
Recver Latency: 39
Recver Latency: 37
Recver Latency: 35
Recver Latency: 33
Recver Latency: 31
Recver Latency: 29
Recver Latency: 27
Recver Latency: 25
Recver Latency: 23
Recver Latency: 21
Recver Latency: 19
Recver Latency: 17
Recver Latency: 16
Recver Latency: 14
Recver Latency: 12
Recver Latency: 10
Recver Latency: 8
Recver Latency: 6
Recver Latency: 4
Recver Latency: 2
Recver Latency: 41
Recver Latency: 39
Recver Latency: 37
Recver Latency: 35
Recver Latency: 33
Recver Latency: 31
Recver Latency: 29
Recver Latency: 27
Recver Latency: 25
Recver Latency: 24
Recver Latency: 22
Recver Latency: 20
Recver Latency: 18
Recver Latency: 16
Recver Latency: 14
Recver Latency: 12
Recver Latency: 10
Recver Latency: 8
Recver Latency: 6
Recver Latency: 4
Recver Latency: 2
Recver Latency: 41
Recver Latency: 39
Recver Latency: 37
Any ideas on how I can be a subscriber and a publisher on the same group without incurring this huge time penalty?
Am I doing something wrong here?
Mike
--- On Mon, 4/21/08, John Keating <jkeating at ca.afilias.info> wrote:
> From: John Keating <jkeating at ca.afilias.info>
> Subject: Re: [Spread-users] Java API Performance
> To: michaelperik at yahoo.com
> Cc: spread-users at lists.spread.org
> Date: Monday, April 21, 2008, 2:51 PM
> When you're the sender, you're also calling
> receiveMessage()...should you?
>
> Mike Perik wrote:
> > Has anyone done any basic performance tests with the
> Java API?
> > I'm seeing what I would consider lengthy sending
> times.
> >
> > My test involves a process sending 5000 messages. The
> message is the current time with the granularity to
> milliseconds. The sending process sends a message and then
> receives the message. When it receives the message is takes
> time it received it and subtracts the sending time. I'm
> seeing a round trip time of 39-41 milliseconds. I did the
> same test in C and the round trip time is more like 1 ms.
> >
> > Maybe I'm doing something incorrectly, if so
> I'm not sure what it is and would be interested in any
> help you can give me.
> >
> > Below is the code I'm using.
> >
> > Thank you for your help,
> > Mike
> >
> >
> > import spread.*;
> > import java.net.*;
> >
> > public class spreadlatency
> > {
> > SpreadConnection _sc;
> > boolean _sender = false;
> > MessageFactory _mf;
> > static public void main(String args[]) throws
> Exception
> > {
> > SpreadConnection sc = new SpreadConnection();
> > spreadlatency sl = new spreadlatency(sc,
> args.length == 0 ? true : false);
> > sc.connect(InetAddress.getLocalHost(), 4803,
> null, false, false);
> > sl.run();
> > }
> >
> > public spreadlatency(SpreadConnection sc, boolean
> sender) throws Exception
> > {
> > _sc = sc;
> > _sender = sender;
> > }
> >
> > public void run()
> > {
> > SpreadGroup sg = new SpreadGroup();
> > try {
> > sg.join(_sc, "LATENCY");
> > }
> > catch (Exception ex)
> > {
> > ex.printStackTrace();
> > }
> > if (_sender == true)
> > {
> > SpreadMessage sm = new SpreadMessage();
> > short y = 1000;
> > sm.setType(y);
> > sm.addGroup("LATENCY");
> > int x = 0;
> > while (x++ < 5000)
> > {
> > // String st =
> "";
> > long t = System.currentTimeMillis();
> > // st += t;
> > //
> sm.setData(st.getBytes());
> > try {
> > sm.setObject(new Long(t));
> > _sc.multicast(sm);
> > receiveMessage();
> > }
> > catch (Exception ex)
> > {
> > ex.printStackTrace();
> > }
> >
> > }
> > }
> > else
> > {
> > int x = 0;
> > while (x++ < 5000)
> > {
> > receiveMessage();
> > }
> > }
> > }
> >
> > void receiveMessage()
> > {
> > try {
> > SpreadMessage sm = _sc.receive();
> > short type = sm.getType();
> > if (type == 1000)
> > {
> > // String s = new
> String(sm.getData());
> > // Long l =
> Long.valueOf(s);
> > Long l = (Long)sm.getObject();
> > if (_sender == true)
> > {
> > System.out.println("Sender
> Latency: " + (System.currentTimeMillis() -
> l.longValue()));
> > }
> > else
> > {
> > System.out.println("Recver
> Latency: " + (System.currentTimeMillis() -
> l.longValue()));
> > }
> > }
> > }
> > catch (Exception ex)
> > {
> > ex.printStackTrace();
> > }
> > }
> > }
> >
> >
> >
> >
> >
> >
> ____________________________________________________________________________________
> > Be a better friend, newshound, and
> > know-it-all with Yahoo! Mobile. Try it now.
> http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
> >
> > _______________________________________________
> > Spread-users mailing list
> > Spread-users at lists.spread.org
> > http://lists.spread.org/mailman/listinfo/spread-users
> >
____________________________________________________________________________________
Be a better friend, newshound, and
know-it-all with Yahoo! Mobile. Try it now. http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
More information about the Spread-users
mailing list