Changed nodeType configuration structure

This commit is contained in:
Sudipta Basak 2024-06-10 07:07:14 +00:00
parent 8aaaf57ed6
commit 0e51082f71
No known key found for this signature in database
5 changed files with 30 additions and 21 deletions

View File

@ -121,7 +121,7 @@ class Node:
if self.amIproposer: if self.amIproposer:
self.bwUplink = shape.bwUplinkProd self.bwUplink = shape.bwUplinkProd
else: else:
self.bwUplink = shape.nodeTypes[self.nodeClass]['bwUplinks'] self.bwUplink = shape.nodeTypes["classes"][self.nodeClass]["def"]['bwUplinks']
self.bwUplink *= 1e3 / 8 * config.stepDuration / config.segmentSize self.bwUplink *= 1e3 / 8 * config.stepDuration / config.segmentSize
self.repairOnTheFly = config.evalConf(self, config.repairOnTheFly, shape) self.repairOnTheFly = config.evalConf(self, config.repairOnTheFly, shape)

View File

@ -19,7 +19,7 @@ class Shape:
self.custodyCols = custodyCols self.custodyCols = custodyCols
self.bwUplinkProd = bwUplinkProd self.bwUplinkProd = bwUplinkProd
self.nodeTypes = nodeTypes self.nodeTypes = nodeTypes
self.nodeClasses = [0] + [_k for _k in nodeTypes.keys() if _k != "group"] self.nodeClasses = [0] + [_k for _k in nodeTypes["classes"].keys()]
self.randomSeed = "" self.randomSeed = ""
def __repr__(self): def __repr__(self):

View File

@ -45,7 +45,7 @@ class Simulator:
self.proposerPublishToC = config.evalConf(self, config.proposerPublishToR, shape) self.proposerPublishToC = config.evalConf(self, config.proposerPublishToR, shape)
def getNodeClass(self, nodeIdx): def getNodeClass(self, nodeIdx):
nodeRatios = [_v['ratio'] for _k, _v in self.shape.nodeTypes.items() if _k != "group"] nodeRatios = [_v['weight'] for _k, _v in self.shape.nodeTypes["classes"].items()]
nodeCounts = [int(self.shape.numberNodes * ratio / sum(nodeRatios)) for ratio in nodeRatios] nodeCounts = [int(self.shape.numberNodes * ratio / sum(nodeRatios)) for ratio in nodeRatios]
commulativeSum = [sum(nodeCounts[:i+1]) for i in range(len(nodeCounts))] commulativeSum = [sum(nodeCounts[:i+1]) for i in range(len(nodeCounts))]
commulativeSum[-1] = self.shape.numberNodes commulativeSum[-1] = self.shape.numberNodes
@ -135,7 +135,7 @@ class Simulator:
vs = [] vs = []
nodeClass = self.getNodeClass(i) nodeClass = self.getNodeClass(i)
vpn = self.shape.nodeTypes[nodeClass]['validatorsPerNode'] vpn = self.shape.nodeTypes["classes"][nodeClass]["def"]['validatorsPerNode']
for v in range(vpn): for v in range(vpn):
vs.append(initValidator(self.shape.nbRows, self.shape.custodyRows, self.shape.nbCols, self.shape.custodyCols)) vs.append(initValidator(self.shape.nbRows, self.shape.custodyRows, self.shape.nbCols, self.shape.custodyCols))
val = Node(i, int(not i!=0), nodeClass, amImalicious_value, self.logger, self.shape, self.config, vs) val = Node(i, int(not i!=0), nodeClass, amImalicious_value, self.logger, self.shape, self.config, vs)

View File

@ -22,7 +22,7 @@ def plotData(conf):
for i in range(len(conf["data"])): for i in range(len(conf["data"])):
plt.bar(conf["xdots"], conf["data"][i], label=conf["labels"][i]) plt.bar(conf["xdots"], conf["data"][i], label=conf["labels"][i])
if conf["type"] == "individual_bar_with_2line": if conf["type"] == "individual_bar_with_2line":
plt.axhline(y = conf["expected_value1"], color='r', linestyle='--', label=conf["line_label1"]) plt.axhline(y = conf["expected_value1"], color='w', linestyle='--', label=conf["line_label1"])
plt.axhline(y = conf["expected_value2"], color='g', linestyle='--', label=conf["line_label2"]) plt.axhline(y = conf["expected_value2"], color='g', linestyle='--', label=conf["line_label2"])
if conf["type"] == "plot_with_1line": if conf["type"] == "plot_with_1line":
plt.axhline(y = conf["expected_value"], color='g', linestyle='--', label=conf["line_label"]) plt.axhline(y = conf["expected_value"], color='g', linestyle='--', label=conf["line_label"])
@ -69,23 +69,21 @@ class Visualizor:
theGroup = dict() theGroup = dict()
for nt in self.config.nodeTypesGroup: for nt in self.config.nodeTypesGroup:
if nt['group'] == group: if nt['group'] == group:
for _k, _v in nt.items(): for _k, _v in nt["classes"].items():
if _k != 'group': theGroup[_k] = {
theGroup[_k] = { "vpn": _v["def"]["validatorsPerNode"],
"vpn": _v["validatorsPerNode"], "bw": _v["def"]["bwUplinks"],
"bw": _v["bwUplinks"], "w": _v["weight"]
"r": _v["ratio"] }
}
break break
return theGroup return theGroup
def __getNodeRanges(self, shape): def __getNodeRanges(self, shape):
nodeClasses, nodeRatios = [], [] nodeClasses, nodeRatios = [], []
for _k, _v in shape.nodeTypes.items(): for _k, _v in shape.nodeTypes["classes"].items():
if _k != "group": nodeClasses.append(_k)
nodeClasses.append(_k) nodeRatios.append(_v['weight'])
nodeRatios.append(_v['ratio'])
nodeCounts = [int(shape.numberNodes * ratio / sum(nodeRatios)) for ratio in nodeRatios] nodeCounts = [int(shape.numberNodes * ratio / sum(nodeRatios)) for ratio in nodeRatios]
commulativeSum = [sum(nodeCounts[:i+1]) for i in range(len(nodeCounts))] commulativeSum = [sum(nodeCounts[:i+1]) for i in range(len(nodeCounts))]
commulativeSum[-1] = shape.numberNodes commulativeSum[-1] = shape.numberNodes
@ -993,7 +991,7 @@ class Visualizor:
maxi = max(v) maxi = max(v)
conf["yaxismax"] = maxi conf["yaxismax"] = maxi
x = result.shape.nbCols * result.shape.custodyRows + result.shape.nbRows * result.shape.custodyCols x = result.shape.nbCols * result.shape.custodyRows + result.shape.nbRows * result.shape.custodyCols
conf["expected_value"] = (result.shape.numberNodes - 1) * x * sum([(_v['r'] * _v['vpn']) for _v in nodeTypes.values()]) / sum([_v['r'] for _v in nodeTypes.values()]) conf["expected_value"] = (result.shape.numberNodes - 1) * x * sum([(_v['w'] * _v['vpn']) for _v in nodeTypes.values()]) / sum([_v['w'] for _v in nodeTypes.values()])
conf["line_label"] = "Total segments to deliver" conf["line_label"] = "Total segments to deliver"
plotData(conf) plotData(conf)
print("Plot %s created." % conf["path"]) print("Plot %s created." % conf["path"])
@ -1362,7 +1360,7 @@ class Visualizor:
rs = [] rs = []
for result in self.results: for result in self.results:
attrbs = self.__get_attrbs__(result) attrbs = self.__get_attrbs__(result)
rs.append(int(attrbs['r'])) rs.append(int(attrbs['w']))
return max(rs) - min(rs) + 1 return max(rs) - min(rs) + 1

View File

@ -83,9 +83,20 @@ bwUplinksProd = [200]
nodeTypesGroup = [ nodeTypesGroup = [
{ {
"group": "g1", "group": "g1",
# nodeClass: node config "classes": {
1: {'validatorsPerNode': 1, 'bwUplinks': 10, 'ratio': 8}, 1: {
2: {'validatorsPerNode': 5, 'bwUplinks': 200, 'ratio': 2} "weight": 70,
"def": {'validatorsPerNode': 1, 'bwUplinks': 10}
},
2: {
"weight": 20,
"def": {'validatorsPerNode': 5, 'bwUplinks': 200}
},
3: {
"weight": 10,
"def": {'validatorsPerNode': 10, 'bwUplinks': 500}
}
}
} }
] ]