インテルのみ表示可能 — GUID: iga1457468819698
Ixiasoft
インテルのみ表示可能 — GUID: iga1457468819698
Ixiasoft
37.8.1.4. ファネル・レイテンシー
ファネル・レイテンシーは、割り込みファネルでコンテキストの切り替えに必要な時間です。ファネル・レイテンシーには、レジスターの保存と復元、プリエンプションの管理、スタックポインターの管理が含まれます。ファネル・レイテンシーは、次の要因によって決まります。
- 個別の割り込みスタックが使用されるか
- 命令のロードと格納に必要なクロックサイクル数
- 割り込みで異なるレジスターセットへの切り換えが必要か
- 割り込みが同じレジスターセット内の別の割り込みをプリエンプトしているか
- レジスターセット内でのプリエンプトが許可されるか
レジスターセット内のプリエンプションには特別な注意が必要です。割り込みで同じレジスターセットに割り当てられている別の割り込みをプリエンプトできる場合、HAL VICドライバーは特別なファネルコードを提供します。この場合、ファネルでは、レジスターの内容の保存および復元に追加のオーバーヘッドが発生します。BSPを作成する際に、レジスターセット内のプリエンプションは、VICドライバーのaltera_vic_driver_enable_preemption_rs_<n> 設定を使用して制御することができます。
ファネルタイプ | ロードまたはストアに必要なクロックサイクル | |
---|---|---|
1 | 2 | |
レジスターセット内のプリエンプションが無効になっているシャドー・レジスター・セット | 10 | 13 |
レジスターセット内のプリエンプションが有効になっているシャドー・レジスター・セット | 42 同じレジスターセット (sstatus.SRS=0) |
64 同じレジスターセット (sstatus.SRS=0) |
26 異なるレジスターセット (sstatus.SRS=1) |
32 異なるレジスターセット (sstatus.SRS=1) |
ファネルタイプ | ロードまたはストアに必要なクロックサイクル | |
---|---|---|
1 | 2 | |
レジスターセット内のプリエンプションが無効になっているシャドー・レジスター・セット | 11 別の割り込みをプリエンプトしない (sstatus.IH=0) |
14 別の割り込みをプリエンプトしない (sstatus.IH=0) |
12 別の割り込みをプリエンプトする (sstatus.IH=1) |
15 別の割り込みをプリエンプトする (sstatus.IH=1) |
|
レジスターセット内のプリエンプションが有効になっているシャドー・レジスター・セット | 42 同じレジスターセット (sstatus.SRS=0) |
64 同じレジスターセット (sstatus.SRS=0) |
27
|
33
|
|
28
|
34
|
上の2つの表に関して、最も小さいレイテンシーは次の条件で発生することに注目してください。
- 異なるレジスターセット — シャドー・レジスター・セットの切り替え。ISRは中断されるタスクとは異なるレジスターセットで実行されており、レジスターの保存および復元が必要ありません。
- レジスターセット内のプリエンプション (ネスト化) が無効になっている。
逆に、最大のレイテンシーは次の条件で発生します。
- 同じレジスター・セット — シャドー・レジスター・セットの切り替えなし。ISRは中断されるタスクと同じレジスターセットで実行されており、ファネルコードでレジスターを保存および復元する必要があります。
- レジスターセット内のプリエンプションが有効になっている。
これらの2つの重要な要素のうち、プリエンプションはレイテンシーに最も大きな違いをもたらします。プリエンプションを無効にすると、他の要素に関係なく、はるかに小さいレイテンシーがもたらされます。