Submit Search
Upload
ARM LinuxのMMUはわかりにくい
•
Download as PPTX, PDF
•
3 likes
•
6,817 views
W
wata2ki
Follow
ARM LinuxのMMUはわかりにくい
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 11
Download now
Recommended
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
目grep入門 +解説
目grep入門 +解説
murachue
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
Kentaro Ebisawa
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
LINE Corporation
Recommended
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
目grep入門 +解説
目grep入門 +解説
murachue
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
Kentaro Ebisawa
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
LINE Corporation
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化する
Kensuke Maeda
レシピの作り方入門
レシピの作り方入門
Nobuhiro Iwamatsu
Zynq mp勉強会資料
Zynq mp勉強会資料
一路 川染
Protocol Buffers 入門
Protocol Buffers 入門
Yuichi Ito
DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
Juniper Networks (日本)
20分でわかるgVisor入門
20分でわかるgVisor入門
Shuji Yamada
入門!Jenkins
入門!Jenkins
Shuntaro Saiba
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
uchan_nos
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観
Yamato Tanaka
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
Akihiro Suda
Cephのベンチマークをしました
Cephのベンチマークをしました
OSSラボ株式会社
containerdの概要と最近の機能
containerdの概要と最近の機能
Kohei Tokunaga
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
Takeshi HASEGAWA
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
i_yudai
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
More Related Content
What's hot
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化する
Kensuke Maeda
レシピの作り方入門
レシピの作り方入門
Nobuhiro Iwamatsu
Zynq mp勉強会資料
Zynq mp勉強会資料
一路 川染
Protocol Buffers 入門
Protocol Buffers 入門
Yuichi Ito
DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
Juniper Networks (日本)
20分でわかるgVisor入門
20分でわかるgVisor入門
Shuji Yamada
入門!Jenkins
入門!Jenkins
Shuntaro Saiba
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
uchan_nos
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観
Yamato Tanaka
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
Akihiro Suda
Cephのベンチマークをしました
Cephのベンチマークをしました
OSSラボ株式会社
containerdの概要と最近の機能
containerdの概要と最近の機能
Kohei Tokunaga
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
Takeshi HASEGAWA
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
i_yudai
What's hot
(20)
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化する
レシピの作り方入門
レシピの作り方入門
Zynq mp勉強会資料
Zynq mp勉強会資料
Protocol Buffers 入門
Protocol Buffers 入門
DockerとPodmanの比較
DockerとPodmanの比較
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
20分でわかるgVisor入門
20分でわかるgVisor入門
入門!Jenkins
入門!Jenkins
Docker Compose 徹底解説
Docker Compose 徹底解説
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
Cephのベンチマークをしました
Cephのベンチマークをしました
containerdの概要と最近の機能
containerdの概要と最近の機能
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
Viewers also liked
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
Viewers also liked
(8)
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のご紹介)
Similar to 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
Similar to 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の紹介
More from 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
More from 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の資料はここに集約されています。ユーザ登録をしてダウンロードで きないものもありますが、困ったときはまずここで調べてください
Download now