0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi では DMA Buffer をmmap する際に CPU Cache が無効になる

Last updated at Posted at 2024-08-02

はじめに

Linux では DMA Bufferを mmap した時に、ある条件が揃うと CPU Cache が無効になり、パフォーマンスが極端に落ちる場合があります。そこで、何故そのようなことが起こるのか説明します。少し長くなるので、次のように記事を幾つかに分けて投稿します。

  1. はじめに
  2. Cache Coherence 問題
  3. Cache Aliasing 問題
  4. Linux Kernel の Cache 問題の扱い
  5. Linux では Cache Coherence Hardware を持っていないとDMA Buffer をmmap する際に CPU Cache が無効になる
  6. Raspberry Pi の例(この記事)
  7. RISC-V CPU の注意点
  8. 所感

1〜3は、コンピューターアーキテクチャの基本的な事項を、簡単に説明したものです。すでにご存じの方は読み飛ばしてください。

4 はこれらの問題を Linux Kernel 内でどのように扱っているかを説明します。

5 がこれらの記事群の結論です。結論だけ知りたい方はここだけ読んでください。

前回の記事 『Linux では Cache Coherence Hardware を持っていないとDMA Buffer をmmap する際に CPU Cache が無効になる』 では、Cache Coherence Hardware を持っていないコンピューターシステムの場合は、例え Cache Aliasing 問題が起きない場合でも、 DMA Buffer を mmap する際にキャッシュが無効になることを説明しました。この記事では、その(残念な)コンピューターシステムの例である Raspberry Pi を紹介します。

Raspberry Pi の場合

BCM2711 (Raspberry Pi 4 の SoC) の内部ブロック

Raspberry Pi 4 に搭載されている SoC は Broadcom 社製の BCM2711 です。このBCM2711 は次の図のような内部ブロックになっています。

Fig.1 BCM2711 Block Diagram

Fig.1 BCM2711 Block Diagram


Cortex-A72 の L1 Cache は PIPT

BCM2711 には Linux 等を動作させるためのアプリケーションプロセッサとして arm 社製の Cortex-A72 が搭載されています。この Cortex-A72 のL1-Cache は PIPT 方式であることが次の公式資料で明記されています。つまり BCM2711 は Cache Aliasing 問題は起こりません。

Fig.2 The L1 Cache of Cortex-A72 is PIPT

Fig.2 The L1 Cache of Cortex-A72 is PIPT


BCM2711 の InterConnect は Cache Coherence 未対応

一方、BCM2711 の AMBA/AXI-Bus InterConnect は Cache Coherence に対応していません。BCM2711 のデータシートには明記されていませんが、Raspberry Pi 公式のフォーラムには Cache Coheence 問題はソフトウェアで解決するよう明記されています。

Fig.3 InterConnect is not Cache Coherence capable

Fig.3 InterConnect is not Cache Coherence capable


まとめ

この記事では『Linux では Cache Coherence Hardware を持っていないとDMA Buffer をmmap する際に CPU Cache が無効になる』 コンピューターシステムの例として Raspberry Pi を紹介しました。

Rapberry Pi 4 の アプリケーションプロセッサ(Cortex-A72) のL1-Cache は PIPT なので Cache Aliasing 問題は発生しませんが、BCM2711 の InterConnect が Cache Coherence に対応していないので、Linux では DMA Buffer を mmap した時にキャッシュが有効になりません。

[参考]に Raspberry Pi で mmap したら性能が落ちた事例を紹介しています。参考にしてください。

参考

Raspberry Pi で mmap が遅くなっていると思われる事例

Raspberry Pi のハードウェアの資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?