Cpu::onSpeedChange();
}
-void CpuCas01::updateState(tmgr_trace_iterator_t event_type, double value, double date)
+void CpuCas01::updateState(tmgr_trace_iterator_t event_type, double value)
{
lmm_variable_t var = NULL;
lmm_element_t elem = NULL;
turnOn();
} else {
lmm_constraint_t cnst = getConstraint();
+ double date = surf_get_clock();
turnOff();
int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
int initiallyOn, tmgr_trace_t stateTrace) ;
~CpuCas01();
- void updateState(tmgr_trace_iterator_t event_type, double value, double date) override;
+ void updateState(tmgr_trace_iterator_t event_type, double value) override;
CpuAction *execution_start(double size) override;
CpuAction *sleep(double duration) override;
}
}
-void CpuTi::updateState(tmgr_trace_iterator_t event_type,
- double value, double date)
+void CpuTi::updateState(tmgr_trace_iterator_t event_type, double value)
{
CpuTiAction *action;
CpuTiTgmr *trace;
s_tmgr_event_t val;
- XBT_DEBUG("Finish trace date: %f value %f date %f", surf_get_clock(),
- value, date);
+ XBT_DEBUG("Finish trace date: value %f", value);
/* update remaining of actions and put in modified cpu swag */
- updateRemainingAmount(date);
+ updateRemainingAmount(surf_get_clock());
modified(true);
turnOn();
} else {
turnOff();
+ double date = surf_get_clock();
/* put all action running on cpu to failed */
for(ActionTiList::iterator it(p_actionSet->begin()), itend(p_actionSet->end())
void set_speed_trace(tmgr_trace_t trace);
- void updateState(tmgr_trace_iterator_t event_type, double value, double date) override;
+ void updateState(tmgr_trace_iterator_t event_type, double value) override;
void updateActionsFinishTime(double now);
+ void updateRemainingAmount(double now);
+
bool isUsed() override;
CpuAction *execution_start(double size) override;
CpuAction *sleep(double duration) override;
double current_frequency;
- void updateRemainingAmount(double now);
public:
boost::intrusive::list_member_hook<> cpu_ti_hook;
};
virtual int fileMove(surf_file_t fd, const char* fullpath);
bool isUsed() override {DIE_IMPOSSIBLE;} // FIXME: Host should not be a Resource
- void updateState(tmgr_trace_iterator_t event_type, double value, double date) override
+ void updateState(tmgr_trace_iterator_t event_type, double value) override
{THROW_IMPOSSIBLE;} // FIXME: Host should not be a Resource
public:
return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint());
}
-void CpuL07::updateState(tmgr_trace_iterator_t triggered, double value, double /*date*/){
+void CpuL07::updateState(tmgr_trace_iterator_t triggered, double value){
XBT_DEBUG("Updating cpu %s (%p) with value %g", getName(), this, value);
if (triggered == p_speedEvent) {
m_speedScale = value;
}
}
-void LinkL07::updateState(tmgr_trace_iterator_t triggered, double value, double date) {
- XBT_DEBUG("Updating link %s (%p) with value=%f for date=%g", getName(), this, value, date);
+void LinkL07::updateState(tmgr_trace_iterator_t triggered, double value) {
+ XBT_DEBUG("Updating link %s (%p) with value=%f", getName(), this, value);
if (triggered == m_bandwidth.event) {
- updateBandwidth(value, date);
+ updateBandwidth(value);
tmgr_trace_event_unref(&m_bandwidth.event);
} else if (triggered == m_latency.event) {
- updateLatency(value, date);
+ updateLatency(value);
tmgr_trace_event_unref(&m_latency.event);
} else if (triggered == m_stateEvent) {
if (value > 0)
}
}
-void LinkL07::updateBandwidth(double value, double date)
+void LinkL07::updateBandwidth(double value)
{
m_bandwidth.peak = value;
lmm_update_constraint_bound(getModel()->getMaxminSystem(), getConstraint(), m_bandwidth.peak * m_bandwidth.scale);
}
-void LinkL07::updateLatency(double value, double date)
+void LinkL07::updateLatency(double value)
{
lmm_variable_t var = NULL;
L07Action *action;
int core, int initiallyOn, tmgr_trace_t state_trace);
~CpuL07();
bool isUsed() override;
- void updateState(tmgr_trace_iterator_t event_type, double value, double date) override;
+ void updateState(tmgr_trace_iterator_t event_type, double value) override;
Action *execution_start(double size) override;
Action *sleep(double duration) override;
protected:
e_surf_link_sharing_policy_t policy);
~LinkL07(){ };
bool isUsed() override;
- void updateState(tmgr_trace_iterator_t event_type, double value, double date) override;
- void updateBandwidth(double value, double date=surf_get_clock()) override;
- void updateLatency(double value, double date=surf_get_clock()) override;
+ void updateState(tmgr_trace_iterator_t event_type, double value) override;
+ void updateBandwidth(double value) override;
+ void updateLatency(double value) override;
};
/**********
} else if (!strcmp(optim, "Lazy")) {
p_updateMechanism = UM_LAZY;
m_selectiveUpdate = 1;
- xbt_assert((select == 1)
- ||
- (xbt_cfg_is_default_value
- (_sg_cfg_set, "network/maxmin_selective_update")),
+ xbt_assert((select == 1) || (xbt_cfg_is_default_value(_sg_cfg_set, "network/maxmin_selective_update")),
"Disabling selective update while using the lazy update mechanism is dumb!");
} else {
xbt_die("Unsupported optimization (%s) for this model", optim);
-void NetworkCm02Link::updateState(tmgr_trace_iterator_t triggered,
- double value, double date)
+void NetworkCm02Link::updateState(tmgr_trace_iterator_t triggered, double value)
{
/* Find out which of my iterators was triggered, and react accordingly */
if (triggered == m_bandwidth.event) {
- updateBandwidth(value, date);
+ updateBandwidth(value);
tmgr_trace_event_unref(&m_bandwidth.event);
} else if (triggered == m_latency.event) {
- updateLatency(value, date);
+ updateLatency(value);
tmgr_trace_event_unref(&m_latency.event);
} else if (triggered == m_stateEvent) {
if (value > 0)
else {
lmm_variable_t var = NULL;
lmm_element_t elem = NULL;
+ double now = surf_get_clock();
turnOff();
while ((var = lmm_get_var_from_cnst(getModel()->getMaxminSystem(), getConstraint(), &elem))) {
if (action->getState() == SURF_ACTION_RUNNING ||
action->getState() == SURF_ACTION_READY) {
- action->setFinishTime(date);
+ action->setFinishTime(now);
action->setState(SURF_ACTION_FAILED);
}
}
getConstraint());
}
-void NetworkCm02Link::updateBandwidth(double value, double date){
+void NetworkCm02Link::updateBandwidth(double value) {
double delta = sg_weight_S_parameter / value - sg_weight_S_parameter /
(m_bandwidth.peak * m_bandwidth.scale);
lmm_variable_t var = NULL;
getConstraint(),
sg_bandwidth_factor *
(m_bandwidth.peak * m_bandwidth.scale));
- TRACE_surf_link_set_bandwidth(date, getName(), sg_bandwidth_factor * m_bandwidth.peak * m_bandwidth.scale);
+ TRACE_surf_link_set_bandwidth(surf_get_clock(), getName(), sg_bandwidth_factor * m_bandwidth.peak * m_bandwidth.scale);
if (sg_weight_S_parameter > 0) {
while ((var = lmm_get_var_from_cnst_safe(getModel()->getMaxminSystem(), getConstraint(), &elem, &nextelem, &numelem))) {
action = (NetworkCm02Action*) lmm_variable_id(var);
}
}
-void NetworkCm02Link::updateLatency(double value, double date){
+void NetworkCm02Link::updateLatency(double value){
double delta = value - m_latency.peak;
lmm_variable_t var = NULL;
lmm_element_t elem = NULL;
double lat_initial,
tmgr_trace_t lat_trace,
e_surf_link_sharing_policy_t policy);
- void updateState(tmgr_trace_iterator_t event_type, double value, double date) override;
- void updateBandwidth(double value, double date=surf_get_clock()) override;
- void updateLatency(double value, double date=surf_get_clock()) override;
+ void updateState(tmgr_trace_iterator_t event_type, double value) override;
+ void updateBandwidth(double value) override;
+ void updateLatency(double value) override;
virtual void gapAppend(double /*size*/, const Link* /*link*/, NetworkAction * /*action*/) {};
virtual double getBandwidth();
/** @brief Update the bandwidth in bytes per second of current Link */
- virtual void updateBandwidth(double value, double date=surf_get_clock())=0;
+ virtual void updateBandwidth(double value)=0;
/** @brief Get the latency in seconds of current Link */
virtual double getLatency();
/** @brief Update the latency in seconds of current Link */
- virtual void updateLatency(double value, double date=surf_get_clock())=0;
+ virtual void updateLatency(double value)=0;
/** @brief The sharing policy is a @{link e_surf_link_sharing_policy_t::EType} (0: FATPIPE, 1: SHARED, 2: FULLDUPLEX) */
virtual int sharingPolicy();
{
}
-void NetworkNS3Link::updateState(tmgr_trace_iterator_t event_type, double value, double date)
+void NetworkNS3Link::updateState(tmgr_trace_iterator_t event_type, double value)
{
-
+ THROW_UNIMPLEMENTED;
}
/**********
double bw_initial, double lat_initial);
~NetworkNS3Link();
- void updateState(tmgr_trace_iterator_t event_type, double value, double date);
- void updateBandwidth(double value, double date=surf_get_clock()){THROW_UNIMPLEMENTED;}
- void updateLatency(double value, double date=surf_get_clock()){THROW_UNIMPLEMENTED;}
+ void updateState(tmgr_trace_iterator_t event_type, double value) override;
+ void updateBandwidth(double value) override {THROW_UNIMPLEMENTED;}
+ void updateLatency(double value) override {THROW_UNIMPLEMENTED;}
//private:
int m_created;
return false;
}
-void Storage::updateState(tmgr_trace_iterator_t /*event_type*/, double /*value*/, double /*date*/)
+void Storage::updateState(tmgr_trace_iterator_t /*event_type*/, double /*value*/)
{
THROW_UNIMPLEMENTED;
}
* @param value [description]
* @param date [description]
*/
- void updateState(tmgr_trace_iterator_t event_type, double value, double date) override;
+ void updateState(tmgr_trace_iterator_t event_type, double value) override;
void turnOn() override;
void turnOff() override;
while ((event = future_evt_set->pop_leq(next_event_date, &value, &resource))) {
if (value >= 0){
- resource->updateState(event, value, NOW);
+ resource->updateState(event, value);
}
}
}
if(!host_that_restart)
host_that_restart = xbt_dynar_new(sizeof(char*), NULL);
- if (max_date != -1.0 && max_date != NOW) {
+ if (max_date > 0.0 && max_date != NOW) {
surf_min = max_date - NOW;
}
if(! surf_network_model->shareResourcesIsIdempotent()){ // NS3, I see you
if (next_event_date!=-1.0 && surf_min!=-1.0) {
surf_min = MIN(next_event_date - NOW, surf_min);
- } else{
- surf_min = MAX(next_event_date - NOW, surf_min);
+ } else {
+ surf_min = MAX(next_event_date - NOW, surf_min); // Get the positive component
}
XBT_DEBUG("Run the NS3 network at most %fs", surf_min);
surf_min = next_event_date - NOW;
XBT_DEBUG("This event will modify model state. Next event set to %f", surf_min);
}
+ // FIXME: I'm too lame to update NOW live, so I change it and restore it so that the real update with surf_min will work
+ double round_start = NOW;
+ NOW = next_event_date;
/* update state of the corresponding resource to the new value. Does not touch lmm.
It will be modified if needed when updating actions */
- XBT_DEBUG("Calling update_resource_state for resource %s with min %f", resource->getName(), surf_min);
- resource->updateState(event, value, next_event_date);
+ XBT_DEBUG("Calling update_resource_state for resource %s", resource->getName());
+ resource->updateState(event, value);
+ NOW = round_start;
}
}
*
* @param event_type [TODO]
* @param value [TODO]
- * @param date [TODO]
*/
- virtual void updateState(tmgr_trace_iterator_t event_type, double value, double date)=0;
+ virtual void updateState(tmgr_trace_iterator_t event_type, double value)=0;
/** @brief Check if the current Resource is used (if it currently serves an action) */
virtual bool isUsed()=0;
public:
DummyTestResource(const char *name) : Resource(nullptr,name) {}
bool isUsed() override {return false;}
- void updateState(tmgr_trace_iterator_t it, double date, double value) override {}
+ void updateState(tmgr_trace_iterator_t it, double value) override {}
};
static void test(void)