A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
793184f
)
Use Ptr to store disks of a HostImpl, do not care about cleanup anymore
author
Fred Suter
<suterf@ornl.gov>
Fri, 6 Oct 2023 19:54:26 +0000
(15:54 -0400)
committer
Fred Suter
<suterf@ornl.gov>
Fri, 6 Oct 2023 19:54:26 +0000
(15:54 -0400)
include/simgrid/forward.h
patch
|
blob
|
history
src/kernel/resource/DiskImpl.hpp
patch
|
blob
|
history
src/kernel/resource/HostImpl.cpp
patch
|
blob
|
history
src/kernel/resource/HostImpl.hpp
patch
|
blob
|
history
diff --git
a/include/simgrid/forward.h
b/include/simgrid/forward.h
index
85fe6a7
..
2c1da4f
100644
(file)
--- a/
include/simgrid/forward.h
+++ b/
include/simgrid/forward.h
@@
-197,6
+197,7
@@
class StandardLinkImpl;
class SplitDuplexLinkImpl;
class NetworkAction;
class DiskImpl;
class SplitDuplexLinkImpl;
class NetworkAction;
class DiskImpl;
+using DiskImplPtr = boost::intrusive_ptr<DiskImpl>;
class DiskModel;
class VirtualMachineImpl;
class VMModel;
class DiskModel;
class VirtualMachineImpl;
class VMModel;
diff --git
a/src/kernel/resource/DiskImpl.hpp
b/src/kernel/resource/DiskImpl.hpp
index
55f6857
..
a1bdb8a
100644
(file)
--- a/
src/kernel/resource/DiskImpl.hpp
+++ b/
src/kernel/resource/DiskImpl.hpp
@@
-50,6
+50,7
@@
class DiskImpl : public Resource_T<DiskImpl>, public xbt::PropertyHolder {
Metric read_bw_ = {0.0, 0, nullptr};
Metric write_bw_ = {0.0, 0, nullptr};
double readwrite_bw_ = -1; /* readwrite constraint bound, usually max(read, write) */
Metric read_bw_ = {0.0, 0, nullptr};
Metric write_bw_ = {0.0, 0, nullptr};
double readwrite_bw_ = -1; /* readwrite constraint bound, usually max(read, write) */
+ std::atomic_int_fast32_t refcount_{0};
void apply_sharing_policy_cfg();
void apply_sharing_policy_cfg();
@@
-60,6
+61,17
@@
public:
explicit DiskImpl(const std::string& name, double read_bandwidth, double write_bandwidth);
DiskImpl(const DiskImpl&) = delete;
DiskImpl& operator=(const DiskImpl&) = delete;
explicit DiskImpl(const std::string& name, double read_bandwidth, double write_bandwidth);
DiskImpl(const DiskImpl&) = delete;
DiskImpl& operator=(const DiskImpl&) = delete;
+ friend void intrusive_ptr_add_ref(DiskImpl* disk)
+ {
+ disk->refcount_.fetch_add(1, std::memory_order_acq_rel);
+ }
+ friend void intrusive_ptr_release(DiskImpl* disk)
+ {
+ if (disk->refcount_.fetch_sub(1, std::memory_order_release) == 1) {
+ std::atomic_thread_fence(std::memory_order_acquire);
+ delete disk;
+ }
+ }
/** @brief Public interface */
const s4u::Disk* get_iface() const { return &piface_; }
/** @brief Public interface */
const s4u::Disk* get_iface() const { return &piface_; }
diff --git
a/src/kernel/resource/HostImpl.cpp
b/src/kernel/resource/HostImpl.cpp
index
614bf9e
..
4a0c728
100644
(file)
--- a/
src/kernel/resource/HostImpl.cpp
+++ b/
src/kernel/resource/HostImpl.cpp
@@
-53,9
+53,6
@@
HostImpl::~HostImpl()
delete arg;
actors_at_boot_.clear();
delete arg;
actors_at_boot_.clear();
- for (auto const& [_, d] : disks_)
- d->destroy();
-
for (auto const& [_, vm] : vms_)
vm->vm_destroy();
}
for (auto const& [_, vm] : vms_)
vm->vm_destroy();
}
@@
-216,7
+213,7
@@
s4u::Disk* HostImpl::create_disk(const std::string& name, double read_bandwidth,
void HostImpl::add_disk(const s4u::Disk* disk)
{
void HostImpl::add_disk(const s4u::Disk* disk)
{
- disks_[disk->get_name()] =
disk->get_impl(
);
+ disks_[disk->get_name()] =
kernel::resource::DiskImplPtr(disk->get_impl()
);
}
void HostImpl::remove_disk(const std::string& name)
}
void HostImpl::remove_disk(const std::string& name)
diff --git
a/src/kernel/resource/HostImpl.hpp
b/src/kernel/resource/HostImpl.hpp
index
0de2d0b
..
2701e3b
100644
(file)
--- a/
src/kernel/resource/HostImpl.hpp
+++ b/
src/kernel/resource/HostImpl.hpp
@@
-49,7
+49,7
@@
class XBT_PRIVATE HostImpl : public xbt::PropertyHolder, public actor::ObjectAcc
ActorList actor_list_;
std::vector<actor::ProcessArg*> actors_at_boot_;
s4u::Host piface_;
ActorList actor_list_;
std::vector<actor::ProcessArg*> actors_at_boot_;
s4u::Host piface_;
- std::map<std::string, DiskImpl
*
, std::less<>> disks_;
+ std::map<std::string, DiskImpl
Ptr
, std::less<>> disks_;
std::map<std::string, VirtualMachineImpl*, std::less<>> vms_;
std::string name_{"noname"};
routing::NetZoneImpl* englobing_zone_ = nullptr;
std::map<std::string, VirtualMachineImpl*, std::less<>> vms_;
std::string name_{"noname"};
routing::NetZoneImpl* englobing_zone_ = nullptr;