Suche senden
Hochladen
ARM LinuxのMMUはわかりにくい
•
Als PPTX, PDF herunterladen
•
3 gefällt mir
•
6,814 views
W
wata2ki
Folgen
ARM LinuxのMMUはわかりにくい
Weniger lesen
Mehr lesen
Ingenieurwesen
Melden
Teilen
Melden
Teilen
1 von 11
Jetzt herunterladen
Empfohlen
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
UEFI時代のブートローダ
UEFI時代のブートローダ
Takuya ASADA
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
一路 川染
initramfsについて
initramfsについて
Kazuhiro Nishiyama
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
Mr. Vengineer
Verilator勉強会 2021/05/29
Verilator勉強会 2021/05/29
ryuz88
Empfohlen
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
UEFI時代のブートローダ
UEFI時代のブートローダ
Takuya ASADA
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
一路 川染
initramfsについて
initramfsについて
Kazuhiro Nishiyama
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
Mr. Vengineer
Verilator勉強会 2021/05/29
Verilator勉強会 2021/05/29
ryuz88
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
llvm入門
llvm入門
MITSUNARI Shigeo
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
目grep入門 +解説
目grep入門 +解説
murachue
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
Interrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
CUDAプログラミング入門
CUDAプログラミング入門
NVIDIA Japan
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
Introduce Yocto Project Japan and What want to make using Yocto Project
Introduce Yocto Project Japan and What want to make using Yocto Project
Hiroshi Sakate
Linux kernelのbspとupstream
Linux kernelのbspとupstream
wata2ki
Weitere ähnliche Inhalte
Was ist angesagt?
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
llvm入門
llvm入門
MITSUNARI Shigeo
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
目grep入門 +解説
目grep入門 +解説
murachue
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
Interrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
CUDAプログラミング入門
CUDAプログラミング入門
NVIDIA Japan
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
Was ist angesagt?
(20)
DockerコンテナでGitを使う
DockerコンテナでGitを使う
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Docker Compose 徹底解説
Docker Compose 徹底解説
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
llvm入門
llvm入門
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
目grep入門 +解説
目grep入門 +解説
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
プログラムを高速化する話
プログラムを高速化する話
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Interrupt Affinityについて
Interrupt Affinityについて
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
CUDAプログラミング入門
CUDAプログラミング入門
Rust で RTOS を考える
Rust で RTOS を考える
Andere mochten auch
Introduce Yocto Project Japan and What want to make using Yocto Project
Introduce Yocto Project Japan and What want to make using Yocto Project
Hiroshi Sakate
Linux kernelのbspとupstream
Linux kernelのbspとupstream
wata2ki
Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料
Nobuhiro Iwamatsu
Fireduck
Fireduck
wata2ki
Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料
Nobuhiro Iwamatsu
Yocto bspを作ってみた
Yocto bspを作ってみた
wata2ki
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
wata2ki
Introduce Toaster (Toasterのご紹介)
Introduce Toaster (Toasterのご紹介)
Hiroshi Sakate
レシピの作り方入門
レシピの作り方入門
Nobuhiro Iwamatsu
Andere mochten auch
(9)
Introduce Yocto Project Japan and What want to make using Yocto Project
Introduce Yocto Project Japan and What want to make using Yocto Project
Linux kernelのbspとupstream
Linux kernelのbspとupstream
Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料
Fireduck
Fireduck
Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料
Yocto bspを作ってみた
Yocto bspを作ってみた
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
Introduce Toaster (Toasterのご紹介)
Introduce Toaster (Toasterのご紹介)
レシピの作り方入門
レシピの作り方入門
Ähnlich wie ARM LinuxのMMUはわかりにくい
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
Effective Hyper-V - 久しぶりエディション
Effective Hyper-V - 久しぶりエディション
Kuninobu SaSaki
Androidクラウドブック DynabookAZでLinuxを色々と遊んでみよう
Androidクラウドブック DynabookAZでLinuxを色々と遊んでみよう
Netwalker lab kapper
UEFI向け自作OSの紹介
UEFI向け自作OSの紹介
Yuma Ohgami
UNIXアレコレ調べたい3
UNIXアレコレ調べたい3
Hirokazu Yatsunami
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
Masataka Tsukamoto
止まらないようにしたいのにそのせいで止まる悲しさ
止まらないようにしたいのにそのせいで止まる悲しさ
Tomotake Koike
Meltdown を正しく理解する
Meltdown を正しく理解する
Norimasa FUJITA
Linuxデスクトップを便利にする秘訣、お教えします! - 2018年京都版
Linuxデスクトップを便利にする秘訣、お教えします! - 2018年京都版
Akira Taniguchi
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
shingo suzuki
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
shingo suzuki
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
Kenichiro MATOHARA
Osoljp201204
Osoljp201204
Masataka Tsukamoto
オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用
Ruo Ando
インフラエンジニア勉強会hbstudyについて
インフラエンジニア勉強会hbstudyについて
Toshiaki Baba
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
Ryuichi Ueda
Lpicl1セミナー資料20140315
Lpicl1セミナー資料20140315
Takahiro Kujirai
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法
Yohei Azekatsu
Osc2009 Do Xen Hara
Osc2009 Do Xen Hara
Kazuhisa Hara
x86_64向け自作OSの紹介
x86_64向け自作OSの紹介
Yuma Ohgami
Ähnlich wie ARM LinuxのMMUはわかりにくい
(20)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Effective Hyper-V - 久しぶりエディション
Effective Hyper-V - 久しぶりエディション
Androidクラウドブック DynabookAZでLinuxを色々と遊んでみよう
Androidクラウドブック DynabookAZでLinuxを色々と遊んでみよう
UEFI向け自作OSの紹介
UEFI向け自作OSの紹介
UNIXアレコレ調べたい3
UNIXアレコレ調べたい3
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
止まらないようにしたいのにそのせいで止まる悲しさ
止まらないようにしたいのにそのせいで止まる悲しさ
Meltdown を正しく理解する
Meltdown を正しく理解する
Linuxデスクトップを便利にする秘訣、お教えします! - 2018年京都版
Linuxデスクトップを便利にする秘訣、お教えします! - 2018年京都版
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
Osoljp201204
Osoljp201204
オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用
インフラエンジニア勉強会hbstudyについて
インフラエンジニア勉強会hbstudyについて
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
Lpicl1セミナー資料20140315
Lpicl1セミナー資料20140315
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法
Osc2009 Do Xen Hara
Osc2009 Do Xen Hara
x86_64向け自作OSの紹介
x86_64向け自作OSの紹介
Mehr von wata2ki
鹿児島らぐハイブリッド開催への道
鹿児島らぐハイブリッド開催への道
wata2ki
Linuxの2038年問題を調べてみた
Linuxの2038年問題を調べてみた
wata2ki
YoctoでLTSディストリを作るには
YoctoでLTSディストリを作るには
wata2ki
YoctoLTSについて調べてみた
YoctoLTSについて調べてみた
wata2ki
しょしんしゃのためのhello world
しょしんしゃのためのhello world
wata2ki
Linuxのsemaphoreとmutexを見る
Linuxのsemaphoreとmutexを見る
wata2ki
パッチを投稿してみた話
パッチを投稿してみた話
wata2ki
Mehr von wata2ki
(7)
鹿児島らぐハイブリッド開催への道
鹿児島らぐハイブリッド開催への道
Linuxの2038年問題を調べてみた
Linuxの2038年問題を調べてみた
YoctoでLTSディストリを作るには
YoctoでLTSディストリを作るには
YoctoLTSについて調べてみた
YoctoLTSについて調べてみた
しょしんしゃのためのhello world
しょしんしゃのためのhello world
Linuxのsemaphoreとmutexを見る
Linuxのsemaphoreとmutexを見る
パッチを投稿してみた話
パッチを投稿してみた話
ARM LinuxのMMUはわかりにくい
1.
nagoya.bin 【低レイヤーLT勉強会】 #1 ARM
LinuxのMMUはわかりにくい
2.
初めに • 低レイヤーLT勉強会が開催されるのをconnpassで発見したので参加し てみました • こういう試みはとても面白いので今後も続いてくれるといいなーと 思っています •
今日は、Linuxのキャッシュ周りを調べていて気付いたことに関する発 表です。
3.
MMUとは? • MMU(Memory Management
Unit)とは? • CPUのメモリ管理を行うハードウェア • コンピュータサイエンスの教科書では、OS(Operating System)の仮想記憶 を実現するための仕組みとして紹介される • 全てのユーザプログラムに固有のアドレス空間が与えられる • 他のプログラムから隔離・保護される VA0-00 VA0-01 VA0-02 VA0-03 VA0-04 VA0-05 VA0-06 PA-00 PA-01 PA-02 PA-03 PA-04 PA-05 PA-06 VA1-00 VA1-01 VA1-02 VA1-03 VA1-04 VA1-05 VA1-06 httpd 仮想アドレス 仮想アドレス smbd 物理アドレス
4.
MMUの仕組み • Coretex-A9におけるMMUの位置づけ
5.
ARMのMMU • ARMのMMUは何ができるのか? • アドレス変換 •
仮想記憶のためのアドレス変換 • プロセスモデルを実現するために必要 • メモリアクセス許可 • データ領域の実行をできなくしたり、ユーザーモードではアクセスできな くしたりできる • 不正なメモリアクセスをブロックすることで、アプリケーションに触らせたく ないハードウェアレジスタを見えなくする • 攻撃されて任意のデータをメモリに流し込まれても、データ領域は実行属性を 付けないことで実行できなくする • メモリ属性の指定 • キャッシュの有効・無効 • コード領域やデータ領域はキャッシュ有効にしてアクセス速度を速くする • ハードウェアのレジスタは、ハードウェアの状態を直接見ないといけないので キャッシュ無効
6.
ARMのMMU • ARMのMMUは何ができるのか? • アドレス変換,
メモリアクセス許可, メモリ属性の指定 • これらはページテーブルに記録される この設定はアクセス不許可を意味する 1ページ4KByteの時の設定 (さらにLv2テーブルをルックアップする) 0x00000000-0x000FFFFF用仮想アドレス 0x00100000 Lv1ページテーブル 0x00100000-0x001FFFFF用 0x00200000-0x002FFFFF用 0xFFF00000-0xFFFFFFFF用 ・ ・ ・ Lv1ページテーブルは 1MByte単位のLUTに なっている 1ページ1MByteの時の設定 1ページ16MByteの時の設定 (使われているのを見たことがない) Lv1ページテーブルのフォーマット
7.
ARMのMMU • 1ページ4KByte場合は、さらにもう一回LUTをルックアップする この設定はアクセス不許可を意味する 1ページ64KByteの時の設定 0x00000000-0x000FFFFF用仮想アドレス 0x00100000 Lv1ページテーブル 0x00100000-0x001FFFFF用 0x00200000-0x002FFFFF用 0xFFF00000-0xFFFFFFFF用 ・ ・ ・ Lv1ページテーブルは 1MByte単位のLUTに なっている Lv2ページテーブルのフォーマット 0x00100000-0x00100FFF用 0x00100000-0x00101FFF用 0x00100000-0x001FFFFF用 0xFFF00000-0xFFF00FFF用 0xFFF00000-0xFFF01FFF用 0xFFF00000-0xFFFFFFFF用 1ページ4KByteの時の設定
8.
ARMのMMU • ARMのMMUは何ができるのか? • アドレス変換,
メモリアクセス許可, メモリ属性の指定 • メモリ属性(キャッシュ設定) Coretex-A9 TEX[2]ビットを1に設定することで、L1, L2キャッ シュの設定が個別にできるようになる
9.
ARMのMMU • ARMのMMUは何ができるのか? • アドレス変換,
メモリアクセス許可, メモリ属性の指定 • メモリ属性(キャッシュ設定) Coretex-A9 Linuxの実装ではTEX[2]=0で使用している しかも、表と挙動が違う
10.
犯人はこいつ • Linuxカーネルソースのarch/arm/mmの下に犯人発見 ENDPROC(cpu_v7_set_pte_ext) /* * Memory
region attributes with SCTLR.TRE=1 * n = TEX[0],C,B * TR = PRRR[2n+1:2n] - memory type * IR = NMRR[2n+1:2n] - inner cacheable property * OR = NMRR[2n+17:2n+16] - outer cacheable property * n TR IR OR * UNCACHED 000 00 * BUFFERABLE 001 10 00 00 * WRITETHROUGH 010 10 10 10 * WRITEBACK 011 10 11 11 * reserved 110 * WRITEALLOC 111 10 01 01 * DEV_SHARED 100 01 * DEV_NONSHARED100 01 * DEV_WC 001 10 * DEV_CACHED 011 10 */ .equ PRRR, 0xff0a81a8 .equ NMRR, 0xc0e040e0 SCTLR.TRE=1にすることで、PRRRとNMRRレジスタを使って設定を上書きできることが判明 Kernel 4.9の場合、WRITEALLOC設定なのにL1はライトバックライトアロケート、L2がライト バックのみになっている 0xc 11 00 0x4 01 00
11.
まとめ • ARM Linuxのキャッシュ設定を調べていてぶつかった謎 •
キャッシュ設定はページテーブルでコントロールしている • ところが、ページテーブルの設定と挙動が違う • カーネルのARM依存部分を調査した結果、ページテーブル設定をさらに レジスタ設定で変更できることが判明 • ちなみにこの部分、カーネルのバージョンアップでたまに設定が変わりま す。。。 • 参考資料 • http://infocenter.arm.com/help/index.jsp • ARMの資料はここに集約されています。ユーザ登録をしてダウンロードで きないものもありますが、困ったときはまずここで調べてください
Jetzt herunterladen