[Gs-commits] Grayskull Repository branch, master, updated. git-migration-162-g3d119f7
A ref change was pushed to the repository containing the project "Grayskull Repository". The branch, master has been updated via 3d119f79cd5a201a5d1c44af9008114a392ab91d (commit) via 32fc7e45af7fc8896a199b12240c9a9652349820 (commit) via f0c48f86c42364d03e20b0977d18b5c3f878aa83 (commit) from 3449f496d84d41d7a8c9cb3f0754b5e27fb0e987 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 3d119f79cd5a201a5d1c44af9008114a392ab91d Author: Justin Wozniak <[email protected]> Date: Mon Nov 23 10:13:55 2009 -0600 Adding Rebuild01 test series. Improved properties (cfg) naming scheme. Renamed some poorly named classes. commit 32fc7e45af7fc8896a199b12240c9a9652349820 Author: Justin Wozniak <[email protected]> Date: Thu Nov 19 13:12:18 2009 -0600 Image from wiki. commit f0c48f86c42364d03e20b0977d18b5c3f878aa83 Author: Justin Wozniak <[email protected]> Date: Thu Nov 19 11:10:07 2009 -0800 Drafting Rebuild functionality. ----------------------------------------------------------------------- Summary of changes: sim/gobs/examples/gobs.cfg | 22 ++- sim/gobs/examples/params.cfg | 26 ++-- sim/gobs/gobs/sim/KClosest.java | 2 +- sim/gobs/gobs/sim/Metric.java | 20 +- .../gobs/sim/{NodeScheme.java => NodeFactory.java} | 4 +- .../sim/{PlacementScheme.java => Placement.java} | 6 +- sim/gobs/gobs/sim/PlainFiles.java | 8 +- sim/gobs/gobs/sim/Primary.java | 5 + sim/gobs/gobs/sim/RandomNodes.java | 2 +- sim/gobs/gobs/sim/Rebuild.java | 221 ++++++++++++++++++++ sim/gobs/gobs/sim/Replicated.java | 23 +-- sim/gobs/gobs/sim/SimpleNodes.java | 2 +- sim/gobs/gobs/sim/Simulator.java | 124 +++++++++-- sim/gobs/gobs/sweep/AbstractSweep.java | 34 ++- sim/gobs/gobs/sweep/ArraySweep.java | 9 +- sim/gobs/gobs/sweep/Balance01.java | 2 +- sim/gobs/gobs/sweep/Decluster02.java | 13 +- sim/gobs/gobs/sweep/Decluster03.java | 6 +- sim/gobs/gobs/sweep/Decluster04.java | 7 +- sim/gobs/gobs/sweep/Parallelism01.java | 8 +- .../sweep/{Decluster04.java => Rebuild01.java} | 36 ++-- sim/gobs/gobs/util/Bits.java | 20 +- sim/gobs/gobs/util/Stats.java | 81 +++++++ sim/gobs/gobs/util/Tools.java | 20 ++ sim/gobs/sweeps/bl01-small.cfg | 18 +- sim/gobs/sweeps/bl01.cfg | 18 +- sim/gobs/sweeps/bl01output.cfg | 12 +- sim/gobs/sweeps/dc02kpv01.cfg | 2 +- sim/gobs/sweeps/debug.cfg | 12 +- sim/gobs/sweeps/decluster02.zsh | 7 +- sim/gobs/sweeps/kpv01.cfg | 6 +- sim/gobs/sweeps/kpv02.cfg | 6 +- sim/gobs/sweeps/kpv03.cfg | 6 +- sim/gobs/sweeps/kpv04.cfg | 6 +- sim/gobs/sweeps/kpv05.cfg | 6 +- sim/gobs/sweeps/kpv06.cfg | 4 +- sim/gobs/sweeps/kpv_lit_big.cfg | 10 +- sim/gobs/sweeps/kpv_lit_small.cfg | 10 +- sim/gobs/sweeps/kpv_output.cfg | 12 +- sim/gobs/sweeps/kpv_scenario.cfg | 10 +- sim/gobs/sweeps/kpv_small.cfg | 10 +- sim/gobs/sweeps/output.cfg | 12 +- sim/gobs/sweeps/pll01.cfg | 6 +- sim/gobs/sweeps/pll_output.cfg | 12 +- sim/gobs/sweeps/quick04.cfg | 34 ++-- sim/gobs/sweeps/rb01-small.cfg | 89 ++++++++ ...ystem_size_20-1000.cfg => system_size_1000.cfg} | 12 +- sim/gobs/sweeps/system_size_100_1000.cfg | 10 +- sim/gobs/sweeps/system_size_20-1000.cfg | 10 +- sim/gobs/sweeps/system_size_pdsi_100-1000.cfg | 2 +- sim/gobs/sweeps/system_size_pdsi_20-40.cfg | 2 +- sim/gobs/wiki/PlacementHierarchy.odg | Bin 0 -> 15558 bytes sim/gobs/wiki/PlacementHierarchy.png | Bin 0 -> 17710 bytes sim/gobs/wiki/kpv01.cfg | 6 +- sim/gobs/wiki/kpv02.cfg | 6 +- sim/gobs/wiki/kpv03.cfg | 6 +- sim/gobs/wiki/kpv04.cfg | 6 +- sim/gobs/wiki/kpv05.cfg | 6 +- sim/gobs/wiki/kpv06.cfg | 4 +- sim/gobs/wiki/kpv_lit_big.cfg | 10 +- sim/gobs/wiki/kpv_lit_small.cfg | 10 +- sim/gobs/wiki/kpv_output.cfg | 12 +- sim/gobs/wiki/kpv_scenario.cfg | 10 +- sim/gobs/wiki/kpv_small.cfg | 10 +- sim/gobs/wiki/system_size_100_1000.cfg | 10 +- sim/gobs/wiki/system_size_20-1000.cfg | 10 +- 66 files changed, 830 insertions(+), 321 deletions(-) rename sim/gobs/gobs/sim/{NodeScheme.java => NodeFactory.java} (81%) rename sim/gobs/gobs/sim/{PlacementScheme.java => Placement.java} (96%) create mode 100644 sim/gobs/gobs/sim/Rebuild.java copy sim/gobs/gobs/sweep/{Decluster04.java => Rebuild01.java} (64%) create mode 100644 sim/gobs/gobs/util/Stats.java create mode 100644 sim/gobs/sweeps/rb01-small.cfg copy sim/gobs/sweeps/{system_size_20-1000.cfg => system_size_1000.cfg} (80%) create mode 100644 sim/gobs/wiki/PlacementHierarchy.odg create mode 100644 sim/gobs/wiki/PlacementHierarchy.png Diff of changes: diff --git a/sim/gobs/examples/gobs.cfg b/sim/gobs/examples/gobs.cfg index 4d9c679..ddb885c 100644 --- a/sim/gobs/examples/gobs.cfg +++ b/sim/gobs/examples/gobs.cfg @@ -1,14 +1,24 @@ # Simulator configuration -printProperties = true +# Basics: + +# Print all properties at simulation start +print.properties = true # Print nodes and objects at startup (true/false) -printInitialNodes = true +print.initialnodes = true # Print nodes and objects after each rebuild (true/false) -printNodes = false +print.nodes = false # Print object tranfers during rebuilds (true/false) -printRebuilds = true +print.rebuilds = true # Print file information (true/false) -printFiles = false +print.files = false # Print load change statistics (true/false) -printLoadDiffs = false +print.loaddiffs = false +# Print user accesses +print.accesses = false + +# Statistics: + +# Rebuild traffic over time analysis: +plot.traffic.interval = 10 diff --git a/sim/gobs/examples/params.cfg b/sim/gobs/examples/params.cfg index d3a7944..0f23672 100644 --- a/sim/gobs/examples/params.cfg +++ b/sim/gobs/examples/params.cfg @@ -17,38 +17,38 @@ writes = 0 ### Choose a PlacementScheme implementation: -#PlacementScheme = Kademlia -#PlacementScheme = Nearest -PlacementScheme = VertexGroups +#impl.placement = Kademlia +#impl.placement = Nearest +impl.placement = VertexGroups VertexGroupPrefix = 6 -ReplicaSource = primary +replica.source = primary ### Choose a NodeScheme implementation: -# NodeScheme = RandomNodes -NodeScheme = SimpleNodes +# impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes ### Choose one of the following FileFactory sections: # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 140 +file.size = 140 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 3 +file.width = 3 # FileFactory implementation TraceFiles -#FileFactory = TraceFiles +#impl.filefactory = TraceFiles # Trace filename: #filetrace = traces/test01.trace # FileFactory implementation RandomFiles -#FileFactory = RandomFiles +#impl.filefactory = RandomFiles # Max size of big files: #filebigmax = 100 # Min size of big files: diff --git a/sim/gobs/gobs/sim/KClosest.java b/sim/gobs/gobs/sim/KClosest.java index b3bc9a4..3c39645 100644 --- a/sim/gobs/gobs/sim/KClosest.java +++ b/sim/gobs/gobs/sim/KClosest.java @@ -7,7 +7,7 @@ import java.util.List; import gobs.util.BoundedSortedValues; /** - * Superclass for PlacementSchemes that place secondaries + * Superclass for Placements that place secondaries * in a k-closest manner. * */ diff --git a/sim/gobs/gobs/sim/Metric.java b/sim/gobs/gobs/sim/Metric.java index 48f2a8c..d3ad748 100644 --- a/sim/gobs/gobs/sim/Metric.java +++ b/sim/gobs/gobs/sim/Metric.java @@ -5,7 +5,7 @@ import java.math.BigInteger; import java.util.List; /** - * Superclass for PlacementSchemes with some concept of + * Superclass for Placements with some concept of * a distance metric. * */ @@ -37,37 +37,34 @@ public abstract class Metric void rebuild(SingleObject object, List<Node> nodes) { - // System.out.println("rebuild: " + object.toString(simulator)); List<Node> sites = sites(object, nodes); // System.out.println("sites.size(): " + sites.size()); Secondary secondary; - Node source = null, destination = null; + Node primarySite = lookup(object.id, nodes); + Node primaryNode = sites.get(sites.size()-1); + Node source = removeSource(object, sites); + Node destination = null; if (object instanceof Primary) { Primary primary = (Primary) object; - Node primarySite = lookup(object.id, nodes); + // System.out.println("primary: " + primarySite.name(simulator)); if (primarySite.contains(object.id)) { - source = locateSource(object, sites); destination = locateDestination(object, sites); secondary = (Secondary) primarySite.remove(object.id); destination.add(secondary); } else { - source = locateSource(object, sites); destination = primarySite; } primarySite.add(primary); } else { - Node primaryNode = sites.get(sites.size()-1); Primary primary = (Primary) primaryNode.get(object.id); - source = locateSource(object, sites); - gobs.sim.Object s = source.get(object.id); - secondary = ((SingleObject) s).toSecondary(primary); + secondary = primary.toSecondary(); destination = locateDestination(object, sites); destination.add(secondary); } @@ -83,6 +80,7 @@ public abstract class Metric source.pushes++; destination.pulls++; - printRebuild(object, source, destination); + printRebuild(object, source, destination); + simulator.currentRebuild.add(object, source, destination); } } diff --git a/sim/gobs/gobs/sim/NodeScheme.java b/sim/gobs/gobs/sim/NodeFactory.java similarity index 81% rename from sim/gobs/gobs/sim/NodeScheme.java rename to sim/gobs/gobs/sim/NodeFactory.java index 35a0974..25c8a00 100644 --- a/sim/gobs/gobs/sim/NodeScheme.java +++ b/sim/gobs/gobs/sim/NodeFactory.java @@ -7,11 +7,11 @@ import java.util.*; * Generates node addresses. * */ -public abstract class NodeScheme +public abstract class NodeFactory { Simulator simulator; - NodeScheme(Simulator simulator) + NodeFactory(Simulator simulator) { this.simulator = simulator; } diff --git a/sim/gobs/gobs/sim/PlacementScheme.java b/sim/gobs/gobs/sim/Placement.java similarity index 96% rename from sim/gobs/gobs/sim/PlacementScheme.java rename to sim/gobs/gobs/sim/Placement.java index f73f8bf..515da79 100644 --- a/sim/gobs/gobs/sim/PlacementScheme.java +++ b/sim/gobs/gobs/sim/Placement.java @@ -10,13 +10,13 @@ import gobs.util.*; * Interface to place a list of objects on a set of nodes. * */ -public abstract class PlacementScheme +public abstract class Placement { Simulator simulator; // int B; BigInteger M; - PlacementScheme(Simulator simulator) + Placement(Simulator simulator) { this.simulator = simulator; @@ -111,7 +111,7 @@ public abstract class PlacementScheme void printRebuild(SingleObject object, Node source, Node destination) { - if (simulator.bool("printRebuilds")) + if (simulator.bool("print.rebuilds")) System.out.println("rebuild: " + object.toString(simulator) + ": " + source.name(simulator) + " -> " + diff --git a/sim/gobs/gobs/sim/PlainFiles.java b/sim/gobs/gobs/sim/PlainFiles.java index ef78f72..6aa8a8c 100644 --- a/sim/gobs/gobs/sim/PlainFiles.java +++ b/sim/gobs/gobs/sim/PlainFiles.java @@ -18,10 +18,10 @@ class PlainFiles PlainFiles(Simulator simulator) { - size = simulator.integer("filesize"); - strip = simulator.integer("filestrip"); - width = simulator.integer("filewidth"); - replicas = simulator.integer("filereplicas"); + size = simulator.integer("file.size"); + strip = simulator.integer("file.strip"); + width = simulator.integer("file.width"); + replicas = simulator.integer("file.replicas"); } public File get() diff --git a/sim/gobs/gobs/sim/Primary.java b/sim/gobs/gobs/sim/Primary.java index 11760d6..d46db16 100644 --- a/sim/gobs/gobs/sim/Primary.java +++ b/sim/gobs/gobs/sim/Primary.java @@ -21,6 +21,11 @@ class Primary { super(id, size, replicas); } + + Secondary toSecondary() + { + return new Secondary(id, size, replicas, this); + } public String toString(Simulator simulator) { diff --git a/sim/gobs/gobs/sim/RandomNodes.java b/sim/gobs/gobs/sim/RandomNodes.java index c29f7b4..ff70893 100644 --- a/sim/gobs/gobs/sim/RandomNodes.java +++ b/sim/gobs/gobs/sim/RandomNodes.java @@ -11,7 +11,7 @@ import gobs.util.*; * */ class RandomNodes - extends NodeScheme + extends NodeFactory { RandomNodes(Simulator simulator) { diff --git a/sim/gobs/gobs/sim/Rebuild.java b/sim/gobs/gobs/sim/Rebuild.java new file mode 100644 index 0000000..1ce4fc7 --- /dev/null +++ b/sim/gobs/gobs/sim/Rebuild.java @@ -0,0 +1,221 @@ + +package gobs.sim; + +import java.text.DecimalFormat; +import java.util.*; + +import gobs.util.Bits; + +/** + Manages a rebuild after a fault. +*/ +class Rebuild +{ + List<Copy> copies = new ArrayList<Copy>(); + NavigableSet<Event> schedule = null; + + /** + Simulated time that rebuild started. + */ + double start = -1; + + /** + Rebuild rate in bytes/sec. + */ + static double rate = 1; + + /** + Time taken to select the next copy. + This must be large enough to differentiate + all copies based on start time. + */ + static double selectTime = 0.000001; + + static DecimalFormat df = new DecimalFormat("0.0"); + + Simulator simulator; + + Rebuild(Simulator simulator) + { + this.simulator = simulator; + } + + /** + Add this copy to the Rebuild. + */ + void add(Copy copy) + { + copies.add(copy); + } + + /** + Construct a Copy and add it to this rebuild. + */ + void add(gobs.sim.Object object, Node source, Node destination) + { + Copy copy = new Copy(object, source, destination); + add(copy); + } + + /** + Actually perform the rebuild. + @param time The time at which the copies start. + @return The time at which all copies finished. + */ + double rebuild(double time) + { + start = time; + Collections.shuffle(copies, Bits.rng); + schedule = new TreeSet<Event>(); + Queue<Copy> todo = new LinkedList<Copy>(copies); + Set<Node> busy = new HashSet<Node>(copies.size()); + NavigableSet<Copy> inflight = new TreeSet<Copy>(); + int done = 0; + while (done < copies.size()) + { + Copy copy = select(todo, busy); + if (copy != null) + { + copy.startAt(time); + schedule.add(copy); + busy.add(copy.source); + busy.add(copy.destination); + boolean b = inflight.add(copy); + if (!b) + { + System.out.println("add failed!"); + System.out.println("" + copy); + dumpInflight(inflight); + System.exit(2); + } + time += selectTime; + if (simulator.bool("print.rebuilds")) + System.out.println("start: " + copy.log()); + } + else + { + // dumpInflight(inflight); + Copy finished = inflight.pollFirst(); + if (finished == null) + { + System.out.println("inflight.pollFirst(): null"); + System.out.println("inflight.size(): " + inflight.size()); + try { Thread.sleep(1000); } + catch (Exception e) {} + continue; + } + busy.remove(finished.source); + busy.remove(finished.destination); + time = finished.finish; + if (simulator.bool("print.rebuilds")) + System.out.println("finish: " + finished.log()); + done++; + } + } + return time; + } + + int loadAt(double t) + { + int result = 0; + NavigableSet<Event> view = schedule.tailSet(new Event(t), false); + for (Iterator<Event> it = view.iterator(); it.hasNext(); ) + { + Copy copy = (Copy) it.next(); + if (copy.start <= t) + result++; + } + return result; + } + + /** + Debugging only. + */ + void dumpInflight(NavigableSet<Copy> inflight) + { + for (Iterator<Copy> it = inflight.iterator(); it.hasNext(); ) + { + System.out.println("\t" + it.next()); + } + } + + Copy select(Queue<Copy> todo, Set<Node> busy) + throws NoSuchElementException + { + for (Iterator<Copy> it = todo.iterator(); it.hasNext(); ) + { + Copy copy = it.next(); + if (! (busy.contains(copy.source) || + busy.contains(copy.destination))) + { + it.remove(); + return copy; + } + } + return null; + } + + class Event + implements Comparable<Event> + { + double finish = -1; + + Event() + {} + + Event(double finish) + { + this.finish = finish; + } + + public int compareTo(Event event) + { + return new Double(finish).compareTo(new Double(event.finish)); + } + } + + class Copy + extends Event + { + gobs.sim.Object object; + Node source; + Node destination; + boolean complete = false; + double start = 0; + + Copy(gobs.sim.Object object, Node source, Node destination) + { + + this.object = object; + this.source = source; + this.destination = destination; + } + + void startAt(double start) + { + this.start = start; + finish = start + object.size/rate; + } + + public String toString() + { + return log(); + } + + String log() + { + StringBuilder sb = new StringBuilder(128); + sb.append("copy: ") + .append(object).append(": ") + .append(source).append(" -> ").append(destination) + .append("(").append(df.format(start)); + if (finish == -1) + sb.append(")"); + else + sb.append(",").append(df.format(finish)).append(")"); + return sb.toString(); + } + } + + +} diff --git a/sim/gobs/gobs/sim/Replicated.java b/sim/gobs/gobs/sim/Replicated.java index fa0ebe8..f1cdf21 100644 --- a/sim/gobs/gobs/sim/Replicated.java +++ b/sim/gobs/gobs/sim/Replicated.java @@ -11,7 +11,7 @@ import gobs.util.*; * */ public abstract class Replicated - extends PlacementScheme + extends Placement { /** One of: primary, random, last. @@ -116,9 +116,10 @@ public abstract class Replicated /** Locate a replica of the given object on one of the given nodes - in accordance with the {@link #replicaSource} policy. + in accordance with the {@link #replicaSource} policy; + remove and return that replica from sites. */ - Node locateSource(SingleObject object, List<Node> sites) + Node removeSource(SingleObject object, List<Node> sites) { int maxTries = sites.size()+1; Node result = null; @@ -156,6 +157,8 @@ public abstract class Replicated { Node destination = null; + int origsize = sites.size(); + while (sites.size() > 0) { int r = Bits.nextInt(sites.size()); @@ -168,7 +171,10 @@ public abstract class Replicated } if (destination == null) - Tools.bail("No destination!"); + { + System.out.println(origsize); + Tools.bail("No destination: " + object); + } return destination; } @@ -184,15 +190,6 @@ public abstract class Replicated Tools.bail("Exit!"); } - - void printRebuild(SingleObject object, Node source, Node destination) - { - if (simulator.bool("printRebuilds")) - System.out.println("rebuild: " + object.toString(simulator) + - ": " + - source.name(simulator) + " -> " + - destination.name(simulator)); - } /** New id anywhere in the address space. diff --git a/sim/gobs/gobs/sim/SimpleNodes.java b/sim/gobs/gobs/sim/SimpleNodes.java index 07135b0..85ffabc 100644 --- a/sim/gobs/gobs/sim/SimpleNodes.java +++ b/sim/gobs/gobs/sim/SimpleNodes.java @@ -12,7 +12,7 @@ import gobs.util.*; * */ public class SimpleNodes - extends NodeScheme + extends NodeFactory { public SimpleNodes(Simulator simulator) { diff --git a/sim/gobs/gobs/sim/Simulator.java b/sim/gobs/gobs/sim/Simulator.java index 8214702..04aa48e 100644 --- a/sim/gobs/gobs/sim/Simulator.java +++ b/sim/gobs/gobs/sim/Simulator.java @@ -26,11 +26,16 @@ public class Simulator int reads; int writes; - public PlacementScheme placer; - public NodeScheme hub; + public Placement placer; + public NodeFactory hub; public FileFactory factory; /** + Simulated time. Starts at 0. + */ + double time = 0; + + /** Address id display mode. */ Addressable.Display display = Addressable.Display.BITS; @@ -64,6 +69,16 @@ public class Simulator Object load difference before and after faults. */ LinkedHashMap<Node,Integer> sortedDiffs; + + /** + History of rebuilds. + */ + List<Rebuild> rebuilds = new ArrayList<Rebuild>(); + + /** + Current rebuild in progress. + */ + Rebuild currentRebuild = null; // static Simulator current; static final int maxTries = 10; @@ -119,7 +134,7 @@ public class Simulator else Bits.init(true); - simulator.execute(); + simulator.execute(); } void path(String path) @@ -151,12 +166,12 @@ public class Simulator */ public void setup() { - if (bool("printProperties")) + if (bool("print.properties")) printProperties(); setupBasics(); setupFileFactory(); - setupPlacementScheme(); + setupPlacement(); setupNodes(); } @@ -172,9 +187,9 @@ public class Simulator void setupFileFactory() { - String factoryName = properties.getProperty("FileFactory"); + String factoryName = properties.getProperty("impl.filefactory"); if (factoryName == null) - bail("No FileFactory given!"); + bail("No impl.filefactory given!"); else if (factoryName.equals("PlainFiles")) factory = new PlainFiles(this); else if (factoryName.equals("TraceFiles")) @@ -187,11 +202,11 @@ public class Simulator bail("Bad filefactory name: " + factoryName); } - void setupPlacementScheme() + void setupPlacement() { - String placerName = string("PlacementScheme"); + String placerName = string("impl.placement"); ReplicaSource source = - ReplicaSource.parse(string("ReplicaSource")); + ReplicaSource.parse(string("replica.source")); if (placerName.equals("Nearest")) { display = Addressable.Display.NUMERIC; @@ -219,20 +234,20 @@ public class Simulator placer = new ParallelRUSH(this, source); } else - bail("Bad PlacementScheme name: " + placerName); + bail("Bad Placement name: " + placerName); M = placer.M; } void setupNodes() { - String nodesName = string("NodeScheme"); + String nodesName = string("impl.nodefactory"); if (nodesName.equals("RandomNodes")) hub = new RandomNodes(this); else if (nodesName.equals("SimpleNodes")) hub = new SimpleNodes(this); else - bail("Bad NodeScheme name: " + nodesName); + bail("Bad NodeFactory name: " + nodesName); nodes = new ArrayList<Node>(N); } @@ -243,7 +258,7 @@ public class Simulator stats.nodes = N; System.out.println("nodes: " + N); - if (bool("printInitialNodes")) + if (bool("print.initialnodes")) printNodes(nodes); } @@ -251,7 +266,7 @@ public class Simulator { allocateFiles(fileCount); - if (string("printFiles").equals("true")) + if (bool("print.files")) printFiles(); System.out.println("objects: " + objects.size()); } @@ -289,7 +304,7 @@ public class Simulator origCount = countObjects(nodes); // printNodes(nodes); - if (string("printInitialNodes").equals("true")) + if (bool("print.initialnodes")) printNodeObjects(nodes); } @@ -383,6 +398,7 @@ public class Simulator for (int fault = 0; fault < faults; fault++) { + startRebuild(); int index = Bits.nextInt(nodes.size()); Node failed = nodes.remove(index); System.out.println("failed: " + failed.name(this) + @@ -390,10 +406,25 @@ public class Simulator List<gobs.sim.Object> replacements = failed.objects; for (gobs.sim.Object object : replacements) placer.rebuild(object, nodes); - if (string("printNodes").equals("true")) - printNodeObjects(nodes); + if (string("print.nodes").equals("true")) + printNodeObjects(nodes); + currentRebuild.rebuild(time); + completeRebuild(); } } + + Rebuild startRebuild() + { + Rebuild rebuild = new Rebuild(this); + currentRebuild = rebuild; + return rebuild; + } + + void completeRebuild() + { + rebuilds.add(currentRebuild); + currentRebuild = null; + } void computeStatistics() { @@ -402,7 +433,8 @@ public class Simulator computePullDeclustering(total); computePushDeclustering(total); computeTotalDeclustering(total); - computeAccesses(); + computeAccesses(); + computeTraffic(); stats.results.setProperty("lostObjects", df.format(stats.lostObjects)); @@ -435,7 +467,7 @@ public class Simulator sortedDiffs = sorter.sort(diffs); // Display load differences... - if (string("printLoadDiffs").equals("true")) + if (string("print.loaddiffs").equals("true")) printLoadDifferences(sortedDiffs); } @@ -541,7 +573,7 @@ public class Simulator stats.results.setProperty("maxTotal", df.format(maxPercentTotal)); } - + void computeAccesses() { // Did the user perform any operations? @@ -576,6 +608,47 @@ public class Simulator System.out.println("accessbalance: " + df.format(ratio)); stats.results.setProperty("accessbalance", df.format(ratio)); } + + /** + Compute and print object movement traffic over time. + */ + void computeTraffic() + { + if (! has("plot.traffic.interval")) + return; + + System.out.println("TRAFFIC: "); + double interval = decimal("plot.traffic.interval"); + + List<Double> intervals = new ArrayList<Double>(); + List<List<Integer>> results = new ArrayList<List<Integer>>(); + for (Rebuild rebuild : rebuilds) + { + List<Integer> sample = new ArrayList<Integer>(); + double d = rebuild.start; + boolean done = false; + while (!done) + { + int traffic = rebuild.loadAt(d); + sample.add(traffic); + d += interval; + if (traffic == 0) + done = true; + } + results.add(sample); + } + + int length = Stats.length(results); + double d = 0; + for (int i = 0; i < length; i++) + intervals.add(d+=interval); + List<Double> avg = Stats.avg(results); + + System.out.println(avg); + + stats.results.setProperty("traffic-x", intervals.toString()); + stats.results.setProperty("traffic-y", avg.toString()); + } void lost() { @@ -649,6 +722,15 @@ public class Simulator /** Allow subordinate classes to obtain properties. + @return The value of property name as a double. + */ + public double decimal(String name) + { + return Tools.decimal(properties, name); + } + + /** + Allow subordinate classes to obtain properties. @return The value of property name. */ public String string(String name) diff --git a/sim/gobs/gobs/sweep/AbstractSweep.java b/sim/gobs/gobs/sweep/AbstractSweep.java index 8841f5f..441e132 100644 --- a/sim/gobs/gobs/sweep/AbstractSweep.java +++ b/sim/gobs/gobs/sweep/AbstractSweep.java @@ -96,20 +96,20 @@ abstract class AbstractSweep path = p; } - static List<String> values(String type, int min, int max) + static List<String> values(String step, int min, int max) { - if (type.equals("all")) + if (step.equals("all")) return all(min,max); - else if (type.equals("tens")) + else if (step.equals("tens")) return tens(min,max); - else if (type.equals("exps")) + else if (step.equals("exps")) return exps(min,max); - else if (type.equals("mids")) + else if (step.equals("mids")) return mids(min,max); - else if (type.startsWith("literal")) - return literal(type); + else if (step.startsWith("literal")) + return literal(step); else - Tools.bail("Sweep.values(): Bad values type: " + type); + Tools.bail("Sweep.values(): Bad step: " + step); return null; } @@ -215,15 +215,15 @@ abstract class AbstractSweep } /** - Set properties from memory. + Set properties from memory. */ void initialize(Properties properties) { - this.properties = properties; + this.properties = properties; } /** - Set properties from command-line. + Set properties from command-line. */ void initialize(String[] args) { @@ -237,6 +237,18 @@ abstract class AbstractSweep } /** + Seed the random number generator based on the "seed" property. + */ + static void seed(Properties properties) + { + if (Tools.has(properties, "seed")) + Bits.init(Tools.integer(properties, "seed")); + else + Bits.init(true); + Bits.lock(); + } + + /** Debugging only. */ public static void main(String[] args) diff --git a/sim/gobs/gobs/sweep/ArraySweep.java b/sim/gobs/gobs/sweep/ArraySweep.java index b966348..c23087d 100644 --- a/sim/gobs/gobs/sweep/ArraySweep.java +++ b/sim/gobs/gobs/sweep/ArraySweep.java @@ -65,7 +65,8 @@ class ArraySweep Arrays.toString(result(simulator, yname))); results.add(result(simulator, yname)); } - XYSeries series = new XYSeries(description + " N=" + v); + XYSeries series = new XYSeries(description + " " + + xname + "=" + v); arrayAvgToSeries(results, series); collection.add(series); } @@ -123,12 +124,6 @@ class ArraySweep return total/results.size(); } - static void reportRuntime() - { - long t = (new Date().getTime()-launch.getTime())/(60*1000); - System.out.println("took " + t + " minutes"); - } - /** Debugging only. */ diff --git a/sim/gobs/gobs/sweep/Balance01.java b/sim/gobs/gobs/sweep/Balance01.java index 91aec24..6ba7484 100644 --- a/sim/gobs/gobs/sweep/Balance01.java +++ b/sim/gobs/gobs/sweep/Balance01.java @@ -52,7 +52,7 @@ class Balance01 static Simulator execute(Properties properties, String scheme) { - properties.setProperty("PlacementScheme", scheme); + properties.setProperty("impl.placement", scheme); Simulator simulator = new Simulator(); simulator.initialize(properties); simulator.execute(); diff --git a/sim/gobs/gobs/sweep/Decluster02.java b/sim/gobs/gobs/sweep/Decluster02.java index 0df4748..5d03c88 100644 --- a/sim/gobs/gobs/sweep/Decluster02.java +++ b/sim/gobs/gobs/sweep/Decluster02.java @@ -29,9 +29,8 @@ class Decluster02 public static void main(String[] args) { - Bits.init(); - - properties = Sweep.getopts(args); + properties = Sweep.getopts(args); + AbstractSweep.seed(properties); String output = Tools.string(properties, "output"); int minNodes = Tools.integer(properties, "minNodes"); @@ -41,23 +40,23 @@ class Decluster02 final XYSeriesCollection collection = new XYSeriesCollection(); - properties.setProperty("PlacementScheme", "Nearest"); + properties.setProperty("impl.placement", "Nearest"); Sweep nearestSweep = new Sweep(properties); nearestSweep.repeats = Tools.integer(properties, "repeats"); nearestSweep.execute("PAST", "nodes", values, "maxPulls"); collection.addSeries(nearestSweep.series); - properties.setProperty("PlacementScheme", "Kademlia"); + properties.setProperty("impl.placement", "Kademlia"); Sweep kademliaSweep = new Sweep(properties); kademliaSweep.repeats = Tools.integer(properties, "repeats"); kademliaSweep.execute("Kademlia", "nodes", values, "maxPulls"); collection.addSeries(kademliaSweep.series); - properties.setProperty("PlacementScheme", "VertexGroups"); + properties.setProperty("impl.placement", "VertexGroups"); Sweep vgSweep = new Sweep(properties); vgSweep.repeats = Tools.integer(properties, "repeats"); - vgSweep.execute("Vertex Groups", "nodes", values, "maxTotal"); + vgSweep.execute("Vertex Groups", "nodes", values, "maxPulls"); collection.addSeries(vgSweep.series); MultiLogXPlot.plot(collection, "Maximum Rebuild Load", diff --git a/sim/gobs/gobs/sweep/Decluster03.java b/sim/gobs/gobs/sweep/Decluster03.java index e16c688..3f94021 100644 --- a/sim/gobs/gobs/sweep/Decluster03.java +++ b/sim/gobs/gobs/sweep/Decluster03.java @@ -36,20 +36,20 @@ class Decluster03 final XYSeriesCollection collection = new XYSeriesCollection(); - properties.setProperty("PlacementScheme", "Nearest"); + properties.setProperty("impl.placement", "Nearest"); Sweep nearestSweep = new Sweep(properties); nearestSweep.repeats = Tools.integer(properties, "repeats"); nearestSweep.execute("PAST", "nodes", values, "maxTotal"); collection.addSeries(nearestSweep.series); - properties.setProperty("PlacementScheme", "Kademlia"); + properties.setProperty("impl.placement", "Kademlia"); Sweep kademliaSweep = new Sweep(properties); kademliaSweep.repeats = Tools.integer(properties, "repeats"); kademliaSweep.execute("Kademlia", "nodes", values, "maxTotal"); collection.addSeries(kademliaSweep.series); - properties.setProperty("PlacementScheme", "VertexGroups"); + properties.setProperty("impl.placement", "VertexGroups"); Sweep vgSweep = new Sweep(properties); vgSweep.repeats = Tools.integer(properties, "repeats"); vgSweep.execute("Vertex Groups", "nodes", values, "maxTotal"); diff --git a/sim/gobs/gobs/sweep/Decluster04.java b/sim/gobs/gobs/sweep/Decluster04.java index 029a98c..cc6d375 100644 --- a/sim/gobs/gobs/sweep/Decluster04.java +++ b/sim/gobs/gobs/sweep/Decluster04.java @@ -6,7 +6,6 @@ import java.util.*; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; -// import gobs.sim.*; import gobs.util.*; import gobs.plot.*; @@ -40,19 +39,19 @@ class Decluster04 List<XYSeries> allSeries = new ArrayList<XYSeries>(); final XYSeriesCollection collection = new XYSeriesCollection(); - properties.setProperty("PlacementScheme", "Nearest"); + properties.setProperty("impl.placement", "Nearest"); ArraySweep pSweep = new ArraySweep(properties); pSweep.repeats = Tools.integer(properties, "repeats"); pSweep.execute("PAST", "nodes", values, "distribution"); allSeries.addAll(pSweep.collection); - properties.setProperty("PlacementScheme", "Kademlia"); + properties.setProperty("impl.placement", "Kademlia"); ArraySweep kSweep = new ArraySweep(properties); kSweep.repeats = Tools.integer(properties, "repeats"); kSweep.execute("Kademlia", "nodes", values, "distribution"); allSeries.addAll(kSweep.collection); - properties.setProperty("PlacementScheme", "VertexGroups"); + properties.setProperty("impl.placement", "VertexGroups"); ArraySweep vgSweep = new ArraySweep(properties); vgSweep.repeats = Tools.integer(properties, "repeats"); vgSweep.execute("Vertex Groups", "nodes", values, "distribution"); diff --git a/sim/gobs/gobs/sweep/Parallelism01.java b/sim/gobs/gobs/sweep/Parallelism01.java index 97e5dff..aa60684 100644 --- a/sim/gobs/gobs/sweep/Parallelism01.java +++ b/sim/gobs/gobs/sweep/Parallelism01.java @@ -10,7 +10,7 @@ import gobs.util.*; import gobs.plot.*; /** - * Modifies node count N and PlacementScheme. + * Modifies node count N and Placement. * Reports file access load balancing for files and replicas. * * Usage: Parallelism01 -n <repeats> *.cfg @@ -37,19 +37,19 @@ class Parallelism01 final XYSeriesCollection collection = new XYSeriesCollection(); - properties.setProperty("PlacementScheme", "Nearest"); + properties.setProperty("impl.placement", "Nearest"); Sweep nearestSweep = new Sweep(properties); nearestSweep.repeats = Tools.integer(properties, "repeats"); nearestSweep.execute("PAST", "nodes", values, "accessbalance"); collection.addSeries(nearestSweep.series); - properties.setProperty("PlacementScheme", "Kademlia"); + properties.setProperty("impl.placement", "Kademlia"); Sweep kademliaSweep = new Sweep(properties); kademliaSweep.repeats = Tools.integer(properties, "repeats"); kademliaSweep.execute("Kademlia", "nodes", values, "accessbalance"); collection.addSeries(kademliaSweep.series); - properties.setProperty("PlacementScheme", "VertexGroups"); + properties.setProperty("impl.placement", "VertexGroups"); Sweep vgSweep = new Sweep(properties); vgSweep.repeats = Tools.integer(properties, "repeats"); vgSweep.execute("Vertex Groups", "nodes", values, "accessbalance"); diff --git a/sim/gobs/gobs/sweep/Decluster04.java b/sim/gobs/gobs/sweep/Rebuild01.java similarity index 64% copy from sim/gobs/gobs/sweep/Decluster04.java copy to sim/gobs/gobs/sweep/Rebuild01.java index 029a98c..0319f00 100644 --- a/sim/gobs/gobs/sweep/Decluster04.java +++ b/sim/gobs/gobs/sweep/Rebuild01.java @@ -6,63 +6,63 @@ import java.util.*; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; -// import gobs.sim.*; import gobs.util.*; import gobs.plot.*; /** * Modifies node count. - * Reports object movement load (pushes+pulls) on all servers - * during rebuild. + * Reports rebuild activity over time during rebuild. * - * Usage: Decluster04 -n <repeats> *.cfg + * Usage: Rebuild01 -n <repeats> *.cfg * */ -class Decluster04 +class Rebuild01 { static Properties properties; public static void main(String[] args) { - Bits.init(); - properties = Sweep.getopts(args); + + AbstractSweep.seed(properties); String output = Tools.string(properties, "output"); - int minNodes = Tools.integer(properties, "minNodes"); - int maxNodes = Tools.integer(properties, "maxNodes"); - String step = Tools.string(properties, "step"); + int minNodes = Tools.integer(properties, "nodes.min"); + int maxNodes = Tools.integer(properties, "nodes.max"); + String step = Tools.string(properties, "nodes.step"); List<String> values = Sweep.values(step, minNodes, maxNodes); - System.out.println("Decluster04: " + values); + System.out.println("Rebuild01: " + values); List<XYSeries> allSeries = new ArrayList<XYSeries>(); final XYSeriesCollection collection = new XYSeriesCollection(); - properties.setProperty("PlacementScheme", "Nearest"); + properties.setProperty("impl.placement", "Nearest"); ArraySweep pSweep = new ArraySweep(properties); pSweep.repeats = Tools.integer(properties, "repeats"); - pSweep.execute("PAST", "nodes", values, "distribution"); + pSweep.execute("PAST", "nodes", values, "traffic-y"); allSeries.addAll(pSweep.collection); - properties.setProperty("PlacementScheme", "Kademlia"); + /* + properties.setProperty("impl.placement", "Kademlia"); ArraySweep kSweep = new ArraySweep(properties); kSweep.repeats = Tools.integer(properties, "repeats"); kSweep.execute("Kademlia", "nodes", values, "distribution"); allSeries.addAll(kSweep.collection); - properties.setProperty("PlacementScheme", "VertexGroups"); + properties.setProperty("impl.placement", "VertexGroups"); ArraySweep vgSweep = new ArraySweep(properties); vgSweep.repeats = Tools.integer(properties, "repeats"); vgSweep.execute("Vertex Groups", "nodes", values, "distribution"); allSeries.addAll(vgSweep.collection); - + */ + for (XYSeries series : allSeries) collection.addSeries(series); - MultiplePlot.plot(collection, "Rebuild Load Distribution", - "nodes involved", "load fraction(%)", output); + MultiplePlot.plot(collection, "Rebuild Traffic", + "time", "load fraction(%)", output); // AsciiPlot.plot(pSweep.series, "Maximum Rebuild Load", // "nodes", "load", "tmp.txt"); diff --git a/sim/gobs/gobs/util/Bits.java b/sim/gobs/gobs/util/Bits.java index 4717afb..c50b6db 100644 --- a/sim/gobs/gobs/util/Bits.java +++ b/sim/gobs/gobs/util/Bits.java @@ -10,7 +10,7 @@ import java.util.*; public class Bits { - public static Random rng = null; + public static Random rng = null; static boolean locked = false; static boolean ready = false; @@ -23,16 +23,16 @@ public class Bits } /** - If not locked, seed the generator with the clock mod 100. + If not locked, seed the generator with the clock mod 1000. Useful for debugging. - @param dump If true, dump the seed. + @param print If true, print the seed. */ - public static long init(boolean dump) + public static long init(boolean print) { long seed = System.currentTimeMillis() % 1000; init(seed); - if (dump) + if (print) System.out.println("Bits.seed: " + seed); return seed; @@ -44,12 +44,10 @@ public class Bits */ public static void init(long seed) { - if (! locked) - { - // System.out.println("Seeding RNG..."); - rng = new Random(seed); - ready = true; - } + assert (!locked) : "Bits locked!"; + // System.out.println("Seeding RNG..."); + rng = new Random(seed); + ready = true; } /** diff --git a/sim/gobs/gobs/util/Stats.java b/sim/gobs/gobs/util/Stats.java new file mode 100644 index 0000000..7c8792c --- /dev/null +++ b/sim/gobs/gobs/util/Stats.java @@ -0,0 +1,81 @@ + +package gobs.util; + +import java.util.*; + +/** + Data analysis helpers +*/ +public class Stats +{ + /** + Return the length of the longest List. + */ + public static int length(List<List<Integer>> data) + { + int result = 0; + for (List<Integer> list : data) + if (list.size() > result) + result = list.size(); + return result; + } + + /** + Return the average of the corresponding + entries of each list. + */ + public static List<Double> avg(List<List<Integer>> data) + { + List<Double> result = new ArrayList<Double>(); + int n = data.size(); + + int i = 0; + while (true) + { + double total = 0; + boolean something = false; + for (List<Integer> list : data) + { + if (list.size() > i) + { + something = true; + total += list.get(i); + } + } + if (something) + result.add(total/n); + else + break; + i++; + } + return result; + } + + /** + Debugging only. + */ + public static void main(String[] args) + { + List<List<Integer>> all = new ArrayList<List<Integer>>(); + List<Integer> l1 = new ArrayList<Integer>(); + List<Integer> l2 = new ArrayList<Integer>(); + List<Integer> l3 = new ArrayList<Integer>(); + + l1.add(3); + l1.add(3); + l1.add(3); + l1.add(3); + l2.add(3); + l2.add(2); + l2.add(3); + l3.add(1); + l3.add(3); + + all.add(l1); + all.add(l2); + all.add(l3); + + List<Double> out = avg(all); + System.out.println(out); + } +} diff --git a/sim/gobs/gobs/util/Tools.java b/sim/gobs/gobs/util/Tools.java index d419dd4..f65f60b 100644 --- a/sim/gobs/gobs/util/Tools.java +++ b/sim/gobs/gobs/util/Tools.java @@ -30,6 +30,26 @@ public class Tools return result; } + public static double decimal(Properties properties, String variable) + { + double result = 0; + try + { + result = + Double.parseDouble(properties.getProperty(variable).trim()); + } + catch (NumberFormatException e) + { + bail("Could not read double from property: " + variable + + " = " + properties.getProperty(variable)); + } + catch (NullPointerException e) + { + bail("Required property not found: " + variable); + } + return result; + } + public static boolean bool(Properties properties, String variable) { diff --git a/sim/gobs/sweeps/bl01-small.cfg b/sim/gobs/sweeps/bl01-small.cfg index b64d96d..30df6e6 100644 --- a/sim/gobs/sweeps/bl01-small.cfg +++ b/sim/gobs/sweeps/bl01-small.cfg @@ -22,27 +22,27 @@ nodes = 10 VertexGroupPrefix = 5 # No rebuilds will actually be performed. This is filler: -ReplicaSource = primary +replica.source = primary ### Choose a NodeScheme implementation: -#NodeScheme = RandomNodes -NodeScheme = SimpleNodes +#impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes ### Choose one of the following FileFactory sections: # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 -FileFactory = TraceFiles +impl.filefactory = TraceFiles filetrace = traces/onebigfile.trace ### User read/writes: diff --git a/sim/gobs/sweeps/bl01.cfg b/sim/gobs/sweeps/bl01.cfg index cccaf81..76494bf 100644 --- a/sim/gobs/sweeps/bl01.cfg +++ b/sim/gobs/sweeps/bl01.cfg @@ -20,27 +20,27 @@ nodes = 10 # Chosen by sweep driver # No rebuilds will actually be performed. This is filler: -ReplicaSource = primary +replica.source = primary ### Choose a NodeScheme implementation: -#NodeScheme = RandomNodes -NodeScheme = SimpleNodes +#impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes ### Choose one of the following FileFactory sections: # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 -FileFactory = TraceFiles +impl.filefactory = TraceFiles filetrace = traces/onebigfile.trace ### User read/writes: diff --git a/sim/gobs/sweeps/bl01output.cfg b/sim/gobs/sweeps/bl01output.cfg index a4bed90..ba359e8 100644 --- a/sim/gobs/sweeps/bl01output.cfg +++ b/sim/gobs/sweeps/bl01output.cfg @@ -2,14 +2,14 @@ ### Simulator output configuration # Dump properties for each Simulator execution -printProperties = true +print.properties = true # Print nodes and objects at startup (true/false) -printInitialNodes = true +print.initialnodes = true # Print nodes and objects after each rebuild (true/false) -printNodes = false +print.nodes = false # Print object tranfers during rebuilds (true/false) -printRebuilds = false +print.rebuilds = false # Print file information (true/false) -printFiles = true +print.files = true # Print load change statistics (true/false) -printLoadDiffs = false +print.loaddiffs = false diff --git a/sim/gobs/sweeps/dc02kpv01.cfg b/sim/gobs/sweeps/dc02kpv01.cfg index a8e3954..77ab756 100644 --- a/sim/gobs/sweeps/dc02kpv01.cfg +++ b/sim/gobs/sweeps/dc02kpv01.cfg @@ -1,5 +1,5 @@ -include = kpv01.cfg system_size_20-1000.cfg +include = kpv01.cfg system_size_1000.cfg # This declustering test has no user accesses: diff --git a/sim/gobs/sweeps/debug.cfg b/sim/gobs/sweeps/debug.cfg index b15d3bb..0df7001 100644 --- a/sim/gobs/sweeps/debug.cfg +++ b/sim/gobs/sweeps/debug.cfg @@ -1,14 +1,14 @@ # Simulator configuration -printProperties = true +print.properties = true # Print nodes and objects at startup (true/false) -printInitialNodes = true +print.initialnodes = true # Print nodes and objects after each rebuild (true/false) -printNodes = true +print.nodes = true # Print object tranfers during rebuilds (true/false) -printRebuilds = true +print.rebuilds = true # Print file information (true/false) -printFiles = true +print.files = true # Print load change statistics (true/false) -printLoadDiffs = true +print.loaddiffs = true diff --git a/sim/gobs/sweeps/decluster02.zsh b/sim/gobs/sweeps/decluster02.zsh index d42e129..531f22e 100755 --- a/sim/gobs/sweeps/decluster02.zsh +++ b/sim/gobs/sweeps/decluster02.zsh @@ -2,9 +2,11 @@ NAME=$1 N=$2 +SEED=$3 [[ ${NAME} == "" ]] && print "No NAME!" && exit 1 -[[ ${N} == "" ]] && N=20 +[[ ${N} == "" ]] && N=20 +[[ ${SEED} != "" ]] && SEED="seed=${SEED}" NAME="dc02${NAME}" @@ -12,7 +14,8 @@ CFG="${NAME}.cfg" EPS="${NAME}.eps" OUT="${NAME}.out" -java gobs.sweep.Decluster02 -p sweeps -n ${N} -o ${EPS} ${CFG} >& ${OUT} +java -ea gobs.sweep.Decluster02 \ + -p sweeps -n ${N} -o ${EPS} ${SEED} ${CFG} >& ${OUT} ERR=$? [[ ${ERR} != 0 ]] && print "Crashed: ${NAME} ERR: ${ERR}" && exit 1 diff --git a/sim/gobs/sweeps/kpv01.cfg b/sim/gobs/sweeps/kpv01.cfg index e62d3d6..72fdcfd 100644 --- a/sim/gobs/sweeps/kpv01.cfg +++ b/sim/gobs/sweeps/kpv01.cfg @@ -7,11 +7,11 @@ include = kpv_output.cfg # Chosen by sweep driver. -ReplicaSource = primary +replica.source = primary VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -# NodeScheme = RandomNodes -NodeScheme = SimpleNodes +# impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes diff --git a/sim/gobs/sweeps/kpv02.cfg b/sim/gobs/sweeps/kpv02.cfg index 7453f0c..d877857 100644 --- a/sim/gobs/sweeps/kpv02.cfg +++ b/sim/gobs/sweeps/kpv02.cfg @@ -7,11 +7,11 @@ include = kpv_output.cfg # Chosen by sweep driver. -ReplicaSource = primary +replica.source = primary VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -NodeScheme = RandomNodes -# NodeScheme = SimpleNodes +impl.nodefactory = RandomNodes +# impl.nodefactory = SimpleNodes diff --git a/sim/gobs/sweeps/kpv03.cfg b/sim/gobs/sweeps/kpv03.cfg index f178102..8207b16 100644 --- a/sim/gobs/sweeps/kpv03.cfg +++ b/sim/gobs/sweeps/kpv03.cfg @@ -7,11 +7,11 @@ include = kpv_output.cfg # Chosen by sweep driver. -ReplicaSource = random +replica.source = random VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -#NodeScheme = RandomNodes -NodeScheme = SimpleNodes +#impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes diff --git a/sim/gobs/sweeps/kpv04.cfg b/sim/gobs/sweeps/kpv04.cfg index 30c54ce..84c4332 100644 --- a/sim/gobs/sweeps/kpv04.cfg +++ b/sim/gobs/sweeps/kpv04.cfg @@ -7,10 +7,10 @@ include = kpv_output.cfg # Chosen by sweep driver. -ReplicaSource = random +replica.source = random VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -NodeScheme = RandomNodes -# NodeScheme = SimpleNodes +impl.nodefactory = RandomNodes +# impl.nodefactory = SimpleNodes diff --git a/sim/gobs/sweeps/kpv05.cfg b/sim/gobs/sweeps/kpv05.cfg index e28afdc..0ccfc44 100644 --- a/sim/gobs/sweeps/kpv05.cfg +++ b/sim/gobs/sweeps/kpv05.cfg @@ -7,11 +7,11 @@ include = kpv_output.cfg # Chosen by sweep driver. -ReplicaSource = last +replica.source = last VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -#NodeScheme = RandomNodes -NodeScheme = SimpleNodes +#impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes diff --git a/sim/gobs/sweeps/kpv06.cfg b/sim/gobs/sweeps/kpv06.cfg index 1c45f36..ba02d69 100644 --- a/sim/gobs/sweeps/kpv06.cfg +++ b/sim/gobs/sweeps/kpv06.cfg @@ -7,10 +7,10 @@ include = kpv_output.cfg # Chosen by sweep driver. -ReplicaSource = last +replica.source = last VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -NodeScheme = RandomNodes +impl.nodefactory = RandomNodes diff --git a/sim/gobs/sweeps/kpv_lit_big.cfg b/sim/gobs/sweeps/kpv_lit_big.cfg index 90f6d6a..adef78f 100644 --- a/sim/gobs/sweeps/kpv_lit_big.cfg +++ b/sim/gobs/sweeps/kpv_lit_big.cfg @@ -14,12 +14,12 @@ minNodes = 0 maxNodes = 0 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/sweeps/kpv_lit_small.cfg b/sim/gobs/sweeps/kpv_lit_small.cfg index eb772cb..bdbbc08 100644 --- a/sim/gobs/sweeps/kpv_lit_small.cfg +++ b/sim/gobs/sweeps/kpv_lit_small.cfg @@ -14,12 +14,12 @@ minNodes = 0 maxNodes = 0 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/sweeps/kpv_output.cfg b/sim/gobs/sweeps/kpv_output.cfg index d285c26..204275f 100644 --- a/sim/gobs/sweeps/kpv_output.cfg +++ b/sim/gobs/sweeps/kpv_output.cfg @@ -2,14 +2,14 @@ ### Simulator output configuration # Dump properties for each Simulator execution -printProperties = true +print.properties = true # Print nodes and objects at startup (true/false) -printInitialNodes = false +print.initialnodes = true # Print nodes and objects after each rebuild (true/false) -printNodes = false +print.nodes = true # Print object tranfers during rebuilds (true/false) -printRebuilds = false +print.rebuilds = true # Print file information (true/false) -printFiles = false +print.files = false # Print load change statistics (true/false) -printLoadDiffs = false +print.loaddiffs = false diff --git a/sim/gobs/sweeps/kpv_scenario.cfg b/sim/gobs/sweeps/kpv_scenario.cfg index 22950b8..3c693ae 100644 --- a/sim/gobs/sweeps/kpv_scenario.cfg +++ b/sim/gobs/sweeps/kpv_scenario.cfg @@ -15,12 +15,12 @@ minNodes = 20 maxNodes = 1000 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/sweeps/kpv_small.cfg b/sim/gobs/sweeps/kpv_small.cfg index f2f51e3..22a8fee 100644 --- a/sim/gobs/sweeps/kpv_small.cfg +++ b/sim/gobs/sweeps/kpv_small.cfg @@ -15,12 +15,12 @@ minNodes = 20 maxNodes = 1000 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/sweeps/output.cfg b/sim/gobs/sweeps/output.cfg index d285c26..5f562c3 100644 --- a/sim/gobs/sweeps/output.cfg +++ b/sim/gobs/sweeps/output.cfg @@ -2,14 +2,14 @@ ### Simulator output configuration # Dump properties for each Simulator execution -printProperties = true +print.properties = true # Print nodes and objects at startup (true/false) -printInitialNodes = false +print.initialnodes = false # Print nodes and objects after each rebuild (true/false) -printNodes = false +print.nodes = false # Print object tranfers during rebuilds (true/false) -printRebuilds = false +print.rebuilds = false # Print file information (true/false) -printFiles = false +print.files = false # Print load change statistics (true/false) -printLoadDiffs = false +print.loaddiffs = false diff --git a/sim/gobs/sweeps/pll01.cfg b/sim/gobs/sweeps/pll01.cfg index 66e7f1d..276d6e9 100644 --- a/sim/gobs/sweeps/pll01.cfg +++ b/sim/gobs/sweeps/pll01.cfg @@ -9,11 +9,11 @@ faults = 0 # Chosen by sweep driver. -ReplicaSource = primary +replica.source = primary VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -# NodeScheme = RandomNodes -NodeScheme = SimpleNodes +# impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes diff --git a/sim/gobs/sweeps/pll_output.cfg b/sim/gobs/sweeps/pll_output.cfg index 6011575..51ff2ae 100644 --- a/sim/gobs/sweeps/pll_output.cfg +++ b/sim/gobs/sweeps/pll_output.cfg @@ -2,16 +2,16 @@ ### Simulator output configuration # Dump properties for each Simulator execution -printProperties = true +print.properties = true # Print nodes and objects at startup (true/false) -printInitialNodes = false +print.initialnodes = false # Print nodes and objects after each rebuild (true/false) -printNodes = false +print.nodes = false # Print object tranfers during rebuilds (true/false) -printRebuilds = false +print.rebuilds = false # Print file information (true/false) -printFiles = false +print.files = false # Print file access information (true/false) printAccesses = false # Print load change statistics (true/false) -printLoadDiffs = false +print.loaddiffs = false diff --git a/sim/gobs/sweeps/quick04.cfg b/sim/gobs/sweeps/quick04.cfg index 6dda9b4..952307d 100644 --- a/sim/gobs/sweeps/quick04.cfg +++ b/sim/gobs/sweeps/quick04.cfg @@ -20,35 +20,35 @@ maxNodes = 1000 # Chosen by sweep driver -ReplicaSource = random +replica.source = random ### Choose a NodeScheme implementation: -NodeScheme = RandomNodes -# NodeScheme = SimpleNodes +impl.nodefactory = RandomNodes +# impl.nodefactory = SimpleNodes ### Choose one of the following FileFactory sections: # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 # FileFactory implementation TraceFiles -#FileFactory = TraceFiles +#impl.filefactory = TraceFiles # Trace filename: #filetrace = traces/test01.trace # FileFactory implementation RandomFiles -#FileFactory = RandomFiles +#impl.filefactory = RandomFiles # Strip size: -#filestrip = 4 +#file.strip = 4 # Max size of big files: #filebigmax = 100 # Min size of big files: @@ -61,14 +61,14 @@ filewidth = 10 ### Simulator output configuration # Dump properties for each Simulator execution -printProperties = false +print.properties = false # Print nodes and objects at startup (true/false) -printInitialNodes = false +print.initialnodes = false # Print nodes and objects after each rebuild (true/false) -printNodes = false +print.nodes = false # Print object tranfers during rebuilds (true/false) -printRebuilds = false +print.rebuilds = false # Print file information (true/false) -printFiles = false +print.files = false # Print load change statistics (true/false) -printLoadDiffs = false +print.loaddiffs = false diff --git a/sim/gobs/sweeps/rb01-small.cfg b/sim/gobs/sweeps/rb01-small.cfg new file mode 100644 index 0000000..540977d --- /dev/null +++ b/sim/gobs/sweeps/rb01-small.cfg @@ -0,0 +1,89 @@ + +# Simulator configuration + +# Basics: + +# Print all properties at simulation start +print.properties = true +# Print nodes and objects at startup (true/false) +print.initialnodes = true +# Print nodes and objects after each rebuild (true/false) +print.nodes = false +# Print object tranfers during rebuilds (true/false) +print.rebuilds = true +# Print file information (true/false) +print.files = false +# Print load change statistics (true/false) +print.loaddiffs = false +# Print user accesses +print.accesses = false + +# Statistics: + +# Rebuild traffic over time analysis: +plot.traffic.interval = 10 + +### Parameters for GOBS Simulator run + +repeats = 1 + +### General parameters: + +# Bit-length of addresses: +B = 16 +# Number of servers: +nodes.min = 8 +nodes.max = 16 +# Step through nodes: See AbstractSweep.values() +nodes.step = literal_8,16 +# Number of files: +files = 10 +# Number of faults: +faults = 1 +# Number of accesses: +reads = 0 +writes = 0 + +### Choose a PlacementScheme implementation: + +#impl.placement = Kademlia +impl.placement = Nearest +#impl.placement = VertexGroups + +vertexgroups.prefix = 6 +# Replica selection: See Replicated.locateSource() +replica.source = primary + +### Choose a NodeScheme implementation: + +# impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes + +### Choose one of the following FileFactory sections: + +# FileFactory implementation PlainFiles +impl.filefactory = PlainFiles +# File size: +file.size = 140 +# Strip size: +file.strip = 4 +# File/object replicas: +file.replicas = 3 +# Number of objects per file: +file.width = 3 + +# FileFactory implementation TraceFiles +#impl.filefactory = TraceFiles +# Trace filename: +#filetrace = traces/test01.trace + +# FileFactory implementation RandomFiles +#impl.filefactory = RandomFiles +# Max size of big files: +#filebigmax = 100 +# Min size of big files: +#filebigmin = 50 +# Max size of small files: +#filesmallmax = 20 +# Min size of small files: +#filesmallmin = 0 diff --git a/sim/gobs/sweeps/system_size_20-1000.cfg b/sim/gobs/sweeps/system_size_1000.cfg similarity index 80% copy from sim/gobs/sweeps/system_size_20-1000.cfg copy to sim/gobs/sweeps/system_size_1000.cfg index 2d988b4..5107cdc 100644 --- a/sim/gobs/sweeps/system_size_20-1000.cfg +++ b/sim/gobs/sweeps/system_size_1000.cfg @@ -4,7 +4,7 @@ ### 3000 files * 10 objects * 3 replicas = 90,000 objects # Number of servers: -minNodes = 20 +minNodes = 1000 maxNodes = 1000 step = exps @@ -18,12 +18,12 @@ files = 3000 faults = 1 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/sweeps/system_size_100_1000.cfg b/sim/gobs/sweeps/system_size_100_1000.cfg index 90f6d6a..adef78f 100644 --- a/sim/gobs/sweeps/system_size_100_1000.cfg +++ b/sim/gobs/sweeps/system_size_100_1000.cfg @@ -14,12 +14,12 @@ minNodes = 0 maxNodes = 0 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/sweeps/system_size_20-1000.cfg b/sim/gobs/sweeps/system_size_20-1000.cfg index 2d988b4..57e29f8 100644 --- a/sim/gobs/sweeps/system_size_20-1000.cfg +++ b/sim/gobs/sweeps/system_size_20-1000.cfg @@ -18,12 +18,12 @@ files = 3000 faults = 1 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/sweeps/system_size_pdsi_100-1000.cfg b/sim/gobs/sweeps/system_size_pdsi_100-1000.cfg index 2d6860d..aaf7a91 100644 --- a/sim/gobs/sweeps/system_size_pdsi_100-1000.cfg +++ b/sim/gobs/sweeps/system_size_pdsi_100-1000.cfg @@ -19,6 +19,6 @@ reads = 5000 writes = 10000 # FileFactory implementation PlainFiles -FileFactory = PDSIFiles +impl.filefactory = PDSIFiles # 20% size 0, 60% size 1K-100K, 20% size 100K-10M PDSIFilesPoints = 0.2,1K;0.8,100K;1.0,10M diff --git a/sim/gobs/sweeps/system_size_pdsi_20-40.cfg b/sim/gobs/sweeps/system_size_pdsi_20-40.cfg index bf57678..a8d9635 100644 --- a/sim/gobs/sweeps/system_size_pdsi_20-40.cfg +++ b/sim/gobs/sweeps/system_size_pdsi_20-40.cfg @@ -19,6 +19,6 @@ reads = 500 writes = 1000 # FileFactory implementation PlainFiles -FileFactory = PDSIFiles +impl.filefactory = PDSIFiles # 20% size 0, 60% size 1K-100K, 20% size 100K-10M PDSIFilesPoints = 0.2,1K;0.8,100K;1.0,10M diff --git a/sim/gobs/wiki/PlacementHierarchy.odg b/sim/gobs/wiki/PlacementHierarchy.odg new file mode 100644 index 0000000..9a136c4 Binary files /dev/null and b/sim/gobs/wiki/PlacementHierarchy.odg differ diff --git a/sim/gobs/wiki/PlacementHierarchy.png b/sim/gobs/wiki/PlacementHierarchy.png new file mode 100644 index 0000000..a055ffe Binary files /dev/null and b/sim/gobs/wiki/PlacementHierarchy.png differ diff --git a/sim/gobs/wiki/kpv01.cfg b/sim/gobs/wiki/kpv01.cfg index daf2808..8f5920d 100644 --- a/sim/gobs/wiki/kpv01.cfg +++ b/sim/gobs/wiki/kpv01.cfg @@ -7,10 +7,10 @@ include = kpv_output.cfg kpv_lit_big.cfg # Chosen by sweep driver. -ReplicaSource = primary +replica.source = primary VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -# NodeScheme = RandomNodes -NodeScheme = SimpleNodes +# impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes diff --git a/sim/gobs/wiki/kpv02.cfg b/sim/gobs/wiki/kpv02.cfg index 8a360bc..ce9fc89 100644 --- a/sim/gobs/wiki/kpv02.cfg +++ b/sim/gobs/wiki/kpv02.cfg @@ -8,11 +8,11 @@ include = kpv_output.cfg kpv_lit_big.cfg # Chosen by sweep driver. -ReplicaSource = primary +replica.source = primary VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -NodeScheme = RandomNodes -# NodeScheme = SimpleNodes +impl.nodefactory = RandomNodes +# impl.nodefactory = SimpleNodes diff --git a/sim/gobs/wiki/kpv03.cfg b/sim/gobs/wiki/kpv03.cfg index 12aae3b..3530d1a 100644 --- a/sim/gobs/wiki/kpv03.cfg +++ b/sim/gobs/wiki/kpv03.cfg @@ -8,11 +8,11 @@ include = kpv_output.cfg kpv_lit_big.cfg # Chosen by sweep driver. -ReplicaSource = random +replica.source = random VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -#NodeScheme = RandomNodes -NodeScheme = SimpleNodes +#impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes diff --git a/sim/gobs/wiki/kpv04.cfg b/sim/gobs/wiki/kpv04.cfg index 7620038..f5bfc14 100644 --- a/sim/gobs/wiki/kpv04.cfg +++ b/sim/gobs/wiki/kpv04.cfg @@ -8,10 +8,10 @@ include = kpv_output.cfg kpv_lit_big.cfg # Chosen by sweep driver. -ReplicaSource = random +replica.source = random VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -NodeScheme = RandomNodes -# NodeScheme = SimpleNodes +impl.nodefactory = RandomNodes +# impl.nodefactory = SimpleNodes diff --git a/sim/gobs/wiki/kpv05.cfg b/sim/gobs/wiki/kpv05.cfg index e328a75..a7a95cc 100644 --- a/sim/gobs/wiki/kpv05.cfg +++ b/sim/gobs/wiki/kpv05.cfg @@ -8,11 +8,11 @@ include = kpv_output.cfg kpv_lit_big.cfg # Chosen by sweep driver. -ReplicaSource = last +replica.source = last VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -#NodeScheme = RandomNodes -NodeScheme = SimpleNodes +#impl.nodefactory = RandomNodes +impl.nodefactory = SimpleNodes diff --git a/sim/gobs/wiki/kpv06.cfg b/sim/gobs/wiki/kpv06.cfg index 4cf100d..b6e7bd5 100644 --- a/sim/gobs/wiki/kpv06.cfg +++ b/sim/gobs/wiki/kpv06.cfg @@ -8,10 +8,10 @@ include = kpv_output.cfg kpv_lit_big.cfg # Chosen by sweep driver. -ReplicaSource = last +replica.source = last VertexGroupPrefix = 5 ### Choose a NodeScheme implementation: -NodeScheme = RandomNodes +impl.nodefactory = RandomNodes diff --git a/sim/gobs/wiki/kpv_lit_big.cfg b/sim/gobs/wiki/kpv_lit_big.cfg index 90f6d6a..adef78f 100644 --- a/sim/gobs/wiki/kpv_lit_big.cfg +++ b/sim/gobs/wiki/kpv_lit_big.cfg @@ -14,12 +14,12 @@ minNodes = 0 maxNodes = 0 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/wiki/kpv_lit_small.cfg b/sim/gobs/wiki/kpv_lit_small.cfg index eb772cb..bdbbc08 100644 --- a/sim/gobs/wiki/kpv_lit_small.cfg +++ b/sim/gobs/wiki/kpv_lit_small.cfg @@ -14,12 +14,12 @@ minNodes = 0 maxNodes = 0 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/wiki/kpv_output.cfg b/sim/gobs/wiki/kpv_output.cfg index d285c26..5f562c3 100644 --- a/sim/gobs/wiki/kpv_output.cfg +++ b/sim/gobs/wiki/kpv_output.cfg @@ -2,14 +2,14 @@ ### Simulator output configuration # Dump properties for each Simulator execution -printProperties = true +print.properties = true # Print nodes and objects at startup (true/false) -printInitialNodes = false +print.initialnodes = false # Print nodes and objects after each rebuild (true/false) -printNodes = false +print.nodes = false # Print object tranfers during rebuilds (true/false) -printRebuilds = false +print.rebuilds = false # Print file information (true/false) -printFiles = false +print.files = false # Print load change statistics (true/false) -printLoadDiffs = false +print.loaddiffs = false diff --git a/sim/gobs/wiki/kpv_scenario.cfg b/sim/gobs/wiki/kpv_scenario.cfg index 22950b8..3c693ae 100644 --- a/sim/gobs/wiki/kpv_scenario.cfg +++ b/sim/gobs/wiki/kpv_scenario.cfg @@ -15,12 +15,12 @@ minNodes = 20 maxNodes = 1000 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/wiki/kpv_small.cfg b/sim/gobs/wiki/kpv_small.cfg index f2f51e3..22a8fee 100644 --- a/sim/gobs/wiki/kpv_small.cfg +++ b/sim/gobs/wiki/kpv_small.cfg @@ -15,12 +15,12 @@ minNodes = 20 maxNodes = 1000 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/wiki/system_size_100_1000.cfg b/sim/gobs/wiki/system_size_100_1000.cfg index 90f6d6a..adef78f 100644 --- a/sim/gobs/wiki/system_size_100_1000.cfg +++ b/sim/gobs/wiki/system_size_100_1000.cfg @@ -14,12 +14,12 @@ minNodes = 0 maxNodes = 0 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 diff --git a/sim/gobs/wiki/system_size_20-1000.cfg b/sim/gobs/wiki/system_size_20-1000.cfg index 2d988b4..57e29f8 100644 --- a/sim/gobs/wiki/system_size_20-1000.cfg +++ b/sim/gobs/wiki/system_size_20-1000.cfg @@ -18,12 +18,12 @@ files = 3000 faults = 1 # FileFactory implementation PlainFiles -FileFactory = PlainFiles +impl.filefactory = PlainFiles # File size: -filesize = 14 +file.size = 14 # Strip size: -filestrip = 4 +file.strip = 4 # File/object replicas: -filereplicas = 3 +file.replicas = 3 # Number of objects per file: -filewidth = 10 +file.width = 10 hooks/post-receive -- Grayskull Repository
participants (1)
-
noreply@mcs.anl.gov