2 #include "maxmin_private.h"
4 #ifndef SURF_MODEL_CPU_H_
5 #define SURF_MODEL_CPU_H_
11 typedef CpuModel *CpuModelPtr;
17 typedef CpuLmm *CpuLmmPtr;
20 typedef CpuAction *CpuActionPtr;
23 typedef CpuActionLmm *CpuActionLmmPtr;
28 class CpuModel : public Model {
30 CpuModel(string 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(CpuModelPtr model, const char* name, xbt_dict_t properties, int core, double powerPeak, double powerScale)
45 : Resource(model, name, properties), m_core(core), m_powerPeak(powerPeak), m_powerScale(powerScale)
47 virtual ActionPtr execute(double size)=0;
48 virtual ActionPtr sleep(double duration)=0;
49 virtual int getCore();
50 virtual double getSpeed(double load);
51 virtual double getAvailableSpeed();
53 virtual double getCurrentPowerPeak()=0;
54 virtual double getPowerPeakAt(int pstate_index)=0;
55 virtual int getNbPstates()=0;
56 virtual void setPowerPeakAt(int pstate_index)=0;
57 virtual double getConsumedEnergy()=0;
61 double m_powerPeak; /*< CPU power peak */
62 double m_powerScale; /*< Percentage of CPU disponible */
65 //virtual boost::shared_ptr<Action> execute(double size) = 0;
66 //virtual boost::shared_ptr<Action> sleep(double duration) = 0;
69 class CpuLmm : public ResourceLmm, public Cpu {
71 CpuLmm() : p_constraintCore(NULL), p_constraintCoreId(NULL) {};
72 CpuLmm(CpuModelPtr model, const char* name, xbt_dict_t properties, int core, double powerPeak, double powerScale);
74 /* Note (hypervisor): */
75 lmm_constraint_t *p_constraintCore;
76 void **p_constraintCoreId;
83 class CpuAction : virtual public Action {
86 CpuAction(ModelPtr model, double cost, bool failed)
87 : Action(model, cost, failed) {};
88 virtual void setAffinity(CpuPtr cpu, unsigned long mask)=0;
89 virtual void setBound(double bound)=0;
92 class CpuActionLmm : public ActionLmm, public CpuAction {
95 CpuActionLmm(ModelPtr model, double cost, bool failed)
96 : Action(model, cost, failed), ActionLmm(model, cost, failed), CpuAction(model, cost, failed) {};
97 void updateRemainingLazy(double now);
98 virtual void updateEnergy()=0;
99 void setAffinity(CpuPtr cpu, unsigned long mask);
100 void setBound(double bound);
105 #endif /* SURF_MODEL_CPU_H_ */