virne icon indicating copy to clipboard operation
virne copied to clipboard

是否可以计算物理网络的能耗

Open dzljoy opened this issue 2 years ago • 2 comments

我想计算物理网络节点的能耗,请问要怎样修改项目代码可以计算节点的能耗。

在节点能耗中,CPU利用率是导致服务器功耗变化的主要原因。将节点i的功耗模型P Ni定义为:

图片1

其中Pb是服务器的基线功率,Pm是在最大容量服务时的总功率,µ是CPU利用率, Pi = Pm−Pb代表µ的能量比例因子,s (i) = 1表示节点i活动,s (i) = 0表示节点i关闭。

dzljoy avatar Jun 05 '23 06:06 dzljoy

Indeed, the implementation of energy modeling requires customized NodeAttributes. We plan to release a tutorial that will provide detailed instructions on creating and utilizing this attribute.

GeminiLight avatar Jun 08 '23 07:06 GeminiLight

我通过修改counter.py和recorder.py这两个文件的代码,可以计算物理网络在任意一个状态下节点能耗,主要代码如下: counter.py: def get_avilable_node_resource(self, network: Network): n = np.array(network.get_node_attrs_data(self.node_resource_attrs)) return n

recorder.py: cls.state['p_net_now_node_available_resource_list'] = cls.counter.get_avilable_node_resource(p_net)[0] # print(cls.init_p_net_info['p_net_init_node_available_resource_list']) # print("cls.state['p_net_now_node_available_resource_list']:",cls.state['p_net_now_node_available_resource_list']) # print(type(cls.state['p_net_now_node_available_resource_list'])) # print("len of cls.state['p_net_now_node_available_resource_list']:",len(cls.state['p_net_now_node_available_resource_list']))

    cls.state['p_net_now_node_resource_utilization_list'] = []
    for p_node_id in range(len(cls.init_p_net_info['p_net_init_node_available_resource_list'])):
        temp_p_node_resource_utilization = round(1 - float(cls.state['p_net_now_node_available_resource_list'][p_node_id]) / cls.init_p_net_info['p_net_init_node_available_resource_list'][p_node_id],
                                 4)
        cls.state['p_net_now_node_resource_utilization_list'].append(temp_p_node_resource_utilization)
    print(cls.state['p_net_now_node_available_resource_list'])
    print(cls.state['p_net_now_node_resource_utilization_list'])
    # print(" ")

    u = 0.2  # u表示空闲物理机消耗能耗的百分比
    sumEnergyConsum = 0
    p_net_now_nodes_total_energy_consum = 0
    p_net_now_node_energy_consum_list = []
    for p_node_id in range(len(cls.init_p_net_info['p_net_init_node_available_resource_list'])):
        if cls.state['p_net_now_node_resource_utilization_list'][p_node_id] == 0:
            p_net_now_node_energy_consum_list.append(0)
        else:
            temp_p_node_energy_consum = u * cls.init_p_net_info['p_net_init_node_available_resource_list'][p_node_id] + (1-u) * cls.init_p_net_info['p_net_init_node_available_resource_list'][p_node_id] * cls.state['p_net_now_node_resource_utilization_list'][p_node_id]
            p_net_now_node_energy_consum_list.append(temp_p_node_energy_consum)
    # print(len(p_net_now_node_energy_consum_list))
    # print(" ")
    for p_node_id in range(len(p_net_now_node_energy_consum_list)):
        p_net_now_nodes_total_energy_consum = p_net_now_nodes_total_energy_consum + p_net_now_node_energy_consum_list[p_node_id]
    p_net_now_nodes_total_energy_consum = round(p_net_now_nodes_total_energy_consum, 2)
    cls.state['total_energy_consum'] = cls.state['total_energy_consum'] + p_net_now_nodes_total_energy_consum
    print("p_net_now_nodes_total_energy_consum:",p_net_now_nodes_total_energy_consum)
    print("cls.state['total_energy_consum']:",cls.state['total_energy_consum'])
    print(" ")

但是无法按照时间增长的方式,将所有单位时间的能耗相加,计算物理网络的长期节点能耗。 计算物理网络的长期节点能耗,需要选择单位时间内某个状态的物理网络计算的节点能耗作为这个单位时间物理网络的节点能耗,然后将所有单位时间物理网络的节点能耗相加,得到长期节点能耗。 请问有什么办法可以实现计算物理网络的长期节点能耗吗?

dzljoy avatar Jun 08 '23 08:06 dzljoy