1

私のアプリケーションでは、アプリケーションの CPU 使用率をユーザーの希望する値まで増やし、ユーザーが関心を持つまで安定させたいと考えています。
top コマンドを使用して次の方法で合計 CPU 使用率を計算しています。

サンプルコード:

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();
                }  
           }
     }



CPUの使用量を増減するための解決策とテクニックを提供してください。前もって感謝します。

4

1 に答える 1

0

Thread.sleep を使用して while ループでいくつかの数学関数を使用して、それを制限することをお勧めします。

Dalvik VM が負荷を受け入れるように強制できるのか、それともランタイム スケジュールを最適化して負荷を分散させるのかはわかりません。

私は、多くの sin/cos 関数がかなり安定した負荷を作成することを知っています。理論的には、計算を増減するだけで簡単にスケールアップおよびスケールダウンできるはずです。

VM がマルチコア CPU でこれをどのように処理するかはわかりません。負荷が突然他のコアに移動すると、最初のコアの負荷が低下するか、さらに悪いことに、常に変化するためです。

でも試してみる価値はあると思います

于 2012-10-22T07:54:31.320 に答える