[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