raspimouse2 icon indicating copy to clipboard operation
raspimouse2 copied to clipboard

DRAM1GB以下のラズパイでのビルドが困難

Open ryuichiueda opened this issue 3 years ago • 6 comments

不具合の概要

colcon build --symlink-installすると、gccが675MBのメモリを消費してしまい、スワップのデーモンが作動して処理が進まなくなる。

実行環境

  • Rasberry Pi 3B+
  • Ubuntu 22.04 LTS

再現方法

$ colcon build --symlink-install
(別のモニタでtopを実行)

対処方法

何らかの方法でgccがメモリを浪費しないようにする。(makeのオプションでなんとかなるのがベスト)

その他

まだ教材で古いラズパイを使っているところがあるので、ぜひご検討ください。(無理でしたら自身で簡略版を作ります。)

ryuichiueda avatar Oct 13 '22 08:10 ryuichiueda

ご報告ありがとうございます。

環境変数MAKEFLAGS=-j1 を設定してビルドが通るか確認お願いします。

$ MAKEFLAGS=-j1 colcon build --symlink-install

関連issue: https://github.com/rt-net/raspimouse_ros2_examples/issues/23#issuecomment-820096612

ShotaAk avatar Oct 13 '22 08:10 ShotaAk

既出とのことで、失礼いたしました。

月曜まで試せないのですが、たぶん-j1が使えるなら大丈夫かもしれません。(ただ、メモリを使い切った時にg++のプロセスがひとつしか立ち上がっていなかったので、まだ多少の懸念があります。)

今のREADMEだとラズパイ3以前ではビルドできないので、あとでREADMEにプルリクを出します。

ryuichiueda avatar Oct 13 '22 10:10 ryuichiueda

お手数をおかけします。 READMEへの記載ができていなかったので、プルリク助かります。ありがとうございます。

ShotaAk avatar Oct 13 '22 11:10 ShotaAk

(ただ、メモリを使い切った時にg++のプロセスがひとつしか立ち上がっていなかったので、まだ多少の懸念があります。)

これ的中しました。ダメでした。コードをみてもメモリを大量に使いそうなところはなく、ということはcolconがメモリ使いすぎてるような気がするので、ちょっと調べてみます。

ryuichiueda avatar Oct 19 '22 05:10 ryuichiueda

いや、CMakeLists.txtを見たのですが、1ノードでライブラリをたくさん使っているので、メモリはやっぱりたくさん使いますねこれ。ラズパイ3を切り捨てるか、ノードを分けるかですね・・・

ryuichiueda avatar Oct 19 '22 05:10 ryuichiueda

調査ありがとうございます。

RasPi 3B で MAKEFLAGS="-j1 -l1" colcon build --symlink-install --executor sequential を実行しましたが、 raspimouseのビルドが25%に達したところでフリーズしました。

オプションの参考:https://answers.ros.org/question/304300/compilling-ros2-on-rasperry-pi/?answer=304668#post-id-304668

解決策として以下を提案します。

  • バイナリパッケージを使用する(ただしHumbleでは未リリースです)
  • パッケージ構成を変更する
  • ビルド&強制終了を繰り返す
  • 一時的にSAWP領域を拡張する

パッケージリリースと、パッケージ構成変更については、すぐに対応できないので、 SWAP領域の拡張を推奨します。

https://noknow.info/it/os/scale_up_swap_area_temporarily?lang=ja を参考に2 GBのSWAP領域を確保した後、文頭のビルドコマンドを実行した場合、約4分でビルドが完了しました。

実際は0.1GB程度しか使用されていなかったので、0.5 GBくらいの領域があれば十分だと思います。

ShotaAk avatar Oct 28 '22 05:10 ShotaAk