[Spread-users] Java API Performance

Mike Perik michaelperik at yahoo.com
Wed Apr 23 10:48:09 EDT 2008


Anyone have any idea where this latency is coming from? It makes the use of the Java API useless.

Is there anything I can do to see when the Spread daemon gets the message?  I've added milliseconds to the logging done by the daemon but I'm finding it difficult to track the receipt and sending of the application messages.

Has anyone done a JNI version of the C API?

Thanks,
Mike


--- On Mon, 4/21/08, Mike Perik <michaelperik at yahoo.com> wrote:

> From: Mike Perik <michaelperik at yahoo.com>
> Subject: Re: [Spread-users] Java API Performance
> To: spread-users at lists.spread.org
> Date: Monday, April 21, 2008, 3:52 PM
> 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
> 
> _______________________________________________
> 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