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();