<?xml version="1.0" encoding="utf-8" ?>

<?xml-stylesheet type="text/xsl" href="../test.xsl"?>


<article format="2002.0312">

<article_head>
	<article_id>d40617</article_id>
	<article_date><year>2004</year><month>06</month><day>17</day></article_date>
	<article_addr><sect>9</sect><subsect>08</subsect></article_addr>
	<article_subj>CPUの過熱を防ぐ能動型ソフトCPUクーラー</article_subj>
</article_head>

<article_body>


<p>
任意のプロセスを、一定の時間割合でサスペンド／レジュームさせることで、
CPU負荷率を強制的に下げる。
</p>


<h4>
テスト版メモ
</h4>

<p>
2004年11月27日 <strong>BES 0.8.7</strong>: Windows 2000 だと、Unicode版は、
一部のメッセージなどが文字化け（というか文字なし→□□□）になります。
機能上は問題ないですが、ANSI版ならたぶん大丈夫かと。0.8.8で直します～
</p>


<p>
2004年11月16日 <strong>BES - Battle Encoder Shirase 0.8.7</strong>
</p>

<p>
<a href="http://m17n.cool.ne.jp/freeware/bes_0_8_7.zip">http://m17n.cool.ne.jp/freeware/bes_0_8_7.zip</a>
</p>

<p>
ちょっといじったので、おかしなところができたかも。
</p>

<p>
タイムスライスのコントロール率（スライダー）の設定が終了時に保存され、次回に引き継がれるようにした。
</p>

<p>
アクセス権の関係でスレッドのオープンに繰り返し失敗するケースでは、適当にあきらめて停止するようにした。
</p>

<p>
これまでボタンがディスエイブルになってた IFF関係 をとりあえず実装した。リストのダイアログで項目を選択して [Friend] を指定すると、
そのプロセスは以降「CPUを過熱させることはない」とみなされ、ターゲット選択リストから省略される。
[Enemy] を指定すると、そのプロセスはCPUを過熱させるCPUにとっての敵性プロセスと認識され、
ターゲット選択リストの先頭に来るようになる。
どちらの指定もされていないプロセスは中立的に扱われる。
これらは一度指定すると次回起動時にも引き継がれる。
制御対象と関係ないプロセスを一度 [Friend] 登録しておけば、もうリストに出てこないので、すっきりする。
[Reset IFF] を選択すると、上記のすべての設定はクリアされる。ただし、
VD, VDM, AviUtl, ERMP の4つはデフォルトで ENEMY とされ、それは解除できない。
</p>


<p>
2004年11月15日 BES - Battle Encoder Shirase 0.8.6
</p>

<p>
<a href="/flower/BES/bes_0_8_6.zip">bes_0_8_6.zip</a>
</p>

<p>
OpenThreadが失敗したとき「Couldn't Open Thread(s)」と表示して処理を中止していたのを改め、
全スレッドのオープンに失敗しない限り、再スナップ、再試行を行うようにした。
これでスレッドの変化が激しいプロセスでも、一応追尾できるようになった。
他方、セキュリティ等の理由によりオープンできないスレッドが対象プロセスに含まれていると、
延々と再スナップを繰り返してしまう（既知の問題）。
</p>
<p>
前触れなく生成される高負荷スレッドへの対応を早くするため、自動再スナップの間隔を、
従来の約40秒から約10秒にした。高負荷スレッドが急に増えた場合でも、約10秒以内に過熱抑止対応ができる。
ターゲット内のスレッドが減った場合、サスペンドまたはレジュームがフェイルするので0.1秒オーダーで検出され即座に再スナップで自動追尾するが、
スレッドが増えた場合、増えたことをアクティブに検出する方法を思いつけない。
定期的に再スナップで確認するしかない。
</p>

<p>
自らをリアルタイムのプライオリティにする一方、
処理中にはターゲットのプロセスのプライオリティをアイドルに落とすようにした（処理停止で元に戻す）。
言うほどの実効性はないが、制御側と制御される側の優先順位を明確にすることで、安定性が増すことが期待される。
</p>


<p>
2004年11月11日 BES - Battle Encoder Shirase 0.8.5
</p>

<p>
最大3プロセスを独立して制御できるようにした。
</p>

<p>
<a href="/flower/BES/bes_0_8_5.zip">bes_0_8_5.zip</a>
</p>

<p>
2004年11月10日 BES - Battle Encoder Shirase 0.8.4
</p>

<p>
<a href="/flower/BES/bes_0_8_4.zip">bes_0_8_4.zip</a>
</p>

<p>
タイムスライス・コントロールにターゲット情報が表示されていなかったバグを修正。
ステータス表示を簡略にした。
複数のプロセスを制御する準備をした。
他、細かい修正。
</p>

<p>
2004年11月8日
<strong>BES - Battle Encoder Shirase  0.8.3</strong> for Windows 2000/XP (and me?)<br />
<a href="/flower/BES/bes_0_8_3.zip">bes_0_8_3.zip</a>
</p>
<p>
潜在的にクラッシュの原因になるバグを直した。
</p>


<p>
2004年11月8日
<strong>BES - Battle Encoder Shirase  0.8.2</strong> for Windows 2000/XP (and me?)<br />
BES_0_8_2.zip
</p>

<p>
「実行ファイルのPath」でターゲットを識別すると、
同じプログラムのインスタンスが複数あるときにあいまいになるので、
プロセスIDで識別するようにしました。
他にも不完全な点が多いですが、とりあえず気になる場所を直しました。
</p>


<p>
2004年11月8日
<strong>BES - Battle Encoder Shirase  0.8.1</strong> for Windows 2000/XP (and me?)<br />
BES_0_8_1.zip
</p>

<p>
CPUの過熱を防ぐソフトCPUクーラーです。
指定プロセスの全スレッドに対して、OSからの、タイムスライスのスケジューリングを強制的に変更します。
</p>

<p>
通常のソフトCPUクーラーは、CPUがアイドルのときにCPUを休ませる「パッシブ」クーラーですが、
BESは、CPUが忙しいにもかかわらず「ちょっと休め」と積極的な介入を行う「アクティブ」CPUクーラーです。
基本的には無害ですが、当然、該当プロセスの処理速度は低下します。
</p>

<p>
<strong>更新履歴</strong>
<a href="/flower/BES/BES_0_8.zip">v0.8</a>で完全Unicode対応したら、Windows me で動作できなくなったため
（掲示板での報告 #1838）、
Unicode版と、非Unicode版の両方をビルドしてみました。
他にもやること多いですが、まずはそれを直しました。
0.8を起動できなかった me ユーザは、
0.8.1 の Release 版なら起動できる可能性があります（手元に me ないので動作確認できてません）。
Release 版は、メッセージが日本語で出せません。
Windows 2000/XP以降では、Release Unicode 版を使えば、一部のメッセージが日本語化されます。
このユーティリティについての詳細は、<a href="http://www.faireal.net/articles/9/08/#d40617">d40617</a>
</p>

<p>
Unicode、非Unicodeの切り替えに微妙な部分があるため、
文字化けするかもしれません。フィードバックは掲示板までお願いします。
</p>



<p>
2004年11月5日 <strong>BES: Battle Encoder Shirase 0.8 (beta)</strong>: バッチ処理で捕捉できなくなる問題に対応
</p>

<p>
<a href="/flower/BES/BES_0_8.zip">http://park14.wakwak.com/~flower/BES/BES_0_8.zip</a>
</p>

<p>
BESは、CPU負荷が高いプロセスから強制的に一定割合のタイムスライスを横取りし、
処理速度を遅くする代わりに、CPUの過熱を防ぐソフトCPUクーラーです。
どのプロセスを「ハッキング」するのか、またどの程度の割合のタイムスライスを横取りするのかは、設定でき、
任意のタイミングで開始、終了できます。横取り率はリアルタイムで随時変更可能。
負荷の高い動画エンコードで使うことを念頭に置いていますが、他の応用も可能です。
</p>



<p>
従来の<a href="/flower/BES/BES-0.73.zip">v0.73</a>は安定して動作しますが、
複数の動画を連続してバッチ処理するとき、バッチ処理の変わり目で「CPUの負荷を減らす」効き目がなくなってしまう問題がありました。
正確には、バッチ処理でなくても、プロセスの中でスレッドの環境が変化すると、効果が下がっていました。
掲示板でも改善要望いただき、手元でも不便に思っていました。
</p>


<p>
今回のバージョンアップでは、多くの改善、機能追加が行われていますが、大幅に変えたのでいろいろと細かい不具合もあります。
自分で使う用の動けばいい的な0.73より、まじめにやっていますが、
このプログラムが正統的でない「奇手」「ハッキング」であることには変わりありません。
</p>


<p>
<strong>更新内容</strong>
</p>

<p>
「自動追尾」ターゲットのプロセスのスレッドの数やIDが変化しても、すべて追いかけて、ハッキングを続ける。
具体的に、スレッドが消えて「逃げられた」場合、プロセスのスナップを撮り直して再度ロックオンする。
また、スレッドが消えない場合でも、知らないうちに増えている場合もありうることから、
一定時間ごとに自動的にスナップを撮り直す。
</p>

<p>
Windowを持たないツールもハッキング対象にできる。
flac.exe のようなコマンドラインツールのスレッドにも干渉できるようになりました。
</p>

<p>
ユニコード対応: メッセージが日本語で出せるようになった。日本語、韓国語、中国語など、あらゆるファイル名を処理できる。
Windows 98では無理だが、もともと98には対応していない。
2000/XPでは基本的に動く。MEで動くかは分からない。Windows 2000では Arial Unicode MS が存在しないと、ユニコード文字は表示できない場合がある。
</p>

<p>
タイムスライス制御の向上。0%から99%まで1%刻みで「横取り率」を設定できる。
設定変更はスライドバーを動かすとすぐその場で反映される。
</p>



<p>
同時に複数のプロセスに干渉したい、との要望もあったので、横取り率設定ダイアログはスライダーが3つあって、3種類設定できるかっこうになってます。
これはまだ実装されてません。
</p>

<p>
コマンドライン。<br />
<kbd>"BES.exe" "C:\path\AviUtl.exe"</kbd><br />
のようにすると（引用符は必須）引数のプロセスをターゲットとして起動する。
温度上昇をトリガーとしてコマンドラインを起動できる他のソフトと連携して使う用。
</p>

<p>
既知の問題。たくさんある。設定が保存されず、常に初期状態は横取り率33%とか。
</p>

<p>
<strong>注意</strong>
</p>

<p>
繰り返しになりますが、不安定なベータ版なので、注意。
フィードバックは掲示板までお願いします。
</p>





<h4>
付記
</h4>
<p>
このソフトは「<a href="/articles/9/08/#d40616">BEY バトル・エンコーダ・ユキカゼ</a>」というネタを書いた次の日に、ネタでおもしろがって作ってみたものです。
</p>

</article_body>
</article>

