This is still to be populated, with the content of the msg_vm module.
--- /dev/null
+/* Copyright (c) 2015-2016. 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. */
+
+#ifndef SIMGRID_S4U_VM_HPP
+#define SIMGRID_S4U_VM_HPP
+
+#include <simgrid/s4u/forward.hpp>
+#include <simgrid/s4u/host.hpp>
+#include <xbt/base.h>
+
+namespace simgrid {
+
+namespace s4u {
+
+/** @ingroup s4u_api
+ *
+ * @tableofcontents
+ *
+ * A VM is a virtual machine that contains actors. The total computing power that the contained
+ * processes can get is constrained to the virtual machine size.
+ *
+ */
+XBT_PUBLIC_CLASS VirtualMachine : public s4u::Host
+{
+
+public:
+ explicit VirtualMachine(const char* name, s4u::Host* hostPm);
+
+ // No copy/move
+ VirtualMachine(VirtualMachine const&) = delete;
+ VirtualMachine& operator=(VirtualMachine const&) = delete;
+
+private:
+ virtual ~VirtualMachine();
+
+public:
+ void parameters(vm_params_t params) override;
+ void setParameters(vm_params_t params) override;
+};
+}
+} // namespace simgrid::s4u
+
+#endif /* SIMGRID_S4U_HOST_HPP */
explicit Host(const char *name);
/** Host destruction logic */
+protected:
+ virtual ~Host();
+
private:
- ~Host();
bool currentlyDestroying_ = false;
public:
void destroy();
+ // No copy/move
+ Host(Host const&) = delete;
+ Host& operator=(Host const&) = delete;
/** Retrieves an host from its name, or return nullptr */
static Host* by_name_or_null(const char* name);
int pstatesCount() const;
void setPstate(int pstate_index);
int pstate();
- void parameters(vm_params_t params);
- void setParameters(vm_params_t params);
+ virtual void parameters(vm_params_t params);
+ virtual void setParameters(vm_params_t params);
xbt_dict_t mountedStoragesAsDict(); // HACK
xbt_dynar_t attachedStorages();
--- /dev/null
+/* Copyright (c) 2015-2016. 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/datatypes.h"
+#include "simgrid/s4u/VirtualMachine.hpp"
+#include "simgrid/s4u/host.hpp"
+#include "simgrid/simix.hpp"
+#include "src/surf/HostImpl.hpp"
+#include "src/surf/VirtualMachineImpl.hpp"
+#include "xbt/asserts.h"
+
+namespace simgrid {
+
+namespace s4u {
+
+VirtualMachine::VirtualMachine(const char* name, s4u::Host* Pm) : Host(name)
+{
+ pimpl_ = new surf::VirtualMachineImpl(this, Pm);
+}
+
+VirtualMachine::~VirtualMachine()
+{
+ onDestruction(*this);
+}
+
+void VirtualMachine::parameters(vm_params_t params)
+{
+ this->pimpl_->getParams(params);
+}
+
+void VirtualMachine::setParameters(vm_params_t params)
+{
+ simgrid::simix::kernelImmediate([&]() { this->pimpl_->setParams(params); });
+}
+
+} // namespace simgrid
+} // namespace s4u
void Host::parameters(vm_params_t params)
{
- simgrid::simix::kernelImmediate([&]() { this->pimpl_->getParams(params); });
+ THROW_IMPOSSIBLE; // This should only be used on VMs
}
void Host::setParameters(vm_params_t params)
{
- simgrid::simix::kernelImmediate([&]() { this->pimpl_->setParams(params); });
+ THROW_IMPOSSIBLE; // This should only be used on VMs
}
/**
/* 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 "VirtualMachineImpl.hpp"
+#include "src/surf/VirtualMachineImpl.hpp"
+#include "simgrid/s4u/VirtualMachine.hpp"
#include <xbt/signal.hpp>
s4u::Host* VMModel::createVM(const char* name, sg_host_t host_PM)
{
- VirtualMachineImpl* vm = new VirtualMachineImpl(name, host_PM);
- return vm->piface_;
+ return new s4u::VirtualMachine(name, host_PM);
}
/* In the real world, processes on the guest operating system will be somewhat degraded due to virtualization overhead.
* Resource *
************/
-VirtualMachineImpl::VirtualMachineImpl(const char* name, simgrid::s4u::Host* host_PM)
- : HostImpl(new simgrid::s4u::Host(name), nullptr /*storage*/), hostPM_(host_PM)
+VirtualMachineImpl::VirtualMachineImpl(simgrid::s4u::Host* piface, simgrid::s4u::Host* host_PM)
+ : HostImpl(piface, nullptr /*storage*/), hostPM_(host_PM)
{
/* Register this VM to the list of all VMs */
allVms_.push_back(this);
/* FIXME: TODO: we have to periodically input GUESTOS_NOISE to the system? how ? */
action_ = sub_cpu->execution_start(0);
- XBT_VERB("Create VM(%s)@PM(%s) with %ld mounted disks", name, hostPM_->name().c_str(), xbt_dynar_length(storage_));
+ XBT_VERB("Create VM(%s)@PM(%s) with %ld mounted disks", piface->name().c_str(), hostPM_->name().c_str(),
+ xbt_dynar_length(storage_));
}
/*
*/
class VirtualMachineImpl : public HostImpl {
public:
- VirtualMachineImpl(const char* name, simgrid::s4u::Host* host);
+ VirtualMachineImpl(s4u::Host* piface, s4u::Host* host);
~VirtualMachineImpl();
/** @brief Suspend the VM */
src/s4u/s4u_mutex.cpp
src/s4u/s4u_conditionVariable.cpp
src/s4u/s4u_storage.cpp
+ src/s4u/s4u_VirtualMachine.cpp
)
set(SIMGRID_SRC
include/simgrid/s4u/Mutex.hpp
include/simgrid/s4u/conditionVariable.hpp
include/simgrid/s4u/storage.hpp
+ include/simgrid/s4u/VirtualMachine.hpp
include/simgrid/s4u.hpp
include/simgrid/plugins/energy.h
include/smpi/mpi.h