1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

Feature #3737: Use DDEBUG and DDDEBUG log levels in the scheduler

This commit is contained in:
Carlos Martín 2015-04-21 18:21:31 +02:00
parent b5da40364f
commit 4807266ebc
5 changed files with 88 additions and 65 deletions

View File

@ -40,7 +40,7 @@
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
const char Log::error_names[] ={ 'E', 'W', 'I', 'D' };
const char Log::error_names[] ={ 'E', 'W', 'I', 'D', 'D', 'D' };
unsigned int Log::zone_id = 0;

View File

@ -53,7 +53,15 @@
# - system: defines the logging system:
# file to log in the sched.log file
# syslog to use the syslog facilities
# - debug_level: 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG
# - debug_level:
# 0 = ERROR
# 1 = WARNING
# 2 = INFO
# 3 = DEBUG Includes general scheduling information (default)
# 4 = DDEBUG Includes time taken for each step
# 5 = DDDEBUG Includes detailed information about the scheduling
# decision, such as VM requirements, Host ranking for
# each VM, etc. This will impact the performance
#*******************************************************************************
MESSAGE_SIZE = 1073741824

View File

@ -25,19 +25,21 @@ int HostPoolXML::set_up()
if ( rc == 0 )
{
#ifdef SCHEDDEBUG
oss << "Discovered Hosts (enabled):" << endl;
map<int,ObjectXML*>::iterator it;
for (it=objects.begin();it!=objects.end();it++)
if (NebulaLog::log_level() >= Log::DDDEBUG)
{
oss << " " << it->first;
oss << "Discovered Hosts (enabled):" << endl;
map<int,ObjectXML*>::iterator it;
for (it=objects.begin();it!=objects.end();it++)
{
oss << " " << it->first;
}
}
else
{
oss << "Discovered " << objects.size() << " enabled hosts.";
}
#else
oss << "Discovered " << objects.size() << " enabled hosts.";
#endif
NebulaLog::log("HOST",Log::DEBUG,oss);
}

View File

@ -31,42 +31,46 @@ int VirtualMachinePoolXML::set_up()
return -2;
}
#ifdef SCHEDDEBUG
oss << "Pending/rescheduling VM and capacity requirements:" << endl;
oss << right << setw(8) << "VM" << " "
<< right << setw(4) << "CPU" << " "
<< right << setw(11) << "Memory" << " "
<< right << setw(11) << "System DS" << " "
<< " Image DS"
<< endl << setw(60) << setfill('-') << "-" << setfill(' ');
for (map<int,ObjectXML*>::iterator it=objects.begin();it!=objects.end();it++)
if (NebulaLog::log_level() >= Log::DDDEBUG)
{
int cpu, mem;
long long disk;
oss << "Pending/rescheduling VM and capacity requirements:" << endl;
VirtualMachineXML * vm = static_cast<VirtualMachineXML *>(it->second);
oss << right << setw(8) << "VM" << " "
<< right << setw(4) << "CPU" << " "
<< right << setw(11) << "Memory" << " "
<< right << setw(11) << "System DS" << " "
<< " Image DS"
<< endl << setw(60) << setfill('-') << "-" << setfill(' ');
vm->get_requirements(cpu, mem, disk);
oss << endl
<< right << setw(8) << it->first << " "
<< right << setw(4) << cpu << " "
<< right << setw(11) << mem << " "
<< right << setw(11) << disk << " ";
map<int,long long> ds_usage = vm->get_storage_usage();
for (map<int,long long>::const_iterator ds_it = ds_usage.begin();
ds_it != ds_usage.end(); ds_it++)
for (map<int,ObjectXML*>::iterator it=objects.begin();it!=objects.end();it++)
{
oss << " DS " << ds_it->first << ": " << ds_it->second << " ";
int cpu, mem;
long long disk;
VirtualMachineXML * vm = static_cast<VirtualMachineXML *>(it->second);
vm->get_requirements(cpu, mem, disk);
oss << endl
<< right << setw(8) << it->first << " "
<< right << setw(4) << cpu << " "
<< right << setw(11) << mem << " "
<< right << setw(11) << disk << " ";
map<int,long long> ds_usage = vm->get_storage_usage();
for (map<int,long long>::const_iterator ds_it = ds_usage.begin();
ds_it != ds_usage.end(); ds_it++)
{
oss << " DS " << ds_it->first << ": " << ds_it->second << " ";
}
}
}
#else
oss << "Found " << objects.size() << " pending/rescheduling VMs.";
#endif
else
{
oss << "Found " << objects.size() << " pending/rescheduling VMs.";
}
NebulaLog::log("VM",Log::DEBUG,oss);
}

View File

@ -51,7 +51,7 @@ static double profile(bool start, const string& message="")
if (!message.empty())
{
NebulaLog::log("SCHED", Log::INFO, message);
NebulaLog::log("SCHED", Log::DDEBUG, message);
}
return 0;
@ -66,8 +66,8 @@ static double profile(bool start, const string& message="")
{
ostringstream oss;
oss << message << " Total time: " << t << "s";
NebulaLog::log("SCHED", Log::INFO, oss);
oss << message << " Total time: " << one_util::float_to_str(t) << "s";
NebulaLog::log("SCHED", Log::DDEBUG, oss);
}
return t;
@ -186,7 +186,7 @@ void Scheduler::start()
value = log->vector_value("DEBUG_LEVEL");
ilevel = atoi(value.c_str());
if (0 <= ilevel && ilevel <= 3 )
if (Log::ERROR <= ilevel && ilevel <= Log::DDDEBUG)
{
clevel = static_cast<Log::MessageType>(ilevel);
}
@ -955,28 +955,29 @@ void Scheduler::match_schedule()
ostringstream oss;
oss << "Match Making statistics:\n"
<< "\tNumber of VMs: " << pending_vms.size() << endl
<< "\tTotal time: " << time(0) - stime << "s" << endl
<< "\tTotal Match time: " << total_match_time << "s" << endl
<< "\tTotal Ranking Time: " << total_rank_time << "s";
<< "\tNumber of VMs: \t\t" << pending_vms.size() << endl
<< "\tTotal time: \t\t" << one_util::float_to_str(time(0) - stime) << "s" << endl
<< "\tTotal Match time: \t" << one_util::float_to_str(total_match_time) << "s" << endl
<< "\tTotal Ranking time: \t" << one_util::float_to_str(total_rank_time) << "s";
NebulaLog::log("SCHED", Log::DEBUG, oss);
NebulaLog::log("SCHED", Log::DDEBUG, oss);
#ifdef SCHEDDEBUG
ostringstream oss;
oss << "Scheduling Results:" << endl;
for (map<int, ObjectXML*>::const_iterator vm_it=pending_vms.begin();
vm_it != pending_vms.end(); vm_it++)
if (NebulaLog::log_level() >= Log::DDDEBUG)
{
vm = static_cast<VirtualMachineXML*>(vm_it->second);
ostringstream oss;
oss << *vm;
oss << "Scheduling Results:" << endl;
for (map<int, ObjectXML*>::const_iterator vm_it=pending_vms.begin();
vm_it != pending_vms.end(); vm_it++)
{
vm = static_cast<VirtualMachineXML*>(vm_it->second);
oss << *vm;
}
NebulaLog::log("SCHED", Log::DDDEBUG, oss);
}
NebulaLog::log("SCHED", Log::DEBUG, oss);
#endif
}
/* -------------------------------------------------------------------------- */
@ -1000,6 +1001,8 @@ void Scheduler::dispatch()
map<int, unsigned int> host_vms;
pair<map<int,unsigned int>::iterator, bool> rc;
map<int, ObjectXML*>::const_iterator vm_it;
vector<Resource *>::const_reverse_iterator i, j;
const map<int, ObjectXML*> pending_vms = vmpool->get_objects();
@ -1011,7 +1014,7 @@ void Scheduler::dispatch()
// Dispatch each VM till we reach the dispatch limit
//--------------------------------------------------------------------------
for (map<int, ObjectXML*>::const_iterator vm_it=pending_vms.begin();
for (vm_it = pending_vms.begin();
vm_it != pending_vms.end() &&
( dispatch_limit <= 0 || dispatched_vms < dispatch_limit );
vm_it++)
@ -1185,6 +1188,12 @@ void Scheduler::dispatch()
}
}
if (vm_it != pending_vms.end())
{
dss << endl << "MAX_DISPATCH limit of " << dispatch_limit << " reached, "
<< std::distance(vm_it, pending_vms.end()) << " VMs were not dispatched";
}
NebulaLog::log("SCHED", Log::DEBUG, dss);
}