WebServerの処理負荷について

最終更新日 2021年2月3日

STM32miniShieldを利用したオブジェクトにWebServerの機能を使っています。プログラムパラメータとして、固定IP値だとか幾つかのパラメータをEEPROMに書き込んでおり、これらの変更をWebServerから確認・変更出来るようにしています。多くのデバイスが緒設定をブラウザで実現するのが一般的なのでそれに準じています。

STM32miniでWebServerを起動して感じたのですが、Connectしてステータスを受信すると、その処理のために相当の時間が掛かります。
プログラム内にWDT(ワッチドックタイマ)を5秒で設定していたところ、再起動が掛かりdisconnectになってしまいました。WDT時間設定を8秒に延ばす解決したことから、表示内容によって相当の時間が掛かることが判ってきました。

ArduinoUNO(AVR328P)では同じNICを接続してWebServerを構築すると、実行メモリが殆ど無く処理出来ません。UNOでは本当に限られた単純なコードに押さえないとダメのようです。Mega2560に変更するとRAMサイズが8KBまで拡張出来るので実行時のメモリ余裕は出てきますが、WebPageの構築の仕方によってはメモリが足りなくなるようです。
30Byte程度の細かなセンテンスに分けて書き込めばいいのでしょうが、String型に詰め込んで書き込もうとするとOutOfMemoryになってしまいます。
FlashのサイズもUNOは32kBでスケッチ内にWebPageのコードを置くとそもそもバイナリコードを書き込むことすら出来ないかもしれません

STM32miniは20kBのSRAMが搭載されていますが、決して余裕があるわけではありません。実行時に大きなメモリを確保すれば実行時間が短縮できるようなケースでも、実行時エラーが発生する可能性を避けるためにも、一時的に大きなメモリを確保することは避けたいです。その意味で文字列長が1KBを超えるような処理を一度にする事は避けるべきだと思っています。そのためWebPageのコードを書く際もString型で一気に書き込む様なことは避けるべきだと云う事になります。

その点、ESP32はその点メモリサイズが520kBも有るのでWebPageを書くときも1頁まるごとString型に纏めて処理したりします。このためもありHTTPの応答が早いと感じます。

実行時のメモリ不足エラーはメモリアロケートを実行したときにエラーがでて気付くのでしょうが、エラーが返ってもその処理を適切に処理しているケースは希です。スケッチ内でメモリアロケートを意図的に実行しているケースは少ないと思います。ライブラリ内では当然のように処理しているのでしょうが、そのときメモリ確保に失敗したときの扱いに関してはとても不透明で、デッドロックしているケースが多いように思います。だからこそWDTの設定は必要なのですが、エラー原因の回避に必要な情報は残りません。

他にクライアントの動向も気にする必要もありそうです。同時アクセスに耐えうるのか?とか検討する必要もありそうです。
『WebServer 負荷』でググると、大規模なWebSerberの負荷処理に対する検討だったりして、マイコンベースのWebServer機能に言及しいてる方はなかなか見つからないようです。
PCサーバとしてはApacheが昔から使われていますが、Embeddedモデルとしては使えません。
最近Real Time Logic社がBarracuda App Serverなるものをリリースし、SDKも提供していることを知りました。ただ、WebPageを見る限りPCベースのようでマイコンベースのモノとは主旨が異なるようです。
共和電子社が『IOT-GP Server』なるモノをリリースしていました。HTTPに対応しています。カタログを落としてみましたが、やっぱりPCベースのモノのようです。

ラズベリーパイ程度の規模がIoTゲートウエイとして成り立つのかと思います。ラズベリーパイ上でApacheも動く様です。ラズベリーパイなら相当のメモリが搭載できるのでWebServerの処理負荷も気にならないと思われます。
IoTゲートウエイとして成立させるにはNICが2基必要ですね。そんなモデルを構築した先人もいます。
マイコンベースでは最低限の機能をもっと軽いプロトコルで実現し、IoTゲートウエイと接続出来れば処理負荷なんて気にならなくなるのか、と考え方を変えました。


戯言(nonsense)に戻る


問い合わせ頁の表示


免責事項

本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。

本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。

商標・登録商標

Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。