• [rcssserver] char* を std::string に交換. (akiyama) 19:11:38

charのポインタ,特にオブジェクトの名前文字列の管理がぐちゃぐちゃだった. Playerではnew で確保した配列を解放してなかったり,他のObjectではリテラル文字列を代入して使っていたりと,一貫性が無い. これは,何時か必ず動かなくなると思われるので,全てstd::stringに置き換えた. 関連して,VisualSenderやLandmarkLeaderなども全て修正.

残る主要なメモリリークは,フラッグとゴールのオブジェクト. これらも,newしてるのに全くdeleteしていない.

  • [rcssserver] プロファイル (akiyama) 20:14:52

バージョン10以降のサーバがどうも重たいので,プロファイラを使ってみた.

以下,上位の方.

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
 27.97      0.33     0.33                             rcss::AudioSenderPlayerv8::Unfocused::getMsg
 (std::multimap<Player const*, char*, std::less<Player const*>, std::allocator<std::pair<Player
 const* const, char*> > >&)
 11.02      0.46     0.13                             long boost::uniform_int<long>::operator()
 <boost::random::detail::pass_through_engine<boost::random::detail::pass_through_engine
 <rcss::random::DefaultRNG&> > >(boost::random::detail::pass_through_engine
 <boost::random::detail::pass_through_engine<rcss::random::DefaultRNG&> >&)
 7.63      0.55     0.09                             rcss::AudioSenderPlayerv8::nonSelfPlayerPredicate
 (Player const&) const
 7.63      0.64     0.09                             rcss::VisualSenderPlayerV1::calcUnQuantDist
(PObject const&) const
 6.78      0.72     0.08                             rcss::VisualSenderPlayerV1::sendFlags()
 5.93      0.79     0.07                             rcss::VisualSenderPlayerV1::calcRadDir(PObject const&)
 5.93      0.86     0.07                             rcss::VisualSenderPlayerV1::sendHighFlag(PObject const&)
 3.39      0.90     0.04                             rcss::AudioSenderPlayerv8::sendCachedNonSelfPlayerAudio
(Player const&, char const*)
 2.54      0.93     0.03                             rcss::VisualSenderPlayerV1::sendPlayers()
 2.54      0.96     0.03                             rcss::VisualSenderPlayerV1::sendHighPlayer(Player const&)
 2.54      0.99     0.03                             rcss::net::SocketStreamBuf::writeData()
 1.69      1.01     0.02   516171     0.00     0.00  rcss::Listener::sendPlayerAudio(Player const&, char const*)
 1.69      1.03     0.02        1    20.00    20.00  boost::random::mersenne_twister<unsigned int, 32, 624,
 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>::twist(int)
 1.69      1.05     0.02                             rcss::VisualSenderPlayerV1::calcVel(PVector const&,
 PVector const&, double const&, double const&, double&, double&) const
 1.69      1.07     0.02                             rcss::SerializerPlayerStdv1::serializeVisualObject
 (std::ostream&, std::string const&, double, int, double, double, int, int, bool) const
granularity: each sample hit covers 4 byte(s) for 0.85% of 1.18 seconds

index % time    self  children    called     name
                                                 <spontaneous>
[1]     28.0    0.33    0.00                 rcss::AudioSenderPlayerv8::Unfocused::getMsg(std::multimap
<Player const*, char*, std::less<Player const*>, std::allocator<std::pair<Player const* const, char*> > >&) [1]
-----------------------------------------------
                                                 <spontaneous>
[2]     11.0    0.13    0.00                 long boost::uniform_int<long>::operator()
<boost::random::detail::pass_through_engine<boost::random::detail::pass_through_engine
<rcss::random::DefaultRNG&> > >(boost::random::detail::pass_through_engine
<boost::random::detail::pass_through_engine<rcss::random::DefaultRNG&> >&) [2]
-----------------------------------------------
                                                 <spontaneous>
[3]      7.6    0.09    0.00                 rcss::AudioSenderPlayerv8::nonSelfPlayerPredicate
(Player const&) const [3]
-----------------------------------------------
                                                 <spontaneous>
[4]      7.6    0.09    0.00                 rcss::VisualSenderPlayerV1::calcUnQuantDist(PObject const&) const [4]
-----------------------------------------------
                                                 <spontaneous>
[5]      6.8    0.08    0.00                 rcss::VisualSenderPlayerV1::sendFlags() [5]
-----------------------------------------------
                                                 <spontaneous>
[6]      5.9    0.07    0.00                 rcss::VisualSenderPlayerV1::calcRadDir(PObject const&) [6]
-----------------------------------------------

VisualSender関連が重そうなのは予想していたけど,AudioSenderが一番重たいのか. 具体的にどこがボトルネックになっているのか調べてみよう.

VisualSenderも何とかしたい. やたら細かく関数に分割されてるのが重たい原因なのは分かってるんだけど,今の設計のままではインライン化出来ないので改善のしようが無い. 何か良い方法は無いものだろうか.


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