2014年3月30日日曜日

技術調査:システム全体のCPU使用率を取得する

System.Diagnostics.PerformanceCounter クラス を使用する。


  • PerformanceCounter コントロールの CategoryName プロパティに「Processor」を設定
  • CounterName プロパティに「% Processor Time」を設定
  • InstanceName プロパティに「_Total」を設定


NextValue メソッドを使用して CPU 使用率を取得

参考文献

パフォーマンス情報を取得する方法について ~ CPU 使用率の取得 ~
http://msdn.microsoft.com/ja-jp/library/cc720837

2014年3月29日土曜日

実験:CPU使用率の取得

CPU使用率取得のため、以下のコードを作成しました。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace cpu_ctrl
{
    public partial class MainForm : Form
    {
        private bool isLoop_cpuCtrl = true;         // CPU のコントロールループを継続するかどうか


        private int timeSpan_cpuCtrl = 100;         // CPU のコントロールループの実施間隔

        public MainForm()
        {
            InitializeComponent();
        }

        delegate void Del_setCPUUsage(float cpuUsage);

        private void backgroundWorker_CPUCtrl_DoWork(object sender, DoWorkEventArgs e)
        {
            // CPU 使用率のチェック用
            System.Diagnostics.PerformanceCounter pc_cpu = 
                new System.Diagnostics.PerformanceCounter("Processor", "% Processor Time", "_Total");

            // CPU 使用率を設定するためのデリゲート
            Del_setCPUUsage del_setCPUUsage = cpuUsage => { label_cpu.Text = cpuUsage.ToString("0.0") + " %"; };


            while (isLoop_cpuCtrl)
            {
                float cpuUsage = pc_cpu.NextValue();
                label_cpu.Invoke(del_setCPUUsage, new object[] { cpuUsage });


                System.Threading.Thread.Sleep(timeSpan_cpuCtrl);
            }
        }

        private void ToolStripMenuItem_Exit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            // CPU コントロールスレッドを起動
            backgroundWorker_CPUCtrl.RunWorkerAsync();
        }

        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            // CPU コントロールループを終了する
            isLoop_cpuCtrl = false;
        }
    }
}


また、CPU使用率計測のため、起動すると1スレッドが無限ループを実施し、CPUリソースを消費する以下のプログラムも作成しました。(process-dummy)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace process_dummy
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private bool isLoop = true;

        private void backgroundWorker_dummy_DoWork(object sender, DoWorkEventArgs e)
        {
            while (isLoop) ;
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            backgroundWorker_dummy.RunWorkerAsync();
        }

        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            isLoop = false;
        }
    }
}


この実験結果を以下の動画にまとめました。

実験:CPU使用率の取得

(細かい文字を見るには、解像度を480p以上に設定してください。)


実験に使用したPCは論理プロセッサが8個あります。
process-dummyを1個起動するごとに、PCのCPU使用率の 1/8 を消費します。

process-dummy を 8個起動することで、PCのCPU使用率が 100% になりました。


実験は成功です。


2014年3月28日金曜日

詳細仕様書(Ver1.0)

この仕様書は「CPU使用率コントローラー」Ver1.0にて実装する機能の詳細な範囲を定義する。

プログラム構成

  • cpu-ctrl.exe : メインプログラム


状態遷移と処理

メインプログラムを起動することで、メイン画面の状態遷移と操作中ウィンドウ快適化制御の状態遷移が開始される。それぞれは別スレッドとする。


メイン画面の状態遷移

メイン画面はユーザの操作により状態が遷移する。

ヘルプを表示、ご意見・ご感想・不具合表示はブラウザで目的のページを開き、すぐさま操作待機状態に戻る。
バージョン情報表示は、バージョン情報ダイアログが閉じられないと、メインウィンドウを操作できない。


操作中ウィンドウ快適化制御の状態遷移

操作中ウィンドウ快適化制御の状態遷移では、CPUの使用率制御の必要性有無により状態を遷移させる。

メインウィンドウが閉じられたことに連動して、待機状態・制御状態のいずれの状態からでも処理を終了することができるが、制御状態ではプロセスの一時停止を指示している状態であるから、終了する前にプロセスを再開することを忘れてはならない。



仕様書(Ver1.0)

この仕様書は「CPU使用率コントローラー」Ver1.0にて実装する機能の範囲を定義する。

このバージョンで実現を目指すもの

CPU使用率コントローラーの基礎的な機能のみ実装する。
従って、オプションとしてよい機能は次のVer以降に実装を検討する。


操作中ウィンドウの操作快適性の向上

現在アクティブになっているウィンドウのプロセスが限界までCPUを使用できるように、他のプロセスのCPU使用率を抑制する。(操作中ウィンドウ快適化制御)

全てのプロセスのCPU使用率の合計が100%を超えない限り、CPU使用率制御は実施しない。

本プログラムは一定間隔でコンピュータ内で実行されているプロセスの全情報を取得し、アクティブウィンドウのプロセスの特定とCPU使用率抑制制御の実施要否を判定する。

CPU使用率抑制制御の必要が生じた場合、本仕様書で定めるCPU使用率抑制制御方式に基づき、CPU使用率抑制制御を実施する。


CPU使用率抑制制御

CPU使用率抑制制御方式は、CPU使用率を抑制するプロセスに対して、一時停止と再開を短期間に繰り返す方式(プロセス一時停止/再開短期間制御方式)とする。

本バージョンにおいて、プロセス一時停止/再開短期間制御方式に使用するパラメータは全てプログラム内で決定した値とする。

CPU使用率を抑制するプロセスは、CPU使用率が一定の閾値(CPU使用率制限値)を超えたものに対して実施する。CPU使用率制限値を超えたプロセスのCPU使用率がCPU使用率制限値未満となるように制御する。CPU使用率が一定の閾値未満の場合、抑制対象外とする。


CPU使用率制限値は可変とする。

CPU使用率制限値の決定方法は次の方法とする。
1.CPU使用率抑制が開始された時点での、アクティブではないウィンドウのプロセスのCPU使用率の最大値にある減価定数をかけたものを初期値とする。
2.CPU使用率抑制制御を行った結果、システム全体のCPU使用率が100%の場合、CPU使用率制限値を減少させる。
3.CPU使用率抑制制御を行った結果、システム全体のCPU使用率が100%未満の場合、CPU使用率制限値を増加させる。


操作方法

本プログラムを起動すると、自動的に操作中ウィンドウ快適化制御が開始される。
本プログラムを起動すると、メインウィンドウが表示される。

メインウィンドウで可能な操作、表示する情報は以下の内容である。

可能な操作


  • 本プログラムを終了する。

  • ヘルプを表示する。(Bloggerで記載したヘルプ画面へ移動)
  • バージョン情報を表示する。(本ソフトウェアの開発Blogへのリンクを示し、リンクをクリックすることでブラウザを起動し、本ソフトウェアの開発Blogへ移動する。)
  • ご意見・ご感想・不具合報告。(Bloggerで記載した投稿画面へ移動)



  • ウィンドウの最小化
  • ウィンドウの最大化


表示する情報


  • プロセス一時停止/再開短期間制御を行っているかどうかを表示
  • プロセス一時停止/再開短期間制御を行っているプロセス名・id を表示
  • 全体のCPU使用率


メインウィンドウ画面構成

メインウィンドウの画面構成は、統合開発環境により作成する。

留意点


  • 他のソフトウェアの操作に邪魔にならないよう、可能な限り小さくする。
  • 画面サイズは可変とし、画面サイズを表示することで表示する情報量を調整できる。



デバッグ支援機能

ログ出力

ソフトウェア起動時のコマンドラインに以下のパラメータを指定することでログ出力を行うように指示できる。
ログは、ソフトウェアのカレントディレクトリに保存する。
ログは追記モードで書き込む。
ソフトウェア起動時にログファイルが存在した場合、ログを初期化するためにそのログファイルは削除する。

コマンドラインオプション:

-log:normal

基本的なログ出力を行う。

-log:detail

詳細なログ出力を行う。
 -log:normalの内容を完全に包括する。


ログファイル名:log.log

現在のログモードがわかるよう、メインウィンドウのタイトルにコマンドラインオプションを表示する。

障害解析支援機能

エラー発生時には、ダイアログにてユーザにエラー情報を通知する。

また、発生した障害情報をエラーログファイルに書き込む。
エラーログは、ソフトウェアのカレントディレクトリに保存する。
上書き方式で書き込む。

エラーログファイル名:err.log




技術調査:プロセスのCPU使用率を制御する

直接的にプロセスのCPU使用率の上限を設定する方法は現時点では無いはずです。
従って、Windows上のアプリケーションとしては、以下の方法でプロセスが使用するCPU使用率を制限する必要があります。

1.プロセスの一時停止/再開を繰り返し、目標とするCPU使用率の上限を超えないように制御する

2.プロセスを構成するスレッドの一時停止/再開を繰り返し、目標とするCPU使用率の上限を超えないように制御する


技術調査:プロセスのCPU使用率を制御する - プロセスの一時停止/再開を繰り返し、目標とするCPU使用率の上限を超えないように制御する

プロセスの一時停止/再開を繰り返し、目標とするCPU使用率の上限を超えないように制御する

プロセスに対して、直接的に一時停止/再開を指示するようなドキュメント化されたAPIはありません。(*1)

ただし、ドキュメント化されていないAPIである「NtSuspendProcess」および「NtResumeProcess」を使用すれば、プロセスに対する一時停止/再開ができるようです。

メリット


  • スレッドレベルで一時停止/再開を行う時のような、スレッドの一時停止/再開に起因するようなプロセスのクラッシュを防止できる。


デメリット


  • 公式にドキュメント化されていないため、将来的に仕様が変更になり、このAPIが使用できなくなる可能性がある。


この機能をC#から使用するには、APIをDLLからインポートする。


*1:
How to suspend/resume a process in Windows? - Stack Overflow
http://stackoverflow.com/questions/11010165/how-to-suspend-resume-a-process-in-windows

delphi - Suspend/resume processes as PsSuspend does - Stack Overflow
http://stackoverflow.com/questions/10153097/suspend-resume-processes-as-pssuspend-does

技術調査:プロセスのCPU使用率を制御する - プロセスを構成するスレッドの一時停止/再開を繰り返し、目標とするCPU使用率の上限を超えないように制御する

プロセスを構成するスレッドの一時停止/再開を繰り返し、目標とするCPU使用率の上限を超えないように制御する

プロセスに対して、直接的に一時停止/再開を指示するようなドキュメント化されたAPIはありません。(*1)

そこで、一時停止/再開を行いたいプロセスに属するすべてのスレッドに対して一時停止/再開を実施するという方法が考えられます。

メリット


  • スレッドの一時停止/再開は.net frameworkで実装されているので、手軽に実装できる。


デメリット


  • スレッドが停止することを予期していないプロセスの場合(ほとんどのプロセスがそうだと思います)、スレッドの停止順番などにより、プロセスがクラッシュする可能性があるとのことです。



*1:
公式に文書化されていない Windows API である「NtSuspendProcess」を使用すれば、プロセスに対する一時停止/再開ができるようです。

プロセスを一時停止/再開するプログラム
http://d.hatena.ne.jp/UseRNamE/20100109/1263033000

How to suspend/resume a process in Windows? - Stack Overflow
http://stackoverflow.com/questions/11010165/how-to-suspend-resume-a-process-in-windows

先行事例調査まとめ

先行事例調査まとめ

先行事例調査結果を表にまとめました。

先行事例事例名称Windows 標準対象方式詳細情報
1電源オプション - プロセッサの電源管理全プロセスCPU自体の動作クロックの調整などhttp://cpu-ctrl.blogspot.jp/2014/03/1.html
2Windows タスク マネージャ - プロセッサの関係任意のプロセスプロセスを実行するCPUコアの指定http://cpu-ctrl.blogspot.jp/2014/03/2-windows.html
3Windows タスク マネージャ - 優先度の設定任意のプロセスプロセスの優先度の指定http://cpu-ctrl.blogspot.jp/2014/03/3-windows.html
4フリーソフトを使用する - BES - Battle Encoder Shirase任意のプロセス(上限3プロセス)プロセスの強制スリープhttp://cpu-ctrl.blogspot.jp/2014/03/4-bes-battle-encoder-shirase.html
5フリーソフトを使用する - TopWinPrioアクティブ/非アクティブのウィンドウのプロセスプロセスの優先度の指定http://cpu-ctrl.blogspot.jp/2014/03/5-topwinprio.html
6フリーソフトを使用する - PsSuspend任意のプロセス任意のプロセスの一時停止/再開http://cpu-ctrl.blogspot.jp/2014/03/6-pssuspend.html


技術調査:プロセスを実行するプロセッサを指定する

ProcessクラスのProcess.ProcessorAffinity プロパティに使用するプロセッサのビットマスクを設定する。

参考文献

Process.ProcessorAffinity プロパティ  (System.Diagnostics)
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.processoraffinity(v=vs.110).aspx

技術調査:プロセスの実行優先度を設定/取得する

ProcessクラスのPriorityClass プロパティに優先度(ProcessPriorityClass 列挙体)を設定/取得する。

参考文献

Process.PriorityClass プロパティ  (System.Diagnostics)
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.priorityclass(v=vs.110).aspx

ProcessPriorityClass 列挙体 (System.Diagnostics)
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.processpriorityclass(v=vs.110).aspx

技術調査:実行されているプロセスの一覧を取得する

ProcessクラスのGetProcessesメソッドを呼び出すことで、ローカルコンピュータで実行されているすべてのプロセスを取得できる。

参考文献

実行されているすべてのプロセスを取得する: .NET Tips: C#, VB.NET
http://dobon.net/vb/dotnet/process/getprocesses.html

想定使用方法

想定使用方法


次のような使い方を想定しています。


1.大量のブラウザを表示しながらのブラウジングの快適度アップ!

私はよく行っているのですが、ブラウザ(Google Chrome)を20~30ウィンドウくらい開き、それぞれでタブを10~20個くらい開いていると、それぞれのブラウザが使用するCPU使用率は数%だとしても、全体としてシステムの大半のCPU使用率を占めることがあります。

この場合、優先したいのは現在操作しているブラウザのみなので、他のブラウザ(最前面のウィンドウの陰に隠れていたり、最小化してある)の処理を抑えて、最前面の現在捜査しているブラウザをスムーズに操作できるようにしたい。


2.YouTubeやニコニコ動画を再生するときに、他のプロセスの動作を抑えて、動画再生をスムーズに行う。(フレーム落ちや音飛びなどを抑止する。)

YouTubeやニコニコ動画などの動画サイトで動画を再生すると、CPUの使用率によっては、フレーム落ちや音飛びが発生してしまい、満足に動画を見ることができないこともあります。

そのため、動画再生に使用するCPU処理能力を最大化させ、他のプロセスの動作は最低限に制限したい。



2014年3月27日木曜日

開発環境

開発環境

言語:C#

開発しやすさを重視するためC#を選択する。
開発中に処理速度の問題が発生した場合には、一部をC++で開発することを検討する。

統合開発環境:Visual Studio 2010

C#での開発を効率的に行うため、Visual Studio を使用する。

ドキュメント管理:blogger

ドキュメントはbloggerで管理することで、誰でも仕様を閲覧することを可能にする。

バージョン管理:svn

管理対象は以下のものである。

  • ソースコード
  • 配布ファイル


先行事例調査(6) : フリーソフトを使用する - PsSuspend

事例: フリーソフトを使用する - PsSuspend

対象:任意のプロセス
出来ること:

任意のプロセスの一時停止/再開を行うことができる。

効果:

任意のプロセスを一時的に停止することで、優先的に処理したいプロセスを優先的に実行できる。

例)

動画処理プログラムを実行中に他の作業(Webサイトのブラウジングなど)を行った時に、動画処理プログラムを一時的に停止させ、他の作業を優先的に実施する。
(但し、安全に一時停止/再開ができるのかどうかはソフトウェアの構成や環境によると思うので、使用には注意が必要だと思われます。)

プロセスの一時停止/再開の実装方法(推測):

不明。


注意:

ここで紹介したフリーソフトウェアは私自身は動作をチェックしていないため、使用する場合には各自の自己責任にてお願いします。


参考文献

先行事例調査(5) : フリーソフトを使用する - TopWinPrio

事例: フリーソフトを使用する - TopWinPrio

対象:アクティブ/非アクティブのウィンドウのプロセス
出来ること:

アクティブ/非アクティブのウィンドウのプロセスの優先度を、自動的に事前に設定した優先度に変更してくれる。

効果:

アクティブのウィンドウのプロセスの優先度を、非アクティブのウィンドウのプロセスの優先度より上げることで、現在操作しているウィンドウの処理が、他の処理によって遅くなることを抑制できる。

例)

動画処理プログラムを実行中に他の作業(Webサイトのブラウジングなど)を行った時に、他の作業の処理速度の低下を抑える。
この時、動画処理プログラムのウィンドウは非アクティブにしておく。


プロセスの優先度設定の実装方法(推測):

定期的にウィンドウのアクティブ/非アクティブをチェックする処理が実行される。
ウィンドウがアクティブであれば、アクティブの時のプロセスの優先度を設定する。
ウィンドウが非アクティブであれば、非アクティブの時のプロセスの優先度を設定する。

プロセスの優先度は.net Framework(.net Frameworkの内部的にはWindows API)を介してプロセスに対して設定していると思われる。


注意:

ここで紹介したフリーソフトウェアは私自身は動作をチェックしていないため、使用する場合には各自の自己責任にてお願いします。


参考文献

窓の杜 - 【REVIEW】最前面ウィンドウのプロセスの優先度を自動で引き上げる「TopWinPrio」
http://www.forest.impress.co.jp/docs/review/20101129_409095.html



TopWinPrio (still the same version) |  LunaWorX.net
http://www.lunaworx.net/2010/05/19/luna/topwinprio/

2014年3月26日水曜日

動作環境

ターゲットプラットフォーム:

Windows Vista/7/8 (32/64 bit)


実現する機能

このCPU使用率コントローラーにて実現させたいことは以下の内容です。

操作中ウィンドウの操作快適性の向上


  • 複数のプロセスがCPUの使用をめぐって争っているときに、指定したプロセスへ優先的にCPU使用権を割り当てて、意図した処理の処理速度が低下しないようにする。
例:大量のブラウザを起動しているときに現在操作しているブラウザの処理が遅くならないように、バッググラウンド(非表示にしている)のブラウザのCPU使用率を抑える。

  • 現在のGUIアプリケーションの使用状況に応じて、各プロセスに割り当てるCPU使用率を自動的に制御する。(自動モード)
  • 例:フォアグラ(最前面)のウィンドウのプロセスに優先的にCPUを使用させ、陰になっているウィンドウや最小化されているプロセスのCPU使用率を抑える。

  • 現在操作されているウィンドウ(フォアグラウンド)のパフォーマンスが最大となるように、関連する他のプロセスのCPU使用率を微調整する機能。

CPU使用率の上限の手動設定

  • ユーザがCPU使用率を手動で割り当てることもできる。(手動モード)
  • 自動モードと手動モードの混在ができる。
  • マシンの合計CPU使用率が指定した値を超えないようにする。



目的

このCPU使用率コントローラーの目的を以下に示します。


  • プロセスごとにCPU使用率を制御し、パソコンを快適に利用できるようにする。

代替方法(3) : 同時に実行するプログラムを制限する

代替方法:同時に実行するプログラムを制限する

同時に実行するプログラムの数を制限し、パソコンに負荷がかからないようにします。


メリット:

  • 費用が必要ない。
  • パソコンを換えるときのような、環境を移行する手間がかからない。

デメリット:

  • 常に同時実行するプログラムの数を意識する必要があり、面倒である。

代替方法(2) : 一部のパーツを高性能なものに交換する

代替方法:一部のパーツを高性能なものに交換する

パソコンのパーツを現在使用しているものから、より高性能なパーツに交換します。


メリット:

  • パソコンを丸ごと購入するより費用が掛からない。
  • 環境を移行する手間がかからない。

デメリット:

  • お金が少しかかる。
  • パーツを交換する手間がかかる。
  • 交換できるパーツに制限がある。
特にノートPCの場合、交換できるのはメモリやHDDくらいです。(CPUの交換も不可能ではありませんが、かなりの上級者向けです。)
  • パーツによっては、現在の環境で動作するかわからない。(相性問題)

代替方法(1) : 高性能な新しいPCを購入する

代替方法:高性能な新しいPCを購入する

パソコンの処理性能が必要な処理性能より低くなったら、新しい高性能なPCを購入することを検討しましょう。

今現在使用しているPCが発売から1年程度経過していれば、現在発売されているPCは現在使用しているPCよりも高性能な可能性があります。


メリット:

  • 確実に処理性能を増やせる。
  • いろいろな小細工をする必要が無い。

デメリット:

  • お金がかかる。
  • 現在の環境を新しいPCに移行するのに手間がかかる。




先行事例調査(4) : フリーソフトを使用する - BES - Battle Encoder Shirase

事例: フリーソフトを使用する - BES - Battle Encoder Shirase

対象:任意のプロセス(上限3プロセス)
出来ること:

指定したプログラムに対してCPU使用率の上限を設定することができる。

効果:

指定したプログラムのCPU使用率に上限を設定することで、指定したプログラムがCPUを使用しすぎないようにする。

例)

動画処理プログラムのCPU使用率に上限を設定することで、動画処理中に他の作業(Webサイトのブラウジングなど)を行った時の、他の作業の処理速度の低下を抑える。


CPUの利用率設定の実装方法(推測):

指定したプロセスをスリープさせることで、指定したプロセスのCPU使用率が上昇することを抑えていると推測する。
指定したプロセスに対して、スリープの指示と解除を一定間隔で繰り返すことで、CPU使用率の上限を任意の値に設定していると推測する。

このプロセスに対してスリープを指示している期間とそうではない期間の繰り返しのことを「Sleep/Awake Cycle」と呼んでいる。
「Sleep/Awake Cycle」において、スリープの期間が長くなればなるほど、CPU使用率を抑えることができる。


「Sleep/Awake Cycle」において、スリープとそうではない期間の割合は変えずに、その時間的な長さを調整することが可能である。
以下は参考文献の2(公式WebSite)より引用したものである。

引用ここから
 Starting from version 1.5.x, you can tweak the sleep/awake cycle (frequency) of BES, in milliseconds. This may be handy for example when you want to throttle a game process while keeping the visual smooth. Try a smaller value like 40 in such a case, instead of the default value, 100. Notice, a 40-millisecond cycle means that the visual can be redrawn, in theory, 25 times a second, allowing a 25-fps movie to play without being jumpy. Do not use a too small value, though (the smaller it gets, the less accurate control you get).
引用ここまで

これより、「Sleep/Awake Cycle」の1サイクルの長さは調整可能であり、ゲームや動画再生のようなリアルタイム処理を要求されるものでは、1サイクルの長さを適切に調整することで、視覚的な滑らかさを得られる。


注意:

ここで紹介したフリーソフトウェアは私自身は動作をチェックしていないため、使用する場合には各自の自己責任にてお願いします。


参考文献

1.窓の杜 - 【NEWS】プロセスごとにCPU使用率の上限を設定できる「BES - Battle Encoder Shirase」

2.BES, Battle Encoder Shirase 1.2.2a: Controls Per-Process CPU Usage

先行事例調査(3) : Windows タスク マネージャ - 優先度の設定

事例:Windows タスク マネージャ - 優先度の設定

対象:任意のプロセス
出来ること:

Windows 標準のタスクマネージャを使用することで、任意のプロセスの優先度を設定できる。
優先度は、リアルタイム/高/通常以上/通常/通常以下/低から選択できる。

Windows のタスクマネージャにて、特定のプロセスの優先度を設定する


効果:

任意のプロセスの処理の優先度を他のプロセスより高くすることで、そのプロセスの処理を優先的に行わせることができる。

例:

  • ゲームのプロセスを他のプロセスより優先させ、ゲーム中の処理速度を最大にする。



また、任意のプロセスの処理の優先度を他のプロセスより低くすることで、そのプロセスの処理よりも他のプロセスの処理を優先することができる。

例:

  • 動画処理プロセスの優先度を下げ、動画処理中でもブラウジングなどの他の作業に与える影響を抑える。


参考文献

@IT:Windows TIPS -- TIPS:起動するプログラムの優先度を変更する方法(1)




先行事例調査(2) : Windows タスク マネージャ - プロセッサの関係

事例:Windows タスク マネージャ - プロセッサの関係

対象:任意のプロセス
出来ること:
マルチコアプロセッサ(ハイパースレッディングのような疑似マルチコアも含む)特定のプロセスを実行するCPUを任意に割り付けることができる。

Windows タスク マネージャ - プロセッサの関係 にて、プロセスを実行するCPUを選択する


効果:
特定のプロセスを任意のCPUで実行することにより、CPU全ての使用率を抑えたい場合に使用できる。(例:特定のプロセスがマルチスレッドでCPUを限界まで消費している場合に、実行するCPUを一つに抑えることで、システム全体のCPU使用率を抑える。)

参考文献

Windowsスマートチューニング (89) Win 7編: コンテキストメニューから使用CPUを選択、円滑な実行環境を構築する


先行事例調査(1) : 電源オプション - プロセッサの電源管理

事例:電源オプション - プロセッサの電源管理

対象:全プロセス
出来ること:
Windows標準の機能として、電源オプションのプロセッサの電源管理で「最大のプロセッサの状態」として、パーセンテージでプロセッサの状態を設定できる。

電源オプション - プロセッサの電源管理 画面における最大のプロセッサ状態の指定

効果:
プロセッサの状態に設定したパーセンテージによって、CPUの動作クロックなどをWindowsが適切に制御するため、パーセンテージを100%より低く設定すれば高負荷時でもCPUの消費電力を抑えることができる。

参考文献

Windows7の「プロセッサの電源管理」に意味は有るか? - BTOパソコン.jp

電源オプションのプロセッサの電源管理について - マイクロソフト コミュニティ

Windows の電源管理を一段階深く知りたい方へ ~ Windows 7 と Windows Server 2008 R2 のホワイトペーパー ~ - 高添はここにいます - Site Home - TechNet Blogs


2014年3月15日土曜日

CPU使用率コントローラー<<制作開始宣言>>

作業用PCで複数の作業を並行して行っていると、CPU使用率が高止まりしてイライラした経験はありませんか?

私は現在進行形でこの問題に悩まされています。
一台のパソコンで複数のブラウザを立ち上げ、たくさんのタブを開いてウェブページを閲覧するだけでも、ガンガンCPU使用率が上がっていきます。

そこで、プロセスごとのCPU使用率を管理するソフトウェアを作りたいと思います!
このブログでその制作過程や成果物を公開していく予定です!



関連記事
同じラベルをすべて含む記事を読み込み中...