2016-09-20 8 views
2

Linux/aarch64(Cortex-a57)でのアライメントされていないメモリアクセスの記録方法を教えてください。Linux/aarch64でのアライメントされていないアクセスのログとデバッグ

私はここに関与する2つの異なるものがあります理解:

  1. が整列していないアクセス(すなわち上のCPUからの割り込みを高めるために選択するには、割り込み整列されていないメモリのことがそうでなければ、AのCPUでサポートされていることになるアクセスLinuxの(SIGBUS /ソフトエミュレート非整列アクセスを/それらをログ火)にこれらの割り込みを処理する方法を選択するパフォーマンスコスト)

私の問題は最初、私はCPUの制御レジスタを管理する方法がわからないということですから私のプログラム(が私のユーザスペースアプリケーションで実際にやらなければなりません)、そして2番目に、Linuxでの整列していないアクセスを管理するための/proc/cpu/alignmentインターフェイスがなくなっているようです(私は4.4.0カーネルを使用しています)。カーネルから不整列アクセスを管理する

https://www.kernel.org/doc/Documentation/arm/mem_alignment(おそらく旧式の)

関連: Does AArch64 support unaligned access?

答えて

1

あなたがこれを行うことはできません。とにかく、Linuxではありません。

EL0のアラインメントフォルトはSCTLR_EL1.Aビットによって制御されますが、これもEL1に影響します。したがって、あなたがそれを可能にするためにハッキングされたカーネルモジュールを書いたとしても(明らかにユーザスペースから特権システム制御レジスタに直接触れることはできません)、カーネルが次のネットワークパケットが到着するとすぐにパニックに陥ることはほとんどありません。 arm64カーネルポートは、に、AArch64によって提供されるアライメントされていないアクセス機能を使用しています。 ARMポートの/proc/cpu/alignmentハンドラはありません。なぜなら、アライメントされていないアクセスをまったくサポートしていなかったARMv6より前のCPUのレガシーがないからです。

でき行うが、しかし、あなたのプログラムがトリガー非整列アクセス関連のイベントをカウントする、のCortex-A57のmicroarchitectural PMU events 0x68、0x69のか0x6aのいずれかまたは全てを監視するためにperf toolsを使用しています。アライメントフォールトの鈍器があるかもしれないので、個々のアクセスをトラップまたはデバッグする手段はありませんが、あなたのプログラムに起因するイベントがカウントされるので、それは間違いなくもっと有用です。

+0

したがって、カーネルは、自分自身とユーザー空間に対して異なるアライメントフォールトを設定することはできません。あなたが言及したように、プロファイリングはここに行く方法です。私はより厳密なメモリチェックが必要な場合に備えて(それが理にかなっているかどうか疑問に思っていた) –

関連する問題