全体でどのくらいの負荷がかかっているのか気になったのでどんな手段があるのか検索してみました。
Linuxでシェルレベルの時間計測は3つの方法がありそうです。
- timeコマンドを利用する
- dateコマンドを利用する
- bashで利用可能なSECONDS変数を利用する
timeコマンドは秒単位ですが小数点を表示しているのでミリ秒程度の精度はあるようです。dateコマンドとSECONDS変数は秒単位となります。
コマンドレベルで利用するのに便利なのはtimeで、シェルスクリプトで利用するなら表示形態によってdateコマンドかSECONDS変数を利用するか変わるのではないでしょうか。
試しに実行してみました
pi@rasp4b4g:~/gpioread $ time ./dht2 -h
未知のオプションが指定されました。
dht ver.0.1 debugコードコミコミ版
指定可能なオプション
--debug : デバッグ情報の表示
--gpio n : GPIOピン番号(デフォルトはGPIO5番).
--type x : DHT11かDHT22を指定する。(デフォルトはDHT11)大文字、小文字の判別はしない。
指定された型の手順でセンサーから読込み、湿度、温度を出力するが、
読込んだデータをもとに判定しできる限り出力する。
ただし、その時のリターンコードはエラーとなる。
--oneread : 無指定時はセンサーから2回読込み、2回目に取得した値を出力する。
このオプションが指定されるとセンサーからの読込を1回だけに限定する。
センサーがスリープしていた場合はスリープ前の値が出力される。
real 0m0.010s
user 0m0.000s
sys 0m0.011s
最初からなんか数字がおかしい感じなので調べてみると
real > user + sys
という関係になると思いますが、0.001sずれている結果に。
気を取り直して、同じような状態になるようにオプションをつけてcで作成したものとpythonとで比較したいと思います。
pi@rasp4b4g:~/gpioread $ time ./dht2 --oneread
temperature : 35.6
humidity : 60.0
real 0m0.044s
user 0m0.001s
sys 0m0.043s
pi@rasp4b4g:~/gpioread $ time python3 ./dht.py --onetime --nodirect
DHT results.
Conversion : DHT11V1.3
Temperature : 35.5 C
Humidity : 60.0 %
real 0m0.257s
user 0m0.136s
sys 0m0.052s
実行時間で比較すると0.2s程度python側の方が時間がかかっているようです。実行時間が長いpythonでは確実に割り込みによって実行時間が伸びている感じがします。
この差の大小を考えるには運用方法とそれぞれの利点と欠点を比較する必要がありますね。
個人レベルとしては、
- ソースファイルと実行ファイルが分かれていないので、管理コストがかなり低い。
- ほとんどのことがpythonだけで完結する。
- ライブラリなども動的にリンクさせて実行できる。
といったpythonの利点がかなり有利なのでpython以外の選択肢はない気がしていますが、それでも常駐させるような形のものをpythonで書くのはどうかという部分も引っかかっています。
この数字はその時の判断材料となりそうです。
c側のコマンドがサンプリングバッファを利用しない形に対応していないので --nodirectとして実行していますが、先日書き換えた結果どのくらい効果があったのか見てみたいと思います。
pi@rasp4b4g:~/gpioread $ time python3 ./dht.py --onetime
DHT results.
Conversion : DHT11V1.3
Temperature : 35.6 C
Humidity : 60.0 %
real 0m0.246s
user 0m0.134s
sys 0m0.042s
時間にして0.257s - 0.246s = 0.011s まぁこんなものでしょうwメモリー操作なら数メガ単位の操作にならなければ、個人レベルのデータ量であればそこまで気にする必要はなさそうです。
0 件のコメント:
コメントを投稿