• [rcssserver] パフォーマンス改善 (akiyama) 18:06:38

seeメッセージの生成がボトルネックになっているのは分かっているものの,どうにもならないと思っていたが.下羅さんと相談していて,どうやらストリームの実装が怪しいと言うことがようやく判明.

これまで,rcssserverではzlibによる圧縮通信をサポートするために,独自開発のgzostreamを使ったフィルターが行われていたが,元々SocketStreamBufも使用しているために,圧縮通信を行うか否かに関わらず,処理としては二重にストリームへの出力を行っている状態になっていたことが分かった.

そこで,圧縮通信がオフの場合にはSocketStreamBufを使い,オンの場合にのみgzstreambufをかぶせるという実装に修正したところ,劇的にパフォーマンスが改善された. 手元のマシンでCPU使用率が8〜10%だったのが,4〜6%にまで減った.倍近く早くなったことを単純に考えれば,ストリーム出力がほぼすべてのCPUを使っているということになる. これは凄いな.g++のstreamはこんなに重かったのか.

SocketStreamBufを改良することが出来れば更に早くなるはずだが,C++のstreamの仕様上,これはちょっと難しそうな感じ.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-14 (月) 14:51:37 (2024d)
SourceForge.JP
Creative Commons License
RoboCup tools by Hidehisa Akiyama is licensed under a Creative Commons 表示-非営利 2.1 日本 License.