chihiro
2014年9月3日 9時37分
いつもお世話になっております。
外山と申します。
Armadillo-810 はコアクロック 792 MHz との事ですが
この周波数を確認するためのコマンドはありますでしょうか?
cat /proc/cpuinfo
すると
BogoMIPS : 1576.53
を得られたのですが、
http://ja.wikipedia.org/wiki/BogoMips
より x0.5 して 788 MHz と解釈して良いでしょうか?
また、現在開発中のプログラムにて再現性が無いのですが
ある時に、処理速度が遅くなってしまう状況が発生しています。
gettimeofday を使って処理速度を調べているのですが
100 ms ぐらいで終わるべき処理が、ある時に
130 ms ぐらい、と遅くなってしまいます。
長時間 CPU を動かしている事により温度などによって
CPU の周波数が変化する、と言う事はありえますでしょうか?
以上、よろしくお願いします。
コメント
chihiro
at_yashi 様
いつもお世話になっております。
返信して頂いてありがとうございました。
CPU クロックを確認するコマンドが無い事と
bogomips が参考にならない件、了解しました。
> どのような処理で、30msの誤差が出ているか教えてもらえますか?
OpenCV と Armadillo-810 のカメラを使った画像処理の一部です。
組んでいる最中のプログラムは
処理結果を標準出力に文字列を出力しているのですが、
「カーネルや他のアプリがCPUを使っている」事を確認するために
cat /proc/stat
top -n 1
などを system("cat /proc/stat"); などのようにして所々で
確認しようと思っています。
ついでにメモリの使用状況も把握したいので
cat /proc/meminfo
も実行し、プログラムが終了した後でログを見て CPU やメモリの
使用状況と、遅延が発生する原因がわかれば、と思っています。
他に適切な方法があるようでしたらお教え下さい。
以上、よろしくお願いします。
kensaku
kensakuと申します。
カメラ関係という事で気になった点がありますので横から失礼します。
計測時間にカメラ画像の取得時間を含めている事が前提のお話になりますが、
30ms遅延という事であれば、カメラフレーム待機待ちの可能性が考えられます。
カメラの画像取得のAPIをOpenCVを使われているならば、
cvQueryFrame()
の前後にgettimeofday等で時間を計測されると良いかもしれません。
(V4L2で直接取得されているのであれば画像準備待ちするselect()メソッドになります)
このメソッド間で時間がばらつくようであればフレーム待機待ちによる遅延が濃厚です。
上記でばらつかなければ、他タスク処理による要因等が考えられます。
お試しにniceコマンドによるプロセス優先度を高くして遅延発生頻度を
確認される等も良いかもしれません。
> at_yashi 様
>
> いつもお世話になっております。
>
> 返信して頂いてありがとうございました。
>
> CPU クロックを確認するコマンドが無い事と
> bogomips が参考にならない件、了解しました。
>
> > どのような処理で、30msの誤差が出ているか教えてもらえますか?
>
> OpenCV と Armadillo-810 のカメラを使った画像処理の一部です。
>
>
> 組んでいる最中のプログラムは
> 処理結果を標準出力に文字列を出力しているのですが、
> 「カーネルや他のアプリがCPUを使っている」事を確認するために
> cat /proc/stat
> top -n 1
> などを system("cat /proc/stat"); などのようにして所々で
> 確認しようと思っています。
>
> ついでにメモリの使用状況も把握したいので
> cat /proc/meminfo
> も実行し、プログラムが終了した後でログを見て CPU やメモリの
> 使用状況と、遅延が発生する原因がわかれば、と思っています。
>
> 他に適切な方法があるようでしたらお教え下さい。
>
> 以上、よろしくお願いします。
>
chihiro
kensaku 様
いつもお世話になっております。
返信して頂いてありがとうございました。
カメラフレーム取得の件で教えて頂いてありがとうございました。
cvQueryFrame を使って取得しています。
確認した所、遅延が発生する箇所はカメラフレーム取得の部分ではなさそうです。
nice コマンドと言う物を試して優先度を変更したいのですが、
その前にナイス値を確認したいと思います。
ナイス値の一覧はどのように取得するか分かりますでしょうか?
ウェブで調べると top か ps -l らしいのですが、ATDE5 と
Armadillo-810 とで表示される項目が異なるようです。
○ top コマンド
ATDE5 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND atmark-dist v1.33.0 PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
○ ps -l
ATDE5 atmark@atde5:/mnt/hgfs/vm$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD atmark-dist v1.33.0 [root@armadillo810-0 (ttySC2) /home/ftp/pub]# ps -l PID USER TIME COMMAND
初歩的な質問なのかも知れませんが、よろしくお願いします。
chihiro
いつもお世話になっております。
すみません、自己解決しました。
http://serverfault.com/questions/104125/busybox-how-to-list-process-pri…
より
busybox ps -o pid,nice,user,args
とする事で nice 値が確認できました。
[root@armadillo810-0 (ttySC2) /home/ftp/pub]# busybox ps -o pid,nice,user,args PID NI USER COMMAND 1 0 root init 2 0 root [kthreadd] 3 0 root [ksoftirqd/0] 4 0 root [kworker/0:0] 5 0 root [kworker/u:0] 6 -20 root [cpuset] 7 -20 root [khelper] 8 -20 root [netns] 9 0 root [kworker/u:1] (以下省略)
もう少し、いろいろと試してみたいと思います。
kensaku
kensakuと申します。
回答が遅くなりすみません。
確認出来たようで何よりです。
※下記のようなコマンドは初めて知りました、展開有難う御座います。
もし、ATDEと同じコマンドが使用したいのであれば
・SDカードを使用したDebianブートでArmadilloを動かす
・atmark-distでmake menuconfigからglibcを使うようにする。
のどちらかになるかと思います。
後者は若干知識が必要ですが、時間のある時に試されてみてはどうでしょうか。
(確か過去の掲示板でArmadillo上でBusyboxを使わないようにするやり方が書いてあったと思いますが・・・)
以上、宜しくお願い致します。
> いつもお世話になっております。
>
> すみません、自己解決しました。
>
> http://serverfault.com/questions/104125/busybox-how-to-list-process-pri…
> より
> busybox ps -o pid,nice,user,args
> とする事で nice 値が確認できました。
>
>
> [root@armadillo810-0 (ttySC2) /home/ftp/pub]# busybox ps -o pid,nice,user,args > PID NI USER COMMAND > 1 0 root init > 2 0 root [kthreadd] > 3 0 root [ksoftirqd/0] > 4 0 root [kworker/0:0] > 5 0 root [kworker/u:0] > 6 -20 root [cpuset] > 7 -20 root [khelper] > 8 -20 root [netns] > 9 0 root [kworker/u:1] > (以下省略) >
>
> もう少し、いろいろと試してみたいと思います。
>
at_yashi
2014年9月9日 16時16分
> Armadillo-810 はコアクロック 792 MHz との事ですが
> この周波数を確認するためのコマンドはありますでしょうか?
ないですね...
> cat /proc/cpuinfo
> すると
> BogoMIPS : 1576.53
> を得られたのですが、
> http://ja.wikipedia.org/wiki/BogoMips
> より x0.5 して 788 MHz と解釈して良いでしょうか?
bogomips は、bogus なのであまり意味をなさないかと。
> また、現在開発中のプログラムにて再現性が無いのですが
> ある時に、処理速度が遅くなってしまう状況が発生しています。
> gettimeofday を使って処理速度を調べているのですが
> 100 ms ぐらいで終わるべき処理が、ある時に
> 130 ms ぐらい、と遅くなってしまいます。
>
> 長時間 CPU を動かしている事により温度などによって
> CPU の周波数が変化する、と言う事はありえますでしょうか?
a810のCPU は、動的に動作周波数を変化しません。
アプリの処理時間は、カーネルや他のアプリがCPUを使っていると変化することがあります。
どのような処理で、30msの誤差が出ているか教えてもらえますか?