X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/51f8d73fe7373b7b04bc2727ff9ef61272dce9a9..3af9dcb5714db015a7038a58701b2b453f52c6ca:/src/surf/cpu.hpp?ds=sidebyside diff --git a/src/surf/cpu.hpp b/src/surf/cpu.hpp index 530d32464f..669578a9bf 100644 --- a/src/surf/cpu.hpp +++ b/src/surf/cpu.hpp @@ -12,9 +12,15 @@ typedef CpuModel *CpuModelPtr; class Cpu; typedef Cpu *CpuPtr; +class CpuLmm; +typedef CpuLmm *CpuLmmPtr; + class CpuAction; typedef CpuAction *CpuActionPtr; +class CpuActionLmm; +typedef CpuActionLmm *CpuActionLmmPtr; + /********* * Model * *********/ @@ -22,6 +28,8 @@ class CpuModel : public Model { public: CpuModel(string name) : Model(name) {}; CpuPtr createResource(string name); + void updateActionsStateLazy(double now, double delta); + void updateActionsStateFull(double now, double delta); virtual void addTraces() =0; }; @@ -29,29 +37,61 @@ public: /************ * Resource * ************/ -class Cpu : public Resource { +class Cpu : virtual public Resource { public: - Cpu(CpuModelPtr model, string name, xbt_dict_t properties) : Resource(model, name, properties) {}; - CpuActionPtr execute(double size); - CpuActionPtr sleep(double duration); - e_surf_resource_state_t getState(); - int getCore(); - double getSpeed(double load); - double getAvailableSpeed(); - void addTraces(void); + Cpu(){}; + Cpu(CpuModelPtr model, const char* name, xbt_dict_t properties) : Resource(model, name, properties) {}; + virtual ActionPtr execute(double size)=0; + virtual ActionPtr sleep(double duration)=0; + virtual int getCore(); + virtual double getSpeed(double load); + virtual double getAvailableSpeed(); + + virtual double getCurrentPowerPeak()=0; + virtual double getPowerPeakAt(int pstate_index)=0; + virtual int getNbPstates()=0; + virtual void setPowerPeakAt(int pstate_index)=0; + virtual double getConsumedEnergy()=0; + void addTraces(void); + double m_powerPeak; /*< CPU power peak */ + double m_powerScale; /*< Percentage of CPU disponible */ + int m_core; protected: - double m_powerPeak; + //virtual boost::shared_ptr execute(double size) = 0; //virtual boost::shared_ptr sleep(double duration) = 0; }; +class CpuLmm : public ResourceLmm, public Cpu { +public: + CpuLmm(){}; + CpuLmm(CpuModelPtr model, const char* name, xbt_dict_t properties) : ResourceLmm(), Cpu(model, name, properties) {}; + /* Note (hypervisor): */ + lmm_constraint_t *p_constraintCore; +}; + /********** * Action * **********/ -class CpuAction : public Action { +class CpuAction : virtual public Action { +public: + CpuAction(){}; + CpuAction(ModelPtr model, double cost, bool failed) + : Action(model, cost, failed) {}; +}; + +class CpuActionLmm : public ActionLmm, public CpuAction { public: - CpuAction(ModelPtr model, double cost, bool failed): Action(model, cost, failed) {}; + CpuActionLmm(){}; + CpuActionLmm(ModelPtr model, double cost, bool failed) + : Action(model, cost, failed), ActionLmm(model, cost, failed), CpuAction(model, cost, failed) {}; + void updateRemainingLazy(double now); + virtual void updateEnergy()=0; + void setAffinity(CpuLmmPtr cpu, unsigned long mask); + void setBound(double bound); + double m_bound; }; + #endif /* SURF_MODEL_CPU_H_ */