X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3ed98d31c172001583f905cfbabaab636651169c..555ebc2e544437445450239b48e7df9b4f371460:/include/simgrid/s4u/Disk.hpp diff --git a/include/simgrid/s4u/Disk.hpp b/include/simgrid/s4u/Disk.hpp index 9d332e4d42..5ba6306774 100644 --- a/include/simgrid/s4u/Disk.hpp +++ b/include/simgrid/s4u/Disk.hpp @@ -30,34 +30,26 @@ namespace s4u { */ class XBT_PUBLIC Disk : public xbt::Extendable { - kernel::resource::DiskImpl* const pimpl_; - std::string name_; +#ifndef DOXYGEN friend Engine; friend Io; friend kernel::resource::DiskImpl; +#endif -protected: -#ifndef DOXYGEN + explicit Disk(kernel::resource::DiskImpl* pimpl) : pimpl_(pimpl) {} virtual ~Disk() = default; -#endif + + // The private implementation, that never changes + kernel::resource::DiskImpl* const pimpl_; public: #ifndef DOXYGEN - explicit Disk(const std::string& name, kernel::resource::DiskImpl* pimpl) : pimpl_(pimpl), name_(name) {} + kernel::resource::DiskImpl* get_impl() const { return pimpl_; } #endif - /** @brief Callback signal fired when a new Disk is created */ - static xbt::signal on_creation; - /** @brief Callback signal fired when a Disk is destroyed */ - static xbt::signal on_destruction; - /** @brief Callback signal fired when a Disk's state changes */ - static xbt::signal on_state_change; - - /** @brief Retrieves the name of that disk as a C++ string */ - Disk* set_name(std::string const& name); - std::string const& get_name() const { return name_; } + std::string const& get_name() const; /** @brief Retrieves the name of that disk as a C string */ - const char* get_cname() const { return name_.c_str(); } + const char* get_cname() const; Disk* set_read_bandwidth(double read_bw); double get_read_bandwidth() const; @@ -67,22 +59,65 @@ public: const std::unordered_map* get_properties() const; const char* get_property(const std::string& key) const; - void set_property(const std::string&, const std::string& value); + Disk* set_property(const std::string&, const std::string& value); + Disk* set_properties(const std::unordered_map& properties); + Disk* set_host(Host* host); Host* get_host() const; - IoPtr io_init(sg_size_t size, s4u::Io::OpType type); - - IoPtr read_async(sg_size_t size); - sg_size_t read(sg_size_t size); - - IoPtr write_async(sg_size_t size); - sg_size_t write(sg_size_t size); - void seal(); - -#ifndef DOXYGEN - kernel::resource::DiskImpl* get_impl() const { return pimpl_; } -#endif + Disk* set_state_profile(kernel::profile::Profile* profile); + Disk* set_read_bandwidth_profile(kernel::profile::Profile* profile); + Disk* set_write_bandwidth_profile(kernel::profile::Profile* profile); + + IoPtr io_init(sg_size_t size, s4u::Io::OpType type) const; + + IoPtr read_async(sg_size_t size) const; + sg_size_t read(sg_size_t size) const; + + IoPtr write_async(sg_size_t size) const; + sg_size_t write(sg_size_t size) const; + + /** @brief Policy for sharing the disk among activities */ + enum class SharingPolicy { NONLINEAR = 1, LINEAR = 0 }; + enum class Operation { READ = 2, WRITE = 1, READWRITE = 0 }; + + /** + * @brief Describes how the disk is shared between activities for each operation + * + * Disks have different bandwidths for read and write operations. This method + * allows you to set different sharing policies for each operation: + * - Read: resource sharing for read operation + * - Write: resource sharing for write + * - ReadWrite: global sharing for read and write operations + * + * @param op Operation type + * @param policy Sharing policy + * @param cb Callback for NONLINEAR policies + */ + Disk* set_sharing_policy(Operation op, SharingPolicy policy, const s4u::NonLinearResourceCb& cb = {}); + SharingPolicy get_sharing_policy(Operation op) const; + /** + * @brief Callback to set IO factors + * + * This callback offers a flexible way to create variability in I/O operations + * + * @param size I/O operation size in bytes + * @param op I/O operation type: read or write + * @return Multiply factor + */ + using IoFactorCb = double(sg_size_t size, Io::OpType op); + /** @brief Configure the factor callback */ + Disk* set_factor_cb(const std::function& cb); + + Disk* seal(); + + /* The signals */ + /** @brief Callback signal fired when a new Disk is created */ + static xbt::signal on_creation; + /** @brief Callback signal fired when a Disk is destroyed */ + static xbt::signal on_destruction; + /** @brief Callback signal fired when a Disk's state changes */ + static xbt::signal on_state_change; }; } // namespace s4u