include examples/cpp/exec-waitfor/s4u-exec-waitfor.tesh
include examples/cpp/io-async/s4u-io-async.cpp
include examples/cpp/io-async/s4u-io-async.tesh
+include examples/cpp/io-basic/s4u-io-basic.cpp
+include examples/cpp/io-basic/s4u-io-basic.tesh
include examples/cpp/io-degradation/s4u-io-degradation.cpp
include examples/cpp/io-degradation/s4u-io-degradation.tesh
include examples/cpp/io-dependent/s4u-io-dependent.cpp
maestro-set
mc-bugged1 mc-bugged2 mc-electric-fence mc-failing-assert
network-wifi
- io-async io-degradation io-file-system io-file-remote io-disk-raw io-dependent
+ io-async io-basic io-degradation io-file-system io-file-remote io-disk-raw io-dependent
platform-failures platform-profile platform-properties
plugin-host-load plugin-link-load plugin-prodcons
replay-comm replay-io
static void privileged()
{
- /* This version of this_actor::execute() specifies that this execution
- * gets a larger share of the resource.
+ /* This version of this_actor::execute() specifies that this execution gets a larger share of the resource.
*
* Since the priority is 2, it computes twice as fast as a regular one.
*
- * So instead of a half/half sharing between the two executions,
- * we get a 1/3 vs 2/3 sharing. */
+ * So instead of a half/half sharing between the two executions, we get a 1/3 vs 2/3 sharing. */
simgrid::s4u::this_actor::execute(98095, 2);
XBT_INFO("Done.");
- /* Note that the timings printed when executing this example are a bit misleading,
- * because the uneven sharing only last until the privileged actor ends.
- * After this point, the unprivileged one gets 100% of the CPU and finishes
- * quite quickly. */
+ /* Note that the timings printed when running this example are a bit misleading, because the uneven sharing only last
+ * until the privileged actor ends. After this point, the unprivileged one gets 100% of the CPU and finishes quite
+ * quickly. */
}
int main(int argc, char* argv[])
{
simgrid::s4u::Engine e(&argc, argv);
- xbt_assert(argc > 1, "Usage: %s platform_file\n\tExample: %s ../platforms/small_platform.xml\n", argv[0], argv[0]);
+ xbt_assert(argc > 1, "Usage: %s platform_file\n\tExample: %s platform.xml\n", argv[0], argv[0]);
e.load_platform(argv[1]);
--- /dev/null
+/* Copyright (c) 2010-2021. 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. */
+
+#include "simgrid/s4u.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example");
+
+static void writer()
+{
+ /* - Retrieve all disks from current host */
+ std::vector<simgrid::s4u::Disk*> const& disk_list = simgrid::s4u::Host::current()->get_disks();
+ /* - Write 400,000 bytes on Disk1 */
+ disk_list.front()->write(4000000);
+ XBT_INFO("Done.");
+}
+
+static void privileged_writer()
+{
+ /* - Retrieve all disks from current host */
+ std::vector<simgrid::s4u::Disk*> const& disk_list = simgrid::s4u::Host::current()->get_disks();
+
+ /* - Write 400,000 bytes on Disk1 but specifies that this I/O operation gets a larger share of the resource.
+ *
+ * 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();
+ XBT_INFO("Done.");
+
+ /* Note that the timings printed when running this example are a bit misleading, because the uneven sharing only last
+ * until the privileged actor ends. After this point, the unprivileged one gets 100% of the CPU and finishes quite
+ * quickly. */
+}
+
+int main(int argc, char* argv[])
+{
+ simgrid::s4u::Engine e(&argc, argv);
+ xbt_assert(argc > 1, "Usage: %s platform_file\n\tExample: %s platform.xml\n", argv[0], argv[0]);
+
+ e.load_platform(argv[1]);
+
+ simgrid::s4u::Actor::create("writer", e.host_by_name("bob"), writer);
+ simgrid::s4u::Actor::create("privileged_writer", e.host_by_name("bob"), privileged_writer);
+
+ e.run();
+
+ return 0;
+}
--- /dev/null
+#!/usr/bin/env tesh
+
+$ ${bindir:=.}/s4u-io-basic ${platfdir}/hosts_with_disks.xml
+> [bob:privileged_writer:(2) 0.150000] [s4u_test/INFO] Done.
+> [bob:writer:(1) 0.200000] [s4u_test/INFO] Done.
double get_remaining() const override;
sg_size_t get_performed_ioops() const;
IoPtr set_disk(const_sg_disk_t disk);
+ IoPtr set_priority(double priority);
IoPtr set_size(sg_size_t size);
IoPtr set_op_type(OpType type);
piface_ = new s4u::Io(this);
}
+IoImpl& IoImpl::set_sharing_penalty(double sharing_penalty)
+{
+ sharing_penalty_ = sharing_penalty;
+ return *this;
+}
+
IoImpl& IoImpl::set_timeout(double timeout)
{
const s4u::Host* host = get_disk()->get_host();
state_ = State::RUNNING;
surf_action_ =
disk_->get_host()->get_netpoint()->get_englobing_zone()->get_disk_model()->io_start(disk_, size_, type_);
+ surf_action_->set_sharing_penalty(sharing_penalty_);
surf_action_->set_activity(this);
XBT_DEBUG("Create IO synchro %p %s", this, get_cname());
namespace activity {
class XBT_PUBLIC IoImpl : public ActivityImpl_T<IoImpl> {
- resource::DiskImpl* disk_ = nullptr;
- sg_size_t size_ = 0;
- s4u::Io::OpType type_ = s4u::Io::OpType::READ;
- sg_size_t performed_ioops_ = 0;
+ resource::DiskImpl* disk_ = nullptr;
+ double sharing_penalty_ = 1.0;
+ sg_size_t size_ = 0;
+ s4u::Io::OpType type_ = s4u::Io::OpType::READ;
+ sg_size_t performed_ioops_ = 0;
resource::Action* timeout_detector_ = nullptr;
s4u::Io* piface_;
IoImpl();
s4u::Io* get_iface() { return piface_; }
+ IoImpl& set_sharing_penalty(double sharing_penalty);
IoImpl& set_timeout(double timeout) override;
IoImpl& set_size(sg_size_t size);
IoImpl& set_type(s4u::Io::OpType type);
return this;
}
+IoPtr Io::set_priority(double priority)
+{
+ xbt_assert(state_ == State::INITED || state_ == State::STARTING,
+ "Cannot change the priority of an io after its start");
+ kernel::actor::simcall([this, priority] {
+ boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)->set_sharing_penalty(1. / priority);
+ });
+ return this;
+}
+
IoPtr Io::set_size(sg_size_t size)
{
xbt_assert(state_ == State::INITED || state_ == State::STARTING, "Cannot set size once the Io is started");