summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Sched
diff options
context:
space:
mode:
authorvenkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-10-11 15:37:02 +0000
committervenkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-10-11 15:37:02 +0000
commite31414dadcef74896df6d1dfdbc966915792df12 (patch)
treedc9d5bb41aed309ed7f5fde86b20f2798224c2a9 /TAO/orbsvcs/orbsvcs/Sched
parent35118f4dbce894dee7562e69d272407e10de2c8d (diff)
downloadATCD-e31414dadcef74896df6d1dfdbc966915792df12.tar.gz
ChangeLogTag: Mon Oct 11 10:26:59 2004 Venkita Subramonian <venkita@cs.wustl.edu>
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Sched')
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/Reconfig_Sched_Utils_T.cpp21
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/Reconfig_Sched_Utils_T.h14
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/Reconfig_Scheduler_T.cpp22
-rw-r--r--TAO/orbsvcs/orbsvcs/Sched/Reconfig_Scheduler_T.h3
4 files changed, 53 insertions, 7 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Sched_Utils_T.cpp b/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Sched_Utils_T.cpp
index fbe66a8a334..6c64ca69c56 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Sched_Utils_T.cpp
+++ b/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Sched_Utils_T.cpp
@@ -921,6 +921,8 @@ TAO_Tuple_Admission_Visitor (const CORBA::Double & critical_utilization_threshol
const CORBA::Double & noncritical_utilization_threshold)
: critical_utilization_ (0.0),
noncritical_utilization_ (0.0),
+ total_critical_utilization_ (0.0),
+ total_noncritical_utilization_ (0.0),
critical_utilization_threshold_ (critical_utilization_threshold),
noncritical_utilization_threshold_ (noncritical_utilization_threshold)
{
@@ -971,6 +973,8 @@ TAO_Tuple_Admission_Visitor<RECONFIG_SCHED_STRATEGY>::visit (TAO_RT_Info_Tuple &
if (RECONFIG_SCHED_STRATEGY::is_critical (t))
{
+ this->total_critical_utilization_ += delta_utilization;
+
if (this->critical_utilization_ + this->noncritical_utilization_
+delta_utilization
< this->critical_utilization_threshold_)
@@ -982,6 +986,7 @@ TAO_Tuple_Admission_Visitor<RECONFIG_SCHED_STRATEGY>::visit (TAO_RT_Info_Tuple &
}
else
{
+ this->total_noncritical_utilization_ += delta_utilization;
if (this->critical_utilization_ + this->noncritical_utilization_
+delta_utilization
< this->noncritical_utilization_threshold_)
@@ -991,7 +996,6 @@ TAO_Tuple_Admission_Visitor<RECONFIG_SCHED_STRATEGY>::visit (TAO_RT_Info_Tuple &
entry->actual_rt_info ()->period = t.period;
}
}
-
return 0;
}
@@ -1013,6 +1017,21 @@ TAO_Tuple_Admission_Visitor<RECONFIG_SCHED_STRATEGY>::noncritical_utilization ()
return this->noncritical_utilization_;
}
+template <class RECONFIG_SCHED_STRATEGY> CORBA::Double
+TAO_Tuple_Admission_Visitor<RECONFIG_SCHED_STRATEGY>::total_critical_utilization ()
+{
+ return this->total_critical_utilization_;
+}
+
+
+// Accessor for utilization by noncritical operations.
+
+template <class RECONFIG_SCHED_STRATEGY> CORBA::Double
+TAO_Tuple_Admission_Visitor<RECONFIG_SCHED_STRATEGY>::total_noncritical_utilization ()
+{
+ return this->total_noncritical_utilization_;
+}
+
// Accessor for utilization threshold for critical operations.
template <class RECONFIG_SCHED_STRATEGY> CORBA::Double
diff --git a/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Sched_Utils_T.h b/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Sched_Utils_T.h
index 9ea96225a4c..e1d29a51d88 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Sched_Utils_T.h
+++ b/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Sched_Utils_T.h
@@ -246,7 +246,7 @@ public:
(ACE_TYPENAME TAO_RSE_Dependency_Visitor<RECONFIG_SCHED_STRATEGY, ACE_LOCK>::DEPENDENCY_SET_MAP & dependency_map,
ACE_TYPENAME TAO_RSE_Dependency_Visitor<RECONFIG_SCHED_STRATEGY, ACE_LOCK>::RT_INFO_MAP & rt_info_map);
// Constructor.
-
+
protected:
virtual int pre_recurse_action (TAO_Reconfig_Scheduler_Entry &entry,
@@ -416,6 +416,12 @@ public:
CORBA::Double noncritical_utilization_threshold ();
// Accessor for utilization by noncritical operations.
+ CORBA::Double total_critical_utilization ();
+ // Accessor for utilization by critical operations.
+
+ CORBA::Double total_noncritical_utilization ();
+ // Accessor for utilization by noncritical operations.
+
private:
CORBA::Double critical_utilization_;
@@ -424,6 +430,12 @@ private:
CORBA::Double noncritical_utilization_;
// Utilization by noncritical operations.
+ CORBA::Double total_critical_utilization_;
+ // Utilization by critical operations.
+
+ CORBA::Double total_noncritical_utilization_;
+ // Utilization by noncritical operations.
+
CORBA::Double critical_utilization_threshold_;
// Utilization by critical operations.
diff --git a/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Scheduler_T.cpp b/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Scheduler_T.cpp
index a6a16be05f2..fd8d12992b6 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Scheduler_T.cpp
+++ b/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Scheduler_T.cpp
@@ -1434,7 +1434,6 @@ recompute_scheduling (CORBA::Long minimum_priority,
}
-
// @@ TODO: record any scheduling anomalies in a set within the scheduler,
// storing the maximum severity level recorded so far.
if (anomalies.ptr () == 0)
@@ -1445,6 +1444,19 @@ recompute_scheduling (CORBA::Long minimum_priority,
ACE_CHECK;
}
+ ACE_DEBUG ((LM_DEBUG,
+ "cutil = %f, ncutil = %f\n",
+ this->critical_utilization_,
+ this->noncritical_utilization_));
+
+ if (this->critical_utilization_ > critical_utilization_threshold_ ||
+ this->noncritical_utilization_ > noncritical_utilization_threshold_)
+ {
+ CORBA::ULong len = anomalies->length ();
+ anomalies->length (len + 1);
+ anomalies[len].description = CORBA::string_dup("Utilization Bound exceeded");
+ anomalies[len].severity = RtecScheduler::ANOMALY_ERROR;
+ }
// Set stability flags last.
this->stability_flags_ = SCHED_ALL_STABLE;
@@ -2538,7 +2550,8 @@ detect_cycles_i (ACE_ENV_SINGLE_ARG_DECL)
template <class RECONFIG_SCHED_STRATEGY, class ACE_LOCK> void
TAO_Reconfig_Scheduler<RECONFIG_SCHED_STRATEGY, ACE_LOCK>::
perform_admission_i (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException,
+ ACE_THROW_SPEC ((RtecScheduler::UTILIZATION_BOUND_EXCEEDED,
+ CORBA::SystemException,
RtecScheduler::INTERNAL))
{
#if defined (SCHEDULER_LOGGING)
@@ -2590,11 +2603,12 @@ perform_admission_i (ACE_ENV_SINGLE_ARG_DECL)
}
}
+
// Store the values accumulated by the visitor.
this->noncritical_utilization_ =
- admit_visitor.noncritical_utilization ();
+ admit_visitor.total_noncritical_utilization ();
this->critical_utilization_ =
- admit_visitor.critical_utilization ();
+ admit_visitor.total_critical_utilization ();
}
template <class RECONFIG_SCHED_STRATEGY, class ACE_LOCK> void
diff --git a/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Scheduler_T.h b/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Scheduler_T.h
index 1bba80973f5..c44f43abe39 100644
--- a/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Scheduler_T.h
+++ b/TAO/orbsvcs/orbsvcs/Sched/Reconfig_Scheduler_T.h
@@ -598,7 +598,8 @@ protected:
// checks for loops, marks unresolved remote dependencies.
void perform_admission_i (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException,
+ ACE_THROW_SPEC ((RtecScheduler::UTILIZATION_BOUND_EXCEEDED,
+ CORBA::SystemException,
RtecScheduler::INTERNAL));
// Compute aggregate execution times, then performs admission over
// rate tuples.