(toppers-users 2287) Re: 時間計測とsyslog

Tetsuo TAKAHASHI tetsu-t @ mbd.ocn.ne.jp
2006年 2月 2日 (木) 22:54:38 JST


高橋です。

みなさん、ありがとうございます。

On 2006/02/02, at 7:08, ykominami wrote:
> 小南と申します.

> 高橋さんが書かれた範囲から考えて、問題の原因として最も可能性が 
> 高い
> と思われるのは、
> 「計測対象の処理中にログタスクへのタスクスイッチが発生した。つ 
> まり
>  計測した時間は、計測対象の処理時間+ログタスクのシリアルへの 
> 出力
>  処理の時間ではないか」
> ということです。

はい。そうですね。
これについては、一番最初に考えました。

> 詳しくは、doc/user.txtに書かれていますが,syslog() 
> 自体はカーネル
> の機能を呼び出して,メモリ上にログを書き貯めているだけです.
> このメモリ上のログを、ログタスクが周期的に読み出して、シリアル 
> などに
> 出力しています.
(snip)

これについては、上記のドキュメントも読みましたし、高田先生の講義 
も受けさせて
もらいましたので存じております。

> 上記のことが原因であれば,今回の場合は、計測の前後にdis_dsp(),
> ena_dsp()を入れるという方法が考えられます.

まず、これについて実施したところ、確かに処理時間は正しそうな値は 
出たのですが、
やはりsyslog()を前後に入れると、処理時間が遅くなったり、速 
くなったりするのです。

> 他には、計測したいタスクの優先度を、ログタスクより相対的に高く 
> する,
> 計測中は、ログタスクをサスペンドさせるなども考えられます.

これも同様です。

>> config/sh3/solution_engine/ms7750se01.h
>> 内の記述で、
>> /*
>> *  キャッシュモードの設定
>> *  P0,U0,P1ライトスルーモード
>> */
>> #define CCR_MODE      0x0000898d
>> とありますが、コピーバックモードの設定のように見えるのです 
>> が・・・。
>> SHの設定は、経験が少ないので勘違いかもしれません。
> 私が使っているボードはSH3のMS7727CP01なので断言す 
> るのは少し自信
> がないのですが、ライトスルーモードにするには、0x0000898b 
> ではない
> かと思います.

そうですね。別実装のITRON準拠OSの処理を見ていて、お 
かしいなと
思いました。
で、これは、コメントの間違いですよね。
ライトスルーモードの方が、処理時間としては速くなりますよね。
#キャッシュにヒットするなら・・・

On 2006/02/02, at 9:57, Kazuhiko Imai wrote:
> 測定区間ではタスクスイッチの他にも、シリアル割込みも
> 禁止した方が、より目的にあった測定になるかと思います。

ああ、シリアルの割り込みについては失念していました。

On 2006/02/02, at 12:06, Imai Kazuhiko wrote:
>> 仕様上は「タスクコンテキストであれば、CPUロック状態でも
>> 呼び出せる」ということになっています。
(snip)
>      vxget_tim(&t1); (a)
>      example();      (b)
>      vxget_tim(&t2); (c)
> vxget_timの呼び出し自体((a),(c)の瞬間)はCPUロッ 
> ク状態でも
> OKですが、測定区間の(b)までCPUロック状態だと
>  タイマ割り込みが入らない
>     ↓
>  システム時刻が更新されない
>     ↓
>  (c)のvxget_timでt2に期待している値が入らない
> となります。

おっしゃる通りで、一度ひっかかりました。

> 高橋さんのご質問では、測定区間が秒オーダーでタイマ割り込み周期 
> より
> 長いとお見受けしたので、「CPUロック状態はまずい」と述べ 
> ました。

はい。loc_cpuを使うのは、計測の意味がなくなります。


それで、その後ですが、色々試しているのですが、syslog()の入 
れる数を増減
させると、出力された結果が安定いたしません。
色々試した中で、空の何もしない関数を挿入した場合でも、同様に安定 
しない
事が分かりました。どこか環境(ハード?開発環境?)がお 
かしいのかもしれません。

サンプル用のボードですので、試用期間が終わる前に他の処理の試用も 
実施しないと
いけませんので、とりあえずこの件について追求するのは中止といたし 
ました。
#本質問をするまでに1週間程やってましたので。

以上、アドバイスありがとうございました。
また、何かありましたらアドバイスを頂きたく思います。

PS.
一つ気になるのは、start.Sで設定したはずのCCRのモード 
が、メインタスクを
起動した時に、そのCCRのアドレスを確認すると設定したはずの 
値にはなっていない
と言うのが気になったのですが、そういうものでしょうか。

--
// Tetsuo TAKAHASHI <tetsu-t @ mbd.ocn.ne.jp>