[Udt-java-commits] SF.net SVN: udt-java:[36] udt-java/trunk/src
Status: Alpha
Brought to you by:
bschuller
|
From: <bsc...@us...> - 2010-05-24 19:15:39
|
Revision: 36
http://udt-java.svn.sourceforge.net/udt-java/?rev=36&view=rev
Author: bschuller
Date: 2010-05-24 19:15:33 +0000 (Mon, 24 May 2010)
Log Message:
-----------
Modified Paths:
--------------
udt-java/trunk/src/main/java/udt/UDTSender.java
udt-java/trunk/src/main/java/udt/packets/DataPacket.java
udt-java/trunk/src/main/java/udt/util/Util.java
udt-java/trunk/src/test/java/udt/performance/TestUDTLargeData.java
udt-java/trunk/src/test/java/udt/performance/UDPTest.java
Modified: udt-java/trunk/src/main/java/udt/UDTSender.java
===================================================================
--- udt-java/trunk/src/main/java/udt/UDTSender.java 2010-05-01 20:49:52 UTC (rev 35)
+++ udt-java/trunk/src/main/java/udt/UDTSender.java 2010-05-24 19:15:33 UTC (rev 36)
@@ -34,10 +34,10 @@
import java.io.IOException;
import java.util.Map;
+import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
@@ -124,7 +124,7 @@
statistics=session.getStatistics();
senderLossList=new SenderLossList();
sendBuffer=new ConcurrentHashMap<Long, DataPacket>(session.getFlowWindowSize(),0.75f,2);
- sendQueue = new LinkedBlockingQueue<DataPacket>(1000);
+ sendQueue = new ArrayBlockingQueue<DataPacket>(1000);
lastAckSequenceNumber=session.getInitialSequenceNumber();
waitForAckLatch.set(new CountDownLatch(1));
waitForSeqAckLatch.set(new CountDownLatch(1));
@@ -316,11 +316,11 @@
/**
* sender algorithm
*/
+ long iterationStart;
public void senderAlgorithm()throws InterruptedException, IOException{
while(!paused){
-
- long iterationStart=Util.getCurrentTime(); //last packet send time?
-
+ iterationStart=Util.getCurrentTime();
+
//if the sender's loss list is not empty
if (!senderLossList.isEmpty()) {
Long entry=senderLossList.getFirstEntry();
@@ -336,7 +336,7 @@
if(unAcknowledged<session.getCongestionControl().getCongestionWindowSize()
&& unAcknowledged<session.getFlowWindowSize()){
//check for application data
- DataPacket dp=sendQueue.poll();
+ DataPacket dp=sendQueue.poll(Util.SYN,TimeUnit.MICROSECONDS);
if(dp!=null){
send(dp);
largestSentSequenceNumber=dp.getPacketSequenceNumber();
@@ -345,7 +345,7 @@
statistics.incNumberOfMissingDataEvents();
}
}else{
- //congestion window full, should we *really* wait for an ack?!
+ //congestion window full, wait for an ack
if(unAcknowledged>=session.getCongestionControl().getCongestionWindowSize()){
statistics.incNumberOfCCWindowExceededEvents();
}
@@ -355,7 +355,7 @@
//wait
if(largestSentSequenceNumber % 16 !=0){
- double snd=session.getCongestionControl().getSendInterval();
+ long snd=(long)session.getCongestionControl().getSendInterval();
long passed=Util.getCurrentTime()-iterationStart;
int x=0;
while(snd-passed>0){
@@ -376,13 +376,6 @@
* @param entry
*/
protected void handleResubmit(Long seqNumber){
- //long seqNumber=entry.getSequenceNumber();
- //TODO
- //if the current seqNumber is 16n,check the timeOut in the
- //loss list and send a message drop request.
- //if((seqNumber%16)==0){
- //sendLossList.checkTimeOut(timeToLive);
- //}
try {
//retransmit the packet and remove it from the list
DataPacket pktToRetransmit = sendBuffer.get(seqNumber);
Modified: udt-java/trunk/src/main/java/udt/packets/DataPacket.java
===================================================================
--- udt-java/trunk/src/main/java/udt/packets/DataPacket.java 2010-05-01 20:49:52 UTC (rev 35)
+++ udt-java/trunk/src/main/java/udt/packets/DataPacket.java 2010-05-24 19:15:33 UTC (rev 36)
@@ -152,9 +152,10 @@
*/
public byte[] getEncoded(){
byte[] header=getHeader();
- byte[] result=new byte[header.length+data.length];
- System.arraycopy(header, 0, result, 0, header.length);
- System.arraycopy(data, 0, result, header.length, data.length);
+ //header.length is 16
+ byte[] result=new byte[16+data.length];
+ System.arraycopy(header, 0, result, 0, 16);
+ System.arraycopy(data, 0, result, 16, data.length);
return result;
}
Modified: udt-java/trunk/src/main/java/udt/util/Util.java
===================================================================
--- udt-java/trunk/src/main/java/udt/util/Util.java 2010-05-01 20:49:52 UTC (rev 35)
+++ udt-java/trunk/src/main/java/udt/util/Util.java 2010-05-24 19:15:33 UTC (rev 36)
@@ -55,11 +55,16 @@
return System.nanoTime()/1000;
}
+
+ public static final long SYN=10000;
+
+ public static final double SYN_D=10000.0;
+
/**
* get the SYN time in microseconds. The SYN time is 0.01 seconds = 10000 microseconds
* @return
*/
- public static long getSYNTime(){
+ public static final long getSYNTime(){
return 10000;
}
@@ -122,7 +127,7 @@
* @throws IOException
*/
public static void copy(InputStream source, OutputStream target, long size, boolean flush)throws IOException{
- byte[]buf=new byte[65536];
+ byte[]buf=new byte[8*65536];
int c;
long read=0;
while(true){
Modified: udt-java/trunk/src/test/java/udt/performance/TestUDTLargeData.java
===================================================================
--- udt-java/trunk/src/test/java/udt/performance/TestUDTLargeData.java 2010-05-01 20:49:52 UTC (rev 35)
+++ udt-java/trunk/src/test/java/udt/performance/TestUDTLargeData.java 2010-05-24 19:15:33 UTC (rev 36)
@@ -21,7 +21,7 @@
boolean running=false;
//how many
- int num_packets=50;
+ int num_packets=500;
//how large is a single packet
int size=1*1024*1024;
Modified: udt-java/trunk/src/test/java/udt/performance/UDPTest.java
===================================================================
--- udt-java/trunk/src/test/java/udt/performance/UDPTest.java 2010-05-01 20:49:52 UTC (rev 35)
+++ udt-java/trunk/src/test/java/udt/performance/UDPTest.java 2010-05-24 19:15:33 UTC (rev 36)
@@ -9,6 +9,7 @@
import junit.framework.TestCase;
import udt.UDPEndPoint;
+import udt.packets.DataPacket;
import udt.util.MeanValue;
/**
@@ -16,7 +17,7 @@
*/
public class UDPTest extends TestCase {
- final int num_packets=10*1000;
+ final int num_packets=10*10*1000;
final int packetSize=UDPEndPoint.DATAGRAM_SIZE;
public void test1()throws Exception{
@@ -35,8 +36,14 @@
System.out.println("Sending "+num_packets+" data blocks of <"+packetSize+"> bytes");
MeanValue v=new MeanValue("Datagram send time",false);
MeanValue v2=new MeanValue("Datagram send interval",false);
+ MeanValue v3=new MeanValue("Encoding time",false);
+
for(int i=0;i<num_packets;i++){
- dp.setData(data);
+ DataPacket p=new DataPacket();
+ p.setData(data);
+ v3.begin();
+ dp.setData(p.getEncoded());
+ v3.end();
v2.end();
v.begin();
s.send(dp);
@@ -52,6 +59,7 @@
System.out.println("Rate "+num_packets+" packets/sec");
System.out.println("Mean send time "+v.getFormattedMean()+" microsec");
System.out.println("Mean send interval "+v2.getFormattedMean()+" microsec");
+ System.out.println("Datapacket encoding time "+v3.getFormattedMean()+" microsec");
System.out.println("Server received: "+total);
}
@@ -92,7 +100,7 @@
long start=System.currentTimeMillis();
while(true){
DatagramPacket dp=handoff.poll();
- total+=dp.getLength();
+ if(dp!=null)total+=dp.getLength();
if(total==N)break;
}
long end=System.currentTimeMillis();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|