(toppers-users 4718) Re: TOPPERS/ASP3ディスパッチ部におけるフリーズについて

kaneko-nao kaneko-nao @ numata.co.jp
2018年 1月 9日 (火) 09:09:06 JST


名古屋大学
高田広章 様

毎々お世話になります。株式会社ヌマタです。

■ これまでの弊社からのご報告で、多重割り込みにつきましては、同一優先順位云々と申し上げてきましたが、OSが使用する割り込みがそれら(OS以外の割り込み)に含まれていないことに気付き、改めて1/5から評価テストをしたところ、フリーズしないことが分かりました。これまでの経緯を纏めると、次のようになります。

割り込みと優先順位を
INT1(OS高分解能割り込み) -2
INT2(例えばSCI) -15
INT3(例えばIIC) -15
とした場合、
・INT1+INT2+INT3 → NG(フリーズする)
・INT1+INT2 → OK(フリーズしない)
・INT1+INT3 → OK

割り込みと優先順位を
INT1 -2
INT2 -2
INT3 -2
とした場合、
・INT1+INT2+INT3 → OK


■ また、前回の回答で不十分であった箇所につきましても確認いたしました。

>ディスパッチャ内でフリーズしてステップ実行できないということは,
>アイドル処理内のループも回っていないということですね?(確認)

リリース3.2.0での、ディスパッチャのアイドル処理内では、

 msr   cpsr_c, #CPSR_SVC_MODE
  b     dispatcher_1

をループします。(この2行のみステップ実行可です)

>フリーズ時の割込みコントローラの状態
ICCPMR 0x0000_00f8
ICCHPIR 0x0000_0087
ICCRPR 0x0000_0080
ICCIAR 0x0000_03ff

ICCIAR を最後にリードしています


以上、ご連絡します。よろしくお願いいたします。

株式会社ヌマタ






名古屋大学
高田広章 様

毎々お世話になります。株式会社ヌマタです。
年末年始でご連絡が遅くなり、申し訳ありませんでした。本年もよろしくお願いいたします。
現在もフリーズ再現待ち状態ですが、思うように再現しないため、ご質問について、現時点で分かる範囲で回答いたします。

>ディスパッチャ内でフリーズしてステップ実行できないということは,
>アイドル処理内のループも回っていないということですね?(確認)

フリーズが起こり始めたのがバージョン3.1.0であったため、ディスパッチャのアイドル処理内では、

     b     dispatcher_1

で、固まっており、ステップ実行ができない状況でした。(3.2.0ではアイドルタスクを入れたため未確認です。そのため、アイドルタスクを外し、現在確認中です)


>それに対してアイドルタスクを設けた場合は,ループを回っていると
>いうことは,2つの状況で違う現象が出ているものと理解しました。ア
>イドルタスクには,ディスパッチャ内のアイドル処理と同じものを入
>れられたということですが,以下の2命令をループしているということ
>で正しいでしょうか?

アイドルタスクでは、動作中のタスク状態を参照するための処理をしており、
フリーズ時は以下をループしています。(正常動作しています)

while(  1 ){
    ref_tsk( TASK_1 )
    ref_tsk( TASK_2 )
.
.
}


>フリーズ時の割込みコントローラの状態
ICCPMR 0x0000_00f8
ICCHPIR 0x0000_00be
ICCRPR 0x0000_0070
ICCIAR 0x0000_03ff

但し、一斉にリードしたため、ご指摘のICCIARが最後のリードとなるよう、改めて確認します。


以上、よろしくお願いいたします。

株式会社ヌマタ






-----Original Message----- 
From: Hiroaki TAKADA
Sent: Thursday, December 28, 2017 10:01 AM
To: users @ toppers.jp
Subject: (toppers-users 4715) Re: TOPPERS/ASP3ディスパッチ部におけるフリーズについて

株式会社ヌマタ様

名古屋大学の高田です。いただいた情報から,原因を検討してみました。
フリーズしてICEでステップ実行もできない,という状況は,純粋なソフ
トウェアの問題ではないものと思われます。

まず状況を確認させてください。

> 先ほど、「フリーズ状態になると、そのアドレスで固まってしまい、ICEでも、
> ステップ実行すらできない状況です。」と表現しましたが、これはディスパッチャ内で
> フリーズした場合であり、アイドルタスクを設けた場合は、そのアイドルタスク内を 
> 
> ループしている状況です。誤解を招く表現でしたので一部訂正いたします。

ディスパッチャ内でフリーズしてステップ実行できないということは,
アイドル処理内のループも回っていないということですね?(確認)

それに対してアイドルタスクを設けた場合は,ループを回っていると
いうことは,2つの状況で違う現象が出ているものと理解しました。ア
イドルタスクには,ディスパッチャ内のアイドル処理と同じものを入
れられたということですが,以下の2命令をループしているということ
で正しいでしょうか?

     msr   cpsr_c, #CPSR_SVC_MODE
     b     dispatcher_1

現時点では,状況から判断して,カーネルそのものの不具合の可能性
は低いと考えています。その理由は次の通りです。

(1) すべての割込みを同じ優先度にしても発生するということは,多
重割込みの処理が原因ではないことになる。そうなると,ディスパッ
チャ内の実行パスは限られており,不具合の再現性はもっと高くなる
と思われる。

(2) アイドルタスクを設けた場合には,ASP3カーネルで導入した新し
いディスパッチャのロジックは使われていないはずで,その場合にも
発生するということは,ディスパッチャのロジックの問題は考えにく
い。

(3) (最初に書いた通り)フリーズしてステップ実行もできないとい
うのは,純粋なソフトウェアの問題ではないと思われる。

もちろん,カーネルの不具合でないと断言はできません(予断を持た
ずに当たるべきですので)。

> 但し、前述の通り、割り込みは、受け付けません。

原因解明のためにいろいろ調べてみたいことは考えられるのですが,
まず調べやすいと思われるのは,アイドルタスク内でループしている
時に,割込みが受け付けられないのはなぜか?だと考えます。ループ
している時にICEでプロセッサの状態が観測できるのであれば,PSWの
値が何になっているか(上の2命令をループしていれば,割込み許可
状態のはず)と,割込みコントローラの状態(具体的には,ICCPMRの
値が何になっているか。また,ICCHPIR,ICCRPR,ICCIARの値も手掛か
りになる可能性があります。ただし,ICCIARの値をリードすると,割
込みコントローラの状態が変わるので,最後にリードすべき)を見て
もらえると,手掛かりになりそうに思います。

高田広章
名古屋大学

On 2017/12/26 10:21, kaneko-nao wrote:
> 名古屋大学
> 高田広章 様
>
> 何度も失礼いたします。株式会社ヌマタです。
>
> 先ほど、「フリーズ状態になると、そのアドレスで固まってしまい、ICEでも、
> ステップ実行すらできない状況です。」と表現しましたが、これはディスパッチャ内で
> フリーズした場合であり、アイドルタスクを設けた場合は、そのアイドルタスク内を 
> 
> ループしている状況です。誤解を招く表現でしたので一部訂正いたします。
> 但し、前述の通り、割り込みは、受け付けません。
>
> 以上、よろしくお願いいたします。
>
> 株式会社ヌマタ
>
>
>
> 名古屋大学
> 高田広章 様
>
> ご連絡、ありがとうございます。株式会社ヌマタです。
>
>> 質問を変えさせてください。ここで「フリーズする」というのは,無限
>> ループから抜けてこなくなるということだと思うのですが,その時に,
>> 割込みも発生していないということでしょうか?
>
> 割り込みは、タイマ周期割り込みやVSYNC割り込みのような、周期的に入る
> ものがあるので、それらが起動してもおかしくないのですが、フリーズ状態
> になると、そのアドレスで固まってしまい、ICEでも、ステップ実行すらできない
> 状況です。
>
> 以上、取り急ぎ、回答いたします。
>
> 株式会社ヌマタ
>
>
>
> -----Original Message----- From: Hiroaki TAKADA
> Sent: Tuesday, December 26, 2017 9:18 AM
> To: users @ toppers.jp
> Subject: (toppers-users 4711) Re: TOPPERS/ASP3ディスパッチ部におけるフリーズについて
>
> 株式会社ヌマタ様
>
> 名古屋大学の高田です。すみませんが,昨日のメールを修正させてくだ
> さい。
>
>> (1) slp_tsk() で割り込み待ちをしているということですが,その時
>> に,他に動作しているタスクが無い状況があるでしょうか?(ディス
>> パッチャ内のアイドル処理を実行しているかどうか)
>
> これは,不要な質問でした。「core_support.s」の223行目の割り込み待
> ちのところでフリーズ,ということは,当然 YES ということですね。
>
> 質問を変えさせてください。ここで「フリーズする」というのは,無限
> ループから抜けてこなくなるということだと思うのですが,その時に,
> 割込みも発生していないということでしょうか?
>
> もし割込みが発生していないとすると,ループ内で割込みを許可してい
> ますので,割込みコントローラ側の設定がおかしくなっているものと思
> われます。
>
> 割込みが発生しているのであれば,割込みの出口処理でタスク切り換え
> に失敗しているものと思われます。
>
> この件,わかりましたら,お知らせ下さると幸いです。
>
> 高田広章
> 名古屋大学
>
> On 2017/12/25 17:51, Hiroaki TAKADA wrote:
>> 株式会社ヌマタ様
>>
>> ご報告,ありがとうございます。
>>
>> TOPPERS/ASP3 のディスパッチャのロジックは,ASP のものと考え方を
>> 変えており,何か問題が残っている可能性は無いとは言えません。ま
>> た,Release 3.1.0 と 3.2.0 でもロジックの修正を行っており,歴史
>> が浅いコードになります。
>>
>> こちらでも調査したいと思いますが,まれにしか起こらない現象とい
>> うことで,原因を絞り込むのにご協力いただけるとありがたいです。
>>
>> (1) slp_tsk() で割り込み待ちをしているということですが,その時
>> に,他に動作しているタスクが無い状況があるでしょうか?(ディス
>> パッチャ内のアイドル処理を実行しているかどうか)
>>
>> (2) もし可能なら,Release 3.1.0 でも同じ問題が発生するか,調べ
>> てくださると助かります。
>>
>> よろしくお願いします。
>>
>> 高田広章
>> 名古屋大学
>>
>> On 2017/12/25 15:05, kaneko-nao wrote:
>>> はじめまして。
>>> 株式会社ヌマタと申します。弊社では次の環境で設計をしていますが、ディスパッチ部でフリーズをするという現象があります。
>>>
>>> OS:TOPPERS/ASP3 3.2.0
>>> CPU:ルネサス RZA1/L
>>>
>>> slp_tsk( )で割り込み待ちをし、割り込み内で当該タスクをiwup_tsk( )で起床する、というタスクを複数作成していると、ディスパッチ部でフリーズをするという現象が発生しました。フリーズする箇所は、「core_support.s」の223行目の割り込み待ちのところです。フリーズの頻度は、数時間に1回程度で、24時間正常動作を続ける場合もあります。
>>>
>>>     ALABEL(dispatcher_1)
>>> #ifdef TOPPERS_CUSTOM_IDLE
>>>     toppers_asm_custom_idle
>>> #else /* TOPPERS_CUSTOM_IDLE */
>>>     msr        cpsr_c, #CPSR_SVC_MODE    /* 割込みを許可(スーパバイザモード)*/
>>> #endif /* TOPPERS_CUSTOM_IDLE */
>>>     b        dispatcher_1            /* 割込み待ち */ ←ここでフリーズ
>>>
>>> そこで試行錯誤の結果、割り込みを1個(OSが使用するタイマ割り込みを除く)にすればフリーズしない、ということが分かりました。現在、弊社のお取引先でも、全く同じ現象のトラブルがあるとの報告を受けておりますが、過去にこのような事例についてのご対応はおありでしょうか。ご指導を賜りたく、お願いいたします。因みに、「core_support.s」は、一切変更せずに使用しています。
>>>
>>>
>
>