Software to detect if a Virtual Machine is busy:
Introduction:
Servers are ubiquitous and a private Cloud provider has
hundreds of servers in their inventory. Most of these servers fall under one of
the following categories: Initialized, Active, Suspended, and Terminated. A
server is generally in the initialized state it is being imaged and prepared
for commissioning. A server is active when it is being used frequently by the
user. A server is in the suspended state when there is confirmation that the
user is no longer using it actively. A server is the terminated state when the
server is ready to be reclaimed or repurposed.
Periodically a cloud provider may want to reclaim resources such as
servers. In such cases, it is important for the cloud provider mark the servers
as suspended before they can be terminated. Going through several hundreds of
servers and marking them as suspended only on user confirmation is not very
productive. Instead if there were a way to detect whether the servers are
active or not, then we could even be more judicious of which users to target
for confirmation.
Problem definition: How do we know whether a server is
active or not ?
Solution: Servers come in many different OS versions and
flavors. A script that might work in one may not work in another. Therefore, we
may need to target each OS family with the nuances and metrics that they allow.
On Windows, we have a lot of instrumentation builtin. They
came in many different forms such as WMI, perfmon counters, MOM and tracing and
logging. There is probably very little need to write sophisticated code to
figure out any particular component or system. That said, a Windows system task
viewer may show varied level of peaks and valleys of activities even without user
input.
On Macintosh, we have plenty of dscripts stashed away under
the hood in Automations. In fact, a Mac OS can reliably say when the system is
not doing much activity.
On Ubuntu, we have several different counters typically
under the proc folder. In fact top and uptime commands often give metrics that
give an idea of how active a VM was. The /proc/loadavg has the first three
fields as load averages that give an idea of the number of jobs in the run
queue. Load average is different from waiting for cpu. Generally if you have 1 process
running at 100%, then the load average can be expected to be approach 1.
Conclusion: Periodic cron jobs may collect statistics over
time that can reflect the usage of a VM server. Given this visibility,
different orchestration frameworks and program may be able to use this
information for several purposes such as monitoring, conservation etc.
#codingexercise
int FindSmallestWindow(List<int> haystack,
List<int> needle)
{
// parameter validation and assume no duplicates in haystack or needle.
// parameter validation and assume no duplicates in haystack or needle.
var indexes= new
SortedList();
for (int I =0; I <haystack.Length; I++)
indexes.Add(
haystack[i], i);
Array.sort(needle);
// indexes and needle both sorted
now we can use the sorted sequence and index arithmetic linearly
int min = haystack.Length - 1;
int max = 0;
int range = 0;
for (int i = 0; i < needle.length; i++)
{
int index = indexes[needle[i]];
if (index < min) min = index;
if (index > max) max = index;
}
if (min > max) {int temp = min; min = max; max = temp;}
int range = max - min + 1;
return range;
int min = haystack.Length - 1;
int max = 0;
int range = 0;
for (int i = 0; i < needle.length; i++)
{
int index = indexes[needle[i]];
if (index < min) min = index;
if (index > max) max = index;
}
if (min > max) {int temp = min; min = max; max = temp;}
int range = max - min + 1;
return range;
}
No comments:
Post a Comment