public class SpeedTest_NIO {
static long start=0, stop=0;
public static void main(String[] args) {
MulticastSocket sock=null;
Receiver receiver=null;
int num_msgs=1000;
byte[] buf;
DatagramPacket packet;
InetAddress group_addr=null;
int[][] matrix;
boolean jg=false; // use JGroups channel instead of UDP MulticastSocket
JChannel channel=null;
String props=null, loopback_props;
String group_name="SpeedTest-Group";
Message send_msg;
long sleep_time=1; // sleep in msecs between msg sends
boolean busy_sleep=false;
boolean yield=false;
int num_yields=0;
boolean loopback=false;
props="UDP(mcast_addr=224.0.0.36;mcast_port=55566;ip_ttl=32;" +
"ucast_send_buf_size=32000;ucast_recv_buf_size=64000;" +
"mcast_send_buf_size=32000;mcast_recv_buf_size=64000):" +
"PING(timeout=2000;num_initial_members=3):" +
"MERGE2(min_interval=5000;max_interval=10000):" +
"FD_SOCK:" +
"VERIFY_SUSPECT(timeout=1500):" +
"pbcast.NAKACK(gc_lag=50;retransmit_timeout=600,800,1200,2400,4800):" +
"UNICAST(timeout=1200):" +
"pbcast.STABLE(desired_avg_gossip=10000):" +
"FRAG(frag_size=8192;down_thread=false;up_thread=false):" +
// "PIGGYBACK(max_size=16000;max_wait_time=500):" +
"pbcast.GMS(join_timeout=5000;" +
"shun=false;print_local_addr=true):" +
"pbcast.STATE_TRANSFER";
// "PERF(details=true)";
loopback_props="LOOPBACK:" +
"PING(timeout=2000;num_initial_members=3):" +
"MERGE2(min_interval=5000;max_interval=10000):" +
"FD_SOCK:" +
"VERIFY_SUSPECT(timeout=1500):" +
"pbcast.NAKACK(gc_lag=50;retransmit_timeout=600,800,1200,2400,4800):" +
"UNICAST(timeout=5000):" +
"pbcast.STABLE(desired_avg_gossip=20000):" +
"FRAG(frag_size=16000;down_thread=false;up_thread=false):" +
"pbcast.GMS(join_timeout=5000;" +
"shun=false;print_local_addr=true):" +
"pbcast.STATE_TRANSFER";
for(int i=0; i < args.length; i++) {
if("-help".equals(args[i])) {
help();
return;
}
if("-jg".equals(args[i])) {
jg=true;
continue;
}
if("-loopback".equals(args[i])) {
loopback=true;
props=loopback_props;
continue;
}
if("-props".equals(args[i])) {
props=args[++i];
continue;
}
if("-busy_sleep".equals(args[i])) {
busy_sleep=true;
continue;
}
if("-yield".equals(args[i])) {
yield=true;
num_yields++;
continue;
}
if("-sleep".equals(args[i])) {
sleep_time=Long.parseLong(args[++i]);
continue;
}
if("-num_msgs".equals(args[i])) {
num_msgs=Integer.parseInt(args[++i]);
continue;
}
help();
return;
}
System.out.println("jg = " + jg +
"\nloopback = " + loopback +
"\nsleep = " + sleep_time +
"\nbusy_sleep=" + busy_sleep +
"\nyield=" + yield +
"\nnum_yields=" + num_yields +
"\nnum_msgs = " + num_msgs +
'\n');
try {
matrix=new int[num_msgs][2];
for(int i=0; i < num_msgs; i++) {
for(int j=0; j < matrix[i].length; j++)
matrix[i][j]=0;
}
if(jg) {
channel=new JChannel(props);
channel.connect(group_name);
}
else {
group_addr=InetAddress.getByName("224.0.0.36");
sock=new MulticastSocket(7777);
sock.joinGroup(group_addr);
}
receiver=new Receiver(sock, channel, matrix, jg);
receiver.start();
ByteBuffer bb=ByteBuffer.allocate(16);
bb.mark();
start=System.currentTimeMillis();
for(int i=0; i < num_msgs; i++) {
bb.reset();
bb.putInt(i);
buf=(byte[])(bb.array()).clone();
if(jg) {
send_msg=new Message(null, null, buf);
channel.send(send_msg);
}
else {
packet=new DatagramPacket(buf, buf.length, group_addr, 7777);
sock.send(packet);
}
if(i % 1000 == 0)
System.out.println("-- sent " + i);
matrix[i][0]=1;