こんにちは。
VC++6.0でサーバ(W2K3)の高負荷時の評価の為にサーバのCPU使用率を100%にするアプリを
作成したいと思っています。
コンソールアプリでもWindowsアプリでもかまわないのですがどのようなロジックのアプ
リを作成すればよいのでしょうか?
main()
{
while(1){
printf(aaaa\n);
}
}
このようなものを作ってみましたが100%になりませんでした。
CPU使用率100%でなくてもかまいません。なるべくサーバに負荷がかかるようなアプリを
作成したいのです。
御存知の方がいらっしゃいましたらアドバイスをお願いします。
int main( void )
{
int a, b = 0;
for ( ; ; ){
a = b++;
}
return( 0 );
}
でどうでしょうか?
printf 関数を使わなければ良いと思います。
とりあえず、最適化はOFFにしましょうね。
printf等を使うと、IO関連でスレッド切り替えが入ったりするかも知れませんの
で、描画などIOを触らないでループさせたほうがCPUの負荷は大きいと思いま
す。
ただ、ハイパースレッディングだったかで擬似マルチコアになったり、CPUを複数積
んでいると、複数のスレッドで負荷をかけないと他のCPUが留守になったりしま
す。
ボルトネックになる部分は、CPU、キャッシュ、ページフォルト、ディクスIO、ネット
ワークIOなど色々有ります。
その辺ふくめてどんな負荷を掛けたいのか整理してから考えては如何でしょうか。
とりあえず、「メモリを大量に確保して乱数で埋めてから開放を繰り返すスレッ
ド」「浮動少数演算を繰り返すスレッド」「整数演算を繰り返すスレッド」のをそれ
ぞれ仮想CPUと同数だけ無限ループさせればCPU回りのリソースは食いつぶせ
ると思います。
オレンジフィッシュさん,ぬさん
情報ありがとうございます。
明日以降に会社で試してみます。
本日、会社にてオレンジフィッシュさんに提示していただいたロジックを使用し、CPUが
100%になりました。
本当にオレンジフィッシュさん、ぬさん。ありがとうございました。
CPU だけの負荷を 100% にしてもそれだけでは「サーバの負荷試験」にはならん。
ぬ氏もそういっているよね。
CPU 以外にもディスクやネットワークやメモリやリソース量や...
どんな負荷をどうかけたら試験になるのかを、もっとじっくり考察して
慎重にいろいろ試さないと無駄な実験にしかならんと思うぞ。
見かけ上だけ100%になってればいいのかな?
優先度次第ではなんらテスト対象のプロセスの邪魔になってない可能性もあるけど
サーバPCのCPU使用率が100%になったところで接続試験とか
そういうことをしたいんだと解釈しましたが…
少なくともこんなやり方で得た試験結果は評価に値するものではありません。
サーバの負荷試験としてこんなソフトも存在するぐらいです。
http://www.nihon-cornet.co.jp/product/webperformance.html
あまり軽く考えないほうがいいと思います。