Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
sonar: remove a left-over struct
[simgrid.git] / src / plugins / vm / VirtualMachineImpl.hpp
1 /* Copyright (c) 2004-2017. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include "simgrid/s4u/VirtualMachine.hpp"
7 #include "src/simix/ActorImpl.hpp"
8 #include "src/surf/HostImpl.hpp"
9 #include <algorithm>
10 #include <deque>
11 #include <unordered_map>
12
13 #ifndef VM_INTERFACE_HPP_
14 #define VM_INTERFACE_HPP_
15
16 #define GUESTOS_NOISE 100 // This value corresponds to the cost of the global action associated to the VM
17                           // It corresponds to the cost of a VM running no tasks.
18
19 namespace simgrid {
20 namespace vm {
21
22 /************
23  * Resource *
24  ************/
25
26 /** @ingroup SURF_vm_interface
27  * @brief SURF VM interface class
28  * @details A VM represent a virtual machine
29  */
30 XBT_PUBLIC_CLASS VirtualMachineImpl : public surf::HostImpl, public simgrid::xbt::Extendable<VirtualMachineImpl>
31 {
32   friend simgrid::s4u::VirtualMachine;
33
34 public:
35   explicit VirtualMachineImpl(s4u::VirtualMachine * piface, s4u::Host * host, int coreAmount, size_t ramsize);
36   ~VirtualMachineImpl();
37
38   /** @brief Suspend the VM */
39   virtual void suspend(simgrid::simix::ActorImpl* issuer);
40
41   /** @brief Resume the VM */
42   virtual void resume();
43
44   /** @brief Shutdown the VM */
45   virtual void shutdown(simgrid::simix::ActorImpl* issuer);
46
47   /** @brief Change the physical host on which the given VM is running */
48   virtual void setPm(s4u::Host* dest);
49
50   /** @brief Get the physical machine hosting the VM */
51   s4u::Host* getPm();
52
53   sg_size_t getRamsize() { return ramsize_; }
54   void setRamsize(sg_size_t ramsize) { ramsize_ = ramsize; }
55
56   virtual void setBound(double bound);
57
58   void getParams(vm_params_t params);
59   void setParams(vm_params_t params);
60
61   /* The vm object of the lower layer */
62   surf::Action* action_ = nullptr;
63
64   e_surf_vm_state_t getState();
65   void setState(e_surf_vm_state_t state);
66   static std::deque<s4u::VirtualMachine*> allVms_;
67   int coreAmount() { return coreAmount_; }
68
69   bool isMigrating = false;
70   /*************
71    * Callbacks *
72    *************/
73   /** @ingroup SURF_callbacks
74    * @brief Callbacks fired after VM creation. Signature: `void(VirtualMachine*)`
75    */
76   static simgrid::xbt::signal<void(simgrid::vm::VirtualMachineImpl*)> onVmCreation;
77
78   /** @ingroup SURF_callbacks
79    * @brief Callbacks fired after VM destruction. Signature: `void(VirtualMachine*)`
80    */
81   static simgrid::xbt::signal<void(simgrid::vm::VirtualMachineImpl*)> onVmDestruction;
82
83   /** @ingroup SURF_callbacks
84    * @brief Callbacks after VM State changes. Signature: `void(VirtualMachine*)`
85    */
86   static simgrid::xbt::signal<void(simgrid::vm::VirtualMachineImpl*)> onVmStateChange;
87
88 private:
89   simgrid::s4u::Host* hostPM_;
90   s_vm_params_t params_;
91   int coreAmount_;
92   size_t ramsize_            = 0;
93   e_surf_vm_state_t vmState_ = SURF_VM_STATE_CREATED;
94 };
95
96 /*********
97  * Model *
98  *********/
99 /** @ingroup SURF_vm_interface
100  * @brief SURF VM model interface class
101  * @details A model is an object which handle the interactions between its Resources and its Actions
102  */
103 class XBT_PRIVATE VMModel : public surf::HostModel {
104 public:
105   VMModel();
106   void ignoreEmptyVmInPmLMM() override{};
107
108   double nextOccuringEvent(double now) override;
109   void updateActionsState(double /*now*/, double /*delta*/) override{};
110 };
111 }
112 }
113
114 XBT_PUBLIC_DATA(simgrid::vm::VMModel*) surf_vm_model;
115
116 #endif /* VM_INTERFACE_HPP_ */