The patch was provided by @klementc on github, but I rewrote it to fix
the indentations.
Closes https://github.com/simgrid/simgrid/pull/337
- GH#128: Parallelization of simulation with --cfg=contexts/nthreads
- GH#139: Allow pthread creation in SMPI
- GH#336: Packet-level simulation using SMPI?
- GH#128: Parallelization of simulation with --cfg=contexts/nthreads
- GH#139: Allow pthread creation in SMPI
- GH#336: Packet-level simulation using SMPI?
+ - GH!337: Fix link_energy plugin for wifi platforms
----------------------------------------------------------------------------
----------------------------------------------------------------------------
{
XBT_DEBUG("onCommunicate is called");
for (simgrid::kernel::resource::LinkImpl* link : action.links()) {
{
XBT_DEBUG("onCommunicate is called");
for (simgrid::kernel::resource::LinkImpl* link : action.links()) {
+ if (link == nullptr || link->get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::WIFI)
continue;
XBT_DEBUG("Update link %s", link->get_cname());
continue;
XBT_DEBUG("Update link %s", link->get_cname());
double total_energy = 0.0; // Total dissipated energy (whole platform)
for (const auto link : links) {
double total_energy = 0.0; // Total dissipated energy (whole platform)
for (const auto link : links) {
+ if (link == nullptr || link->get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::WIFI)
+ continue;
+
double link_energy = link->extension<LinkEnergy>()->get_consumed_energy();
total_energy += link_energy;
}
double link_energy = link->extension<LinkEnergy>()->get_consumed_energy();
total_energy += link_energy;
}
xbt_assert(sg_host_count() == 0, "Please call sg_link_energy_plugin_init() before initializing the platform.");
xbt_assert(sg_host_count() == 0, "Please call sg_link_energy_plugin_init() before initializing the platform.");
- simgrid::s4u::Link::on_creation.connect([](simgrid::s4u::Link& link) { link.extension_set(new LinkEnergy(&link)); });
+ simgrid::s4u::Link::on_creation.connect([](simgrid::s4u::Link& link) {
+ if (link.get_sharing_policy() != simgrid::s4u::Link::SharingPolicy::WIFI) {
+ XBT_DEBUG("Wired Link created: %s", link.get_cname());
+ link.extension_set(new LinkEnergy(&link));
+ } else {
+ XBT_DEBUG("Not Wired link: %s", link.get_cname());
+ }
+ });
- simgrid::s4u::Link::on_state_change.connect(
- [](simgrid::s4u::Link const& link) { link.extension<LinkEnergy>()->update(); });
+ simgrid::s4u::Link::on_state_change.connect([](simgrid::s4u::Link const& link) {
+ if (link.get_sharing_policy() != simgrid::s4u::Link::SharingPolicy::WIFI)
+ link.extension<LinkEnergy>()->update();
+ });
simgrid::s4u::Link::on_destruction.connect([](simgrid::s4u::Link const& link) {
simgrid::s4u::Link::on_destruction.connect([](simgrid::s4u::Link const& link) {
- if (link.get_name() != "__loopback__")
+ if (link.get_name() != "__loopback__" && link.get_sharing_policy() != simgrid::s4u::Link::SharingPolicy::WIFI)
XBT_INFO("Energy consumption of link '%s': %f Joules", link.get_cname(),
link.extension<LinkEnergy>()->get_consumed_energy());
});
XBT_INFO("Energy consumption of link '%s': %f Joules", link.get_cname(),
link.extension<LinkEnergy>()->get_consumed_energy());
});
simgrid::s4u::Link::on_communication_state_change.connect([](
simgrid::kernel::resource::NetworkAction const& action, simgrid::kernel::resource::Action::State /* previous */) {
for (simgrid::kernel::resource::LinkImpl* link : action.links()) {
simgrid::s4u::Link::on_communication_state_change.connect([](
simgrid::kernel::resource::NetworkAction const& action, simgrid::kernel::resource::Action::State /* previous */) {
for (simgrid::kernel::resource::LinkImpl* link : action.links()) {
+ if (link != nullptr && link->get_sharing_policy() != simgrid::s4u::Link::SharingPolicy::WIFI)
link->get_iface()->extension<LinkEnergy>()->update();
}
});
link->get_iface()->extension<LinkEnergy>()->update();
}
});