1 #include "surf_interface.hpp"
2 #include "maxmin_private.hpp"
4 #ifndef SURF_CPU_INTERFACE_HPP_
5 #define SURF_CPU_INTERFACE_HPP_
11 typedef CpuModel *CpuModelPtr;
17 typedef CpuLmm *CpuLmmPtr;
20 typedef CpuAction *CpuActionPtr;
23 typedef CpuActionLmm *CpuActionLmmPtr;
28 class CpuModel : public Model {
30 CpuModel(const char *name) : Model(name) {};
31 CpuPtr createResource(string name);
32 void updateActionsStateLazy(double now, double delta);
33 void updateActionsStateFull(double now, double delta);
35 virtual void addTraces() =0;
41 class Cpu : virtual public Resource {
44 Cpu(int core, double powerPeak, double powerScale);
45 virtual CpuActionPtr execute(double size)=0;
46 virtual CpuActionPtr sleep(double duration)=0;
47 virtual int getCore();
48 virtual double getSpeed(double load);
49 virtual double getAvailableSpeed();
51 virtual double getCurrentPowerPeak()=0;
52 virtual double getPowerPeakAt(int pstate_index)=0;
53 virtual int getNbPstates()=0;
54 virtual void setPowerPeakAt(int pstate_index)=0;
55 virtual double getConsumedEnergy()=0;
59 double m_powerPeak; /*< CPU power peak */
60 double m_powerScale; /*< Percentage of CPU disponible */
63 //virtual boost::shared_ptr<Action> execute(double size) = 0;
64 //virtual boost::shared_ptr<Action> sleep(double duration) = 0;
67 class CpuLmm : public ResourceLmm, public Cpu {
69 CpuLmm(lmm_constraint_t constraint);
70 CpuLmm(lmm_constraint_t constraint, int core, double powerPeak, double powerScale);
72 /* Note (hypervisor): */
73 lmm_constraint_t *p_constraintCore;
74 void **p_constraintCoreId;
81 class CpuAction : virtual public Action {
84 CpuAction(ModelPtr model, double cost, bool failed)
85 : Action(model, cost, failed) {};//FIXME:REMOVE
86 virtual void setAffinity(CpuPtr cpu, unsigned long mask)=0;
87 virtual void setBound(double bound)=0;
90 class CpuActionLmm : public ActionLmm, public CpuAction {
93 CpuActionLmm(lmm_variable_t var)
94 : ActionLmm(var), CpuAction() {};
95 void updateRemainingLazy(double now);
96 virtual void updateEnergy()=0;
97 void setAffinity(CpuPtr cpu, unsigned long mask);
98 void setBound(double bound);
103 #endif /* SURF_CPU_INTERFACE_HPP_ */