In my application, I want to increase CPU usage of application to desired value of user and make it steady till user intrest.
I am calculating total CPU usage using following method using top command.
sample code :
private long getCpuUsageStatistic() {
usage =0;
String tempString = executeTop(); // executeTop is method where I fire top command.
tempString = tempString.replaceAll(",", "");
tempString = tempString.replaceAll("User", "");
tempString = tempString.replaceAll("System", "");
tempString = tempString.replaceAll("IOW", "");
tempString = tempString.replaceAll("IRQ", "");
tempString = tempString.replaceAll("%", "");
for (int i = 0; i < 10; i++) {
tempString = tempString.replaceAll(" ", " ");
}
tempString = tempString.replaceAll(" ", " ");
tempString = tempString.trim();
String[] myString = tempString.split(" ");
int[] cpuUsageAsInt = new int[myString.length];
for (int i = 0; i < 2; i++) {
myString[i] = myString[i].trim();
cpuUsageAsInt[i] = Integer.parseInt(myString[i]);
//System.out.println("getCpuUsageStatistic-----"+cpuUsageAsInt[i]);
}
usage = cpuUsageAsInt[0]+cpuUsageAsInt[1];
System.out.println("getCpuUsageStatistic-----"+usage);
return usage;
}
And trying to incrase CPU usage by reducing sleeping time of running thread.
but, application COU usage is not increased.
My run method is like following::
public void run() {
while (true) {
try {
Thread.sleep(READ_INTERVAL);
totalUsage += cpuUpdate();
count++;
float cpuUsage = totalUsage / count;
if (count >= 10) {
if (cpuUsage >= desiredCpuUsage) {
System.out.println("cpu usage::%" + cpuUsage);
break;
} else {
System.out.println("cpu usage::%" + cpuUsage);
if(READ_INTERVAL / reducingFactor < 190)
{
if(cpuUsage / desiredCpuUsage< 0.2)
{
reducingFactor = reducingFactor / 1.2;
}
else if(cpuUsage / desiredCpuUsage < 0.5)
{
reducingFactor = reducingFactor / 1.5;
}
else if(cpuUsage / desiredCpuUsage < 0.6)
{
reducingFactor = reducingFactor / 3.0;
}
else if(cpuUsage / desiredCpuUsage < 0.7)
{
reducingFactor = reducingFactor / 4.0;
}
else if(cpuUsage / desiredCpuUsage < 0.75)
{
reducingFactor = reducingFactor / 5.0;
}
else if(cpuUsage / desiredCpuUsage < 0.8)
{
reducingFactor = reducingFactor / 6.0;
}
else if(cpuUsage / desiredCpuUsage < 0.85)
{
reducingFactor = reducingFactor / 7.0;
}
else if(cpuUsage / desiredCpuUsage < 0.9)
{
reducingFactor = reducingFactor / 9.0;
}
else if(cpuUsage / desiredCpuUsage < 0.95)
{
reducingFactor = reducingFactor / 12.0;
}
else
{
reducingFactor = reducingFactor / 15.0;
}
}
READ_INTERVAL-= reducingFactor;
}
cpuUsage=0;
count=0;
System.out.println("Read_interval" + READ_INTERVAL
+ "::cpu usage::%::" + cpuUsage);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
please provide the solution and any technique to increase or decrease the usage of the cpu.
thanks in advance.
I would suggest to use some Math functions in a while-loop with Thread.sleep to cap it.
I am not sure if the Dalvik VM can be forced to accept the load or if it will optimise its runtime schedule to balance the load.
I just know that a lot of sin/cos functions create a pretty stable load that, in theory, should be easy to scale up and down by simply adding more or less calculations.
I just dont know how the VM handles this on a multi-core cpu, because if it suddenly moves the load off to the other core, the load on the first core drops or worse, changes all the time.
But i think its worth a try