Author: mrogers
Date: 2006-09-17 11:40:34 +0000 (Sun, 17 Sep 2006)
New Revision: 10484

Modified:
   trunk/apps/load-balancing-sims/phase6/Peer.java
   trunk/apps/load-balancing-sims/phase6/Sim.java
Log:
Simpler interleaving of searches & transfers

Modified: trunk/apps/load-balancing-sims/phase6/Peer.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/Peer.java     2006-09-15 16:56:02 UTC 
(rev 10483)
+++ trunk/apps/load-balancing-sims/phase6/Peer.java     2006-09-17 11:40:34 UTC 
(rev 10484)
@@ -33,6 +33,7 @@
        private DeadlineQueue transferQueue; // Outgoing transfers
        private CongestionWindow window; // AIMD congestion window
        private double lastTransmission = 0.0; // Clock time
+       private boolean tgif = false; // "Transfers go in first" toggle

        // Receiver state
        private HashSet<Integer> rxDupe; // Detect duplicates by sequence number
@@ -213,20 +214,29 @@
        // Add messages to a packet
        private void pack (Packet p)
        {
-               // Add one search, then one transfer, then as many searches as
-               // will fit. This ensures that neither searches nor transfers
-               // starve as long as at least *some* searches are small enough
-               // to share a packet with a transfer.
-               
-               if (searchQueue.size > 0
-               && p.size + searchQueue.headSize() <= Packet.MAX_SIZE)
-                       p.addMessage (searchQueue.pop());
-               if (transferQueue.size > 0
-               && p.size + transferQueue.headSize() <= Packet.MAX_SIZE)
-                       p.addMessage (transferQueue.pop());
-               while (searchQueue.size > 0
-               && p.size + searchQueue.headSize() <= Packet.MAX_SIZE)
-                       p.addMessage (searchQueue.pop());
+               // Alternate between giving searches and transfers priority
+               if (tgif) {
+                       // Transfers go in first
+                       while (transferQueue.size > 0
+                       && p.size + transferQueue.headSize() <= Packet.MAX_SIZE)
+                               p.addMessage (transferQueue.pop());
+                       // Fill any remaining space with searches
+                       while (searchQueue.size > 0
+                       && p.size + searchQueue.headSize() <= Packet.MAX_SIZE)
+                               p.addMessage (searchQueue.pop());
+                       tgif = false;
+               }
+               else {
+                       // Searches go in first
+                       while (searchQueue.size > 0
+                       && p.size + searchQueue.headSize() <= Packet.MAX_SIZE)
+                               p.addMessage (searchQueue.pop());
+                       // Fill any remaining space with transfers
+                       while (transferQueue.size > 0
+                       && p.size + transferQueue.headSize() <= Packet.MAX_SIZE)
+                               p.addMessage (transferQueue.pop());
+                       tgif = true;
+               }
        }

        // Remove messages from a packet and deliver them to the node

Modified: trunk/apps/load-balancing-sims/phase6/Sim.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/Sim.java      2006-09-15 16:56:02 UTC 
(rev 10483)
+++ trunk/apps/load-balancing-sims/phase6/Sim.java      2006-09-17 11:40:34 UTC 
(rev 10484)
@@ -28,6 +28,9 @@
                int key = Node.locationToKey (Math.random());
                Event.schedule (n0, 0.0, Node.GENERATE_SSK_INSERT, key);
                Event.schedule (n4, 30.0, Node.GENERATE_SSK_REQUEST, key);
+               key = Node.locationToKey (Math.random());
+               Event.schedule (n3, 60.0, Node.GENERATE_CHK_INSERT, key);
+               Event.schedule (n1, 90.0, Node.GENERATE_CHK_REQUEST, key);

                // Run the simulation
                Event.run();


Reply via email to