3 #ifndef SURF_MODEL_CPU_H_
4 #define SURF_MODEL_CPU_H_
10 typedef CpuModel *CpuModelPtr;
16 typedef CpuLmm *CpuLmmPtr;
19 typedef CpuAction *CpuActionPtr;
22 typedef CpuActionLmm *CpuActionLmmPtr;
27 class CpuModel : public Model {
29 CpuModel(string name) : Model(name) {};
30 CpuPtr createResource(string name);
31 void updateActionsStateLazy(double now, double delta);
32 void updateActionsStateFull(double now, double delta);
34 virtual void addTraces() =0;
40 class Cpu : virtual public Resource {
43 Cpu(CpuModelPtr model, const char* name, xbt_dict_t properties) : Resource(model, name, properties) {};
44 virtual ActionPtr execute(double size)=0;
45 virtual ActionPtr sleep(double duration)=0;
46 virtual int getCore();
47 virtual double getSpeed(double load);
48 virtual double getAvailableSpeed();
50 virtual double getCurrentPowerPeak()=0;
51 virtual double getPowerPeakAt(int pstate_index)=0;
52 virtual int getNbPstates()=0;
53 virtual void setPowerPeakAt(int pstate_index)=0;
54 virtual double getConsumedEnergy()=0;
57 double m_powerPeak; /*< CPU power peak */
58 double m_powerScale; /*< Percentage of CPU disponible */
62 //virtual boost::shared_ptr<Action> execute(double size) = 0;
63 //virtual boost::shared_ptr<Action> sleep(double duration) = 0;
66 class CpuLmm : public ResourceLmm, public Cpu {
69 CpuLmm(CpuModelPtr model, const char* name, xbt_dict_t properties) : ResourceLmm(), Cpu(model, name, properties) {};
70 /* Note (hypervisor): */
71 lmm_constraint_t *p_constraintCore;
77 class CpuAction : virtual public Action {
80 CpuAction(ModelPtr model, double cost, bool failed)
81 : Action(model, cost, failed) {};
82 virtual void setAffinity(CpuPtr cpu, unsigned long mask)=0;
83 virtual void setBound(double bound)=0;
86 class CpuActionLmm : public ActionLmm, public CpuAction {
89 CpuActionLmm(ModelPtr model, double cost, bool failed)
90 : Action(model, cost, failed), ActionLmm(model, cost, failed), CpuAction(model, cost, failed) {};
91 void updateRemainingLazy(double now);
92 virtual void updateEnergy()=0;
93 void setAffinity(CpuPtr cpu, unsigned long mask);
94 void setBound(double bound);
99 #endif /* SURF_MODEL_CPU_H_ */