X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f2ecde6af20db46907714e04cee35408df5f5a10..cfb3987654b857620ba388fab9883a095debeb72:/include/simgrid/s4u/Disk.hpp diff --git a/include/simgrid/s4u/Disk.hpp b/include/simgrid/s4u/Disk.hpp index 6d8e00dcae..eec006c2f6 100644 --- a/include/simgrid/s4u/Disk.hpp +++ b/include/simgrid/s4u/Disk.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2019-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2019-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -79,14 +79,23 @@ public: 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); + /** + * @brief Set the max amount of operations (either read or write) that can take place on this disk at the same time + * + * Use -1 to set no limit. + */ + Disk* set_concurrency_limit(int limit); + int get_concurrency_limit() const; 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; + sg_size_t read(sg_size_t size, double priority) const; IoPtr write_async(sg_size_t size) const; sg_size_t write(sg_size_t size) const; + sg_size_t write(sg_size_t size, double priority) const; /** @brief Policy for sharing the disk among activities */ enum class SharingPolicy { NONLINEAR = 1, LINEAR = 0 }; @@ -95,12 +104,13 @@ public: /** * @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: + * Disks have different bandwidths for read and write operations, that can have different policies: * - Read: resource sharing for read operation * - Write: resource sharing for write * - ReadWrite: global sharing for read and write operations * + * Note that the NONLINEAR callback is in the critical path of the solver, so it should be fast. + * * @param op Operation type * @param policy Sharing policy * @param cb Callback for NONLINEAR policies @@ -123,12 +133,35 @@ public: Disk* seal(); /* The signals */ - /** @brief Callback signal fired when a new Disk is created */ + /** @brief \static Add a callback fired when a new Disk is created */ + static void on_creation_cb(const std::function& cb) { on_creation.connect(cb); } + /** @brief \static Add a callback fired when any Disk is destroyed */ + static void on_destruction_cb(const std::function& cb) { on_destruction.connect(cb); } + /** @brief Add a callback fired when this specific Disk is destroyed */ + void on_this_destruction_cb(const std::function& cb) { on_this_destruction.connect(cb); } + /** @brief \static Add a callback fired when any Disk is turned on or off */ + static void on_onoff_cb(const std::function& cb) + { + on_onoff.connect(cb); + } + /** @brief Add a callback fired when this specific Disk is turned on or off */ + void on_this_onoff_cb(const std::function& cb) + { + on_this_onoff.connect(cb); + } + + XBT_ATTRIB_DEPRECATED_v338("Please use on_onoff_cb() instead") static void on_state_change_cb( + const std::function& cb) + { + on_onoff.connect(cb); + } + +private: 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; + xbt::signal on_this_destruction; + static xbt::signal on_onoff; + xbt::signal on_this_onoff; }; } // namespace s4u