(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>