Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add user friendly wrapper to set priorities on I/Os
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Sat, 30 Oct 2021 10:48:54 +0000 (12:48 +0200)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Sat, 30 Oct 2021 10:48:54 +0000 (12:48 +0200)
examples/cpp/io-priority/s4u-io-priority.cpp
include/simgrid/s4u/Disk.hpp
src/bindings/python/simgrid_python.cpp
src/s4u/s4u_Disk.cpp

index 1c8f478..5c03a19 100644 (file)
@@ -29,7 +29,7 @@ static void privileged_writer()
    * Since the priority is 2, it writes twice as fast as a regular one.
    *
    * So instead of a half/half sharing between the two, we get a 1/3 vs. 2/3 sharing. */
-  disk_list.front()->io_init(4000000, simgrid::s4u::Io::OpType::WRITE)->set_priority(2)->wait();
+  disk_list.front()->write(4000000, 2);
   XBT_INFO("First write done.");
 
   /* Note that the timings printed when running this example are a bit misleading, because the uneven sharing only last
index 68740d1..7364763 100644 (file)
@@ -84,9 +84,11 @@ public:
 
   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 };
index 7b5efdb..7530f38 100644 (file)
@@ -284,8 +284,10 @@ PYBIND11_MODULE(simgrid, m)
 
   /* Class Disk */
   py::class_<simgrid::s4u::Disk, std::unique_ptr<simgrid::s4u::Disk, py::nodelete>> disk(m, "Disk", "Simulated disk");
-  disk.def("read", &simgrid::s4u::Disk::read, py::call_guard<py::gil_scoped_release>(), "Read data from disk")
-      .def("write", &simgrid::s4u::Disk::write, py::call_guard<py::gil_scoped_release>(), "Write data in disk")
+  disk.def("read", py::overload_cast<sg_size_t, double>(&simgrid::s4u::Disk::read, py::const_),
+           py::call_guard<py::gil_scoped_release>(), "Read data from disk", py::arg("size"), py::arg("priority") = 1)
+      .def("write", py::overload_cast<sg_size_t, double>(&simgrid::s4u::Disk::write, py::const_),
+           py::call_guard<py::gil_scoped_release>(), "Write data in disk", py::arg("size"), py::arg("priority") = 1)
       .def("read_async", &simgrid::s4u::Disk::read_async, py::call_guard<py::gil_scoped_release>(),
            "Non-blocking read data from disk")
       .def("write_async", &simgrid::s4u::Disk::write_async, py::call_guard<py::gil_scoped_release>(),
index c64af72..5793eb5 100644 (file)
@@ -126,6 +126,15 @@ sg_size_t Disk::read(sg_size_t size) const
   return IoPtr(io_init(size, Io::OpType::READ))->vetoable_start()->wait()->get_performed_ioops();
 }
 
+sg_size_t Disk::read(sg_size_t size, double priority) const
+{
+  return IoPtr(io_init(size, Io::OpType::READ))
+      ->set_priority(priority)
+      ->vetoable_start()
+      ->wait()
+      ->get_performed_ioops();
+}
+
 IoPtr Disk::write_async(sg_size_t size) const
 {
   return IoPtr(io_init(size, Io::OpType::WRITE)->vetoable_start());
@@ -136,6 +145,15 @@ sg_size_t Disk::write(sg_size_t size) const
   return IoPtr(io_init(size, Io::OpType::WRITE))->vetoable_start()->wait()->get_performed_ioops();
 }
 
+sg_size_t Disk::write(sg_size_t size, double priority) const
+{
+  return IoPtr(io_init(size, Io::OpType::WRITE))
+      ->set_priority(priority)
+      ->vetoable_start()
+      ->wait()
+      ->get_performed_ioops();
+}
+
 Disk* Disk::set_sharing_policy(Disk::Operation op, Disk::SharingPolicy policy, const NonLinearResourceCb& cb)
 {
   kernel::actor::simcall([this, op, policy, &cb] { pimpl_->set_sharing_policy(op, policy, cb); });