Committed by
Yuta Higuchi
Measuring topology performance. Fixing a defect that caused us to run w/o accumu…
…lator when config file was not present. Change-Id: I5ad538b8a441cd6ff2aefea49a0def10b8e0f4d5
Showing
4 changed files
with
41 additions
and
13 deletions
| ... | @@ -22,17 +22,23 @@ import org.onlab.onos.net.Provided; | ... | @@ -22,17 +22,23 @@ import org.onlab.onos.net.Provided; |
| 22 | */ | 22 | */ |
| 23 | public interface Topology extends Provided { | 23 | public interface Topology extends Provided { |
| 24 | 24 | ||
| 25 | - // FIXME: Following is not true right now. It is actually System.nanoTime(), | ||
| 26 | - // which has no relation to epoch time, wall clock, etc. | ||
| 27 | /** | 25 | /** |
| 28 | - * Returns the time, specified in milliseconds since start of epoch, | 26 | + * Returns the time, specified in system nanos of when the topology |
| 29 | - * when the topology became active and made available. | 27 | + * became available. |
| 30 | * | 28 | * |
| 31 | - * @return time in milliseconds since start of epoch | 29 | + * @return time in system nanos |
| 32 | */ | 30 | */ |
| 33 | long time(); | 31 | long time(); |
| 34 | 32 | ||
| 35 | /** | 33 | /** |
| 34 | + * Returns the time, specified in system nanos of how long the topology | ||
| 35 | + * took to compute. | ||
| 36 | + * | ||
| 37 | + * @return elapsed time in system nanos | ||
| 38 | + */ | ||
| 39 | + long computeCost(); | ||
| 40 | + | ||
| 41 | + /** | ||
| 36 | * Returns the number of SCCs (strongly connected components) in the | 42 | * Returns the number of SCCs (strongly connected components) in the |
| 37 | * topology. | 43 | * topology. |
| 38 | * | 44 | * | ... | ... |
| ... | @@ -66,9 +66,9 @@ public class DefaultTopologyProvider extends AbstractProvider | ... | @@ -66,9 +66,9 @@ public class DefaultTopologyProvider extends AbstractProvider |
| 66 | implements TopologyProvider { | 66 | implements TopologyProvider { |
| 67 | 67 | ||
| 68 | private static final int MAX_THREADS = 8; | 68 | private static final int MAX_THREADS = 8; |
| 69 | - private static final int DEFAULT_MAX_EVENTS = 200; | 69 | + private static final int DEFAULT_MAX_EVENTS = 1000; |
| 70 | - private static final int DEFAULT_MAX_BATCH_MS = 60; | 70 | + private static final int DEFAULT_MAX_IDLE_MS = 10; |
| 71 | - private static final int DEFAULT_MAX_IDLE_MS = 30; | 71 | + private static final int DEFAULT_MAX_BATCH_MS = 50; |
| 72 | 72 | ||
| 73 | // FIXME: Replace with a system-wide timer instance; | 73 | // FIXME: Replace with a system-wide timer instance; |
| 74 | // TODO: Convert to use HashedWheelTimer or produce a variant of that; then decide which we want to adopt | 74 | // TODO: Convert to use HashedWheelTimer or produce a variant of that; then decide which we want to adopt |
| ... | @@ -116,15 +116,15 @@ public class DefaultTopologyProvider extends AbstractProvider | ... | @@ -116,15 +116,15 @@ public class DefaultTopologyProvider extends AbstractProvider |
| 116 | @Activate | 116 | @Activate |
| 117 | public synchronized void activate(ComponentContext context) { | 117 | public synchronized void activate(ComponentContext context) { |
| 118 | executor = newFixedThreadPool(MAX_THREADS, namedThreads("topo-build-%d")); | 118 | executor = newFixedThreadPool(MAX_THREADS, namedThreads("topo-build-%d")); |
| 119 | + accumulator = new TopologyChangeAccumulator(); | ||
| 120 | + logConfig("Configured"); | ||
| 121 | + | ||
| 119 | modified(context); | 122 | modified(context); |
| 120 | 123 | ||
| 121 | providerService = providerRegistry.register(this); | 124 | providerService = providerRegistry.register(this); |
| 122 | deviceService.addListener(deviceListener); | 125 | deviceService.addListener(deviceListener); |
| 123 | linkService.addListener(linkListener); | 126 | linkService.addListener(linkListener); |
| 124 | 127 | ||
| 125 | - log.info("Configured with maxEvents = {}; maxBatchMs = {}; maxIdleMs = {}", | ||
| 126 | - maxEvents, maxBatchMs, maxIdleMs); | ||
| 127 | - | ||
| 128 | isStarted = true; | 128 | isStarted = true; |
| 129 | triggerRecompute(); | 129 | triggerRecompute(); |
| 130 | log.info("Started"); | 130 | log.info("Started"); |
| ... | @@ -149,6 +149,7 @@ public class DefaultTopologyProvider extends AbstractProvider | ... | @@ -149,6 +149,7 @@ public class DefaultTopologyProvider extends AbstractProvider |
| 149 | public void modified(ComponentContext context) { | 149 | public void modified(ComponentContext context) { |
| 150 | if (context == null) { | 150 | if (context == null) { |
| 151 | accumulator = new TopologyChangeAccumulator(); | 151 | accumulator = new TopologyChangeAccumulator(); |
| 152 | + logConfig("Reconfigured"); | ||
| 152 | return; | 153 | return; |
| 153 | } | 154 | } |
| 154 | 155 | ||
| ... | @@ -163,6 +164,7 @@ public class DefaultTopologyProvider extends AbstractProvider | ... | @@ -163,6 +164,7 @@ public class DefaultTopologyProvider extends AbstractProvider |
| 163 | 164 | ||
| 164 | s = (String) properties.get("maxIdleMs"); | 165 | s = (String) properties.get("maxIdleMs"); |
| 165 | newMaxIdleMs = isNullOrEmpty(s) ? maxIdleMs : Integer.parseInt(s); | 166 | newMaxIdleMs = isNullOrEmpty(s) ? maxIdleMs : Integer.parseInt(s); |
| 167 | + | ||
| 166 | } catch (Exception e) { | 168 | } catch (Exception e) { |
| 167 | newMaxEvents = DEFAULT_MAX_EVENTS; | 169 | newMaxEvents = DEFAULT_MAX_EVENTS; |
| 168 | newMaxBatchMs = DEFAULT_MAX_BATCH_MS; | 170 | newMaxBatchMs = DEFAULT_MAX_BATCH_MS; |
| ... | @@ -174,9 +176,13 @@ public class DefaultTopologyProvider extends AbstractProvider | ... | @@ -174,9 +176,13 @@ public class DefaultTopologyProvider extends AbstractProvider |
| 174 | maxBatchMs = newMaxBatchMs; | 176 | maxBatchMs = newMaxBatchMs; |
| 175 | maxIdleMs = newMaxIdleMs; | 177 | maxIdleMs = newMaxIdleMs; |
| 176 | accumulator = maxEvents > 1 ? new TopologyChangeAccumulator() : null; | 178 | accumulator = maxEvents > 1 ? new TopologyChangeAccumulator() : null; |
| 177 | - log.info("Reconfigured with maxEvents = {}; maxBatchMs = {}; maxIdleMs = {}", | 179 | + logConfig("Reconfigured"); |
| 178 | - maxEvents, maxBatchMs, maxIdleMs); | 180 | + } |
| 179 | } | 181 | } |
| 182 | + | ||
| 183 | + private void logConfig(String prefix) { | ||
| 184 | + log.info("{} with maxEvents = {}; maxBatchMs = {}; maxIdleMs = {}; accumulator={}", | ||
| 185 | + prefix, maxEvents, maxBatchMs, maxIdleMs, accumulator != null); | ||
| 180 | } | 186 | } |
| 181 | 187 | ||
| 182 | 188 | ... | ... |
| ... | @@ -65,6 +65,7 @@ public class DefaultTopology extends AbstractModel implements Topology { | ... | @@ -65,6 +65,7 @@ public class DefaultTopology extends AbstractModel implements Topology { |
| 65 | new TarjanGraphSearch<>(); | 65 | new TarjanGraphSearch<>(); |
| 66 | 66 | ||
| 67 | private final long time; | 67 | private final long time; |
| 68 | + private final long computeCost; | ||
| 68 | private final TopologyGraph graph; | 69 | private final TopologyGraph graph; |
| 69 | 70 | ||
| 70 | private final SCCResult<TopologyVertex, TopologyEdge> clusterResults; | 71 | private final SCCResult<TopologyVertex, TopologyEdge> clusterResults; |
| ... | @@ -104,6 +105,7 @@ public class DefaultTopology extends AbstractModel implements Topology { | ... | @@ -104,6 +105,7 @@ public class DefaultTopology extends AbstractModel implements Topology { |
| 104 | 105 | ||
| 105 | this.broadcastSets = buildBroadcastSets(); | 106 | this.broadcastSets = buildBroadcastSets(); |
| 106 | this.infrastructurePoints = findInfrastructurePoints(); | 107 | this.infrastructurePoints = findInfrastructurePoints(); |
| 108 | + this.computeCost = Math.max(0, System.nanoTime() - time); | ||
| 107 | } | 109 | } |
| 108 | 110 | ||
| 109 | @Override | 111 | @Override |
| ... | @@ -112,6 +114,11 @@ public class DefaultTopology extends AbstractModel implements Topology { | ... | @@ -112,6 +114,11 @@ public class DefaultTopology extends AbstractModel implements Topology { |
| 112 | } | 114 | } |
| 113 | 115 | ||
| 114 | @Override | 116 | @Override |
| 117 | + public long computeCost() { | ||
| 118 | + return computeCost; | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + @Override | ||
| 115 | public int clusterCount() { | 122 | public int clusterCount() { |
| 116 | return clusters.size(); | 123 | return clusters.size(); |
| 117 | } | 124 | } |
| ... | @@ -453,6 +460,7 @@ public class DefaultTopology extends AbstractModel implements Topology { | ... | @@ -453,6 +460,7 @@ public class DefaultTopology extends AbstractModel implements Topology { |
| 453 | public String toString() { | 460 | public String toString() { |
| 454 | return toStringHelper(this) | 461 | return toStringHelper(this) |
| 455 | .add("time", time) | 462 | .add("time", time) |
| 463 | + .add("computeCost", computeCost) | ||
| 456 | .add("clusters", clusterCount()) | 464 | .add("clusters", clusterCount()) |
| 457 | .add("devices", deviceCount()) | 465 | .add("devices", deviceCount()) |
| 458 | .add("links", linkCount()) | 466 | .add("links", linkCount()) | ... | ... |
| ... | @@ -65,6 +65,7 @@ public class DefaultTopology extends AbstractModel implements Topology { | ... | @@ -65,6 +65,7 @@ public class DefaultTopology extends AbstractModel implements Topology { |
| 65 | new TarjanGraphSearch<>(); | 65 | new TarjanGraphSearch<>(); |
| 66 | 66 | ||
| 67 | private final long time; | 67 | private final long time; |
| 68 | + private final long computeCost; | ||
| 68 | private final TopologyGraph graph; | 69 | private final TopologyGraph graph; |
| 69 | 70 | ||
| 70 | private final SCCResult<TopologyVertex, TopologyEdge> clusterResults; | 71 | private final SCCResult<TopologyVertex, TopologyEdge> clusterResults; |
| ... | @@ -104,6 +105,7 @@ public class DefaultTopology extends AbstractModel implements Topology { | ... | @@ -104,6 +105,7 @@ public class DefaultTopology extends AbstractModel implements Topology { |
| 104 | 105 | ||
| 105 | this.broadcastSets = buildBroadcastSets(); | 106 | this.broadcastSets = buildBroadcastSets(); |
| 106 | this.infrastructurePoints = findInfrastructurePoints(); | 107 | this.infrastructurePoints = findInfrastructurePoints(); |
| 108 | + this.computeCost = Math.max(0, System.nanoTime() - time); | ||
| 107 | } | 109 | } |
| 108 | 110 | ||
| 109 | @Override | 111 | @Override |
| ... | @@ -112,6 +114,11 @@ public class DefaultTopology extends AbstractModel implements Topology { | ... | @@ -112,6 +114,11 @@ public class DefaultTopology extends AbstractModel implements Topology { |
| 112 | } | 114 | } |
| 113 | 115 | ||
| 114 | @Override | 116 | @Override |
| 117 | + public long computeCost() { | ||
| 118 | + return computeCost; | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + @Override | ||
| 115 | public int clusterCount() { | 122 | public int clusterCount() { |
| 116 | return clusters.size(); | 123 | return clusters.size(); |
| 117 | } | 124 | } |
| ... | @@ -453,6 +460,7 @@ public class DefaultTopology extends AbstractModel implements Topology { | ... | @@ -453,6 +460,7 @@ public class DefaultTopology extends AbstractModel implements Topology { |
| 453 | public String toString() { | 460 | public String toString() { |
| 454 | return toStringHelper(this) | 461 | return toStringHelper(this) |
| 455 | .add("time", time) | 462 | .add("time", time) |
| 463 | + .add("computeCost", computeCost) | ||
| 456 | .add("clusters", clusterCount()) | 464 | .add("clusters", clusterCount()) |
| 457 | .add("devices", deviceCount()) | 465 | .add("devices", deviceCount()) |
| 458 | .add("links", linkCount()) | 466 | .add("links", linkCount()) | ... | ... |
-
Please register or login to post a comment