Enviar pesquisa
Carregar
x86-64/Linuxに独自メモリ空間を勝手増設
•
Transferir como PPTX, PDF
•
0 gostou
•
1,196 visualizações
Minoru Nakamura
Seguir
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 23
Baixar agora
Recomendados
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
JVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweep
Minoru Nakamura
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
mao999
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
Takuya ASADA
BHyVeってなんや
BHyVeってなんや
Takuya ASADA
Bhyve code reading
Bhyve code reading
Takuya ASADA
Recomendados
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
JVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweep
Minoru Nakamura
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
mao999
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
Takuya ASADA
BHyVeってなんや
BHyVeってなんや
Takuya ASADA
Bhyve code reading
Bhyve code reading
Takuya ASADA
Basic of virtual memory of Linux
Basic of virtual memory of Linux
Tetsuyuki Kobayashi
Bhyve Internals
Bhyve Internals
Takuya ASADA
Richard high performance fuzzing ja
Richard high performance fuzzing ja
PacSecJP
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
MITSUNARI Shigeo
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
Taisuke Yamada
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
Kazuki Onishi
ゆるバグ
ゆるバグ
MITSUNARI Shigeo
FPGAでゲーム機を作ろう! 第6回
FPGAでゲーム機を作ろう! 第6回
yoshimitsusudoh
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
Hirotaka Kawata
デバドラを書いてみよう!
デバドラを書いてみよう!
Masami Ichikawa
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
LINE Corporation
あるmmapの話
あるmmapの話
nullnilaki
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
sandai
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
あるコンテキストスイッチの話
あるコンテキストスイッチの話
nullnilaki
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについて
Mitsutoshi Aoe
仮想記憶の構築法
仮想記憶の構築法
magoroku Yamamoto
d-kami x86-1
d-kami x86-1
Daisuke Kamikawa
Jvm reading-parallel gc
Jvm reading-parallel gc
Minoru Nakamura
0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム
Minoru Nakamura
Mais conteúdo relacionado
Mais procurados
Basic of virtual memory of Linux
Basic of virtual memory of Linux
Tetsuyuki Kobayashi
Bhyve Internals
Bhyve Internals
Takuya ASADA
Richard high performance fuzzing ja
Richard high performance fuzzing ja
PacSecJP
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
MITSUNARI Shigeo
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
Taisuke Yamada
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
Kazuki Onishi
ゆるバグ
ゆるバグ
MITSUNARI Shigeo
FPGAでゲーム機を作ろう! 第6回
FPGAでゲーム機を作ろう! 第6回
yoshimitsusudoh
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
Hirotaka Kawata
デバドラを書いてみよう!
デバドラを書いてみよう!
Masami Ichikawa
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
LINE Corporation
あるmmapの話
あるmmapの話
nullnilaki
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
sandai
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
あるコンテキストスイッチの話
あるコンテキストスイッチの話
nullnilaki
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについて
Mitsutoshi Aoe
仮想記憶の構築法
仮想記憶の構築法
magoroku Yamamoto
d-kami x86-1
d-kami x86-1
Daisuke Kamikawa
Mais procurados
(20)
Basic of virtual memory of Linux
Basic of virtual memory of Linux
Bhyve Internals
Bhyve Internals
Richard high performance fuzzing ja
Richard high performance fuzzing ja
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
ゆるバグ
ゆるバグ
FPGAでゲーム機を作ろう! 第6回
FPGAでゲーム機を作ろう! 第6回
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
デバドラを書いてみよう!
デバドラを書いてみよう!
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
あるmmapの話
あるmmapの話
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
あるコンテキストスイッチの話
あるコンテキストスイッチの話
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについて
仮想記憶の構築法
仮想記憶の構築法
d-kami x86-1
d-kami x86-1
Destaque
Jvm reading-parallel gc
Jvm reading-parallel gc
Minoru Nakamura
0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム
Minoru Nakamura
JVM-Reading-ParalleGC
JVM-Reading-ParalleGC
Minoru Nakamura
Persistent-Memory-Programming-Model
Persistent-Memory-Programming-Model
Minoru Nakamura
Jvm reading-synchronization
Jvm reading-synchronization
Minoru Nakamura
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)
Kris Mok
SC16 NVIDIA NEWS
SC16 NVIDIA NEWS
Kuninobu SaSaki
Dentoo.LT12 並列処理・MPIの第一歩 20151025
Dentoo.LT12 並列処理・MPIの第一歩 20151025
HPCシステムズ株式会社
プログラマ目線から見たRDMAのメリットとその応用例について
プログラマ目線から見たRDMAのメリットとその応用例について
Masanori Itoh
低遅延Ethernetとファブリックによるデータセンタ・ネットワーク
低遅延Ethernetとファブリックによるデータセンタ・ネットワーク
Naoto MATSUMOTO
シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例
Naoto MATSUMOTO
MPIによる並列計算
MPIによる並列計算
HPCシステムズ株式会社
InfiniBand Presentation
InfiniBand Presentation
Shekhar Kumar
ioDriceとInfiniBandとDRBDを利用したリアルタイムレプリケーション
ioDriceとInfiniBandとDRBDを利用したリアルタイムレプリケーション
Iwasaki Noboru
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Yuji Kubota
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Yuji Kubota
Destaque
(16)
Jvm reading-parallel gc
Jvm reading-parallel gc
0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム
JVM-Reading-ParalleGC
JVM-Reading-ParalleGC
Persistent-Memory-Programming-Model
Persistent-Memory-Programming-Model
Jvm reading-synchronization
Jvm reading-synchronization
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)
SC16 NVIDIA NEWS
SC16 NVIDIA NEWS
Dentoo.LT12 並列処理・MPIの第一歩 20151025
Dentoo.LT12 並列処理・MPIの第一歩 20151025
プログラマ目線から見たRDMAのメリットとその応用例について
プログラマ目線から見たRDMAのメリットとその応用例について
低遅延Ethernetとファブリックによるデータセンタ・ネットワーク
低遅延Ethernetとファブリックによるデータセンタ・ネットワーク
シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例
MPIによる並列計算
MPIによる並列計算
InfiniBand Presentation
InfiniBand Presentation
ioDriceとInfiniBandとDRBDを利用したリアルタイムレプリケーション
ioDriceとInfiniBandとDRBDを利用したリアルタイムレプリケーション
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Semelhante a x86-64/Linuxに独自メモリ空間を勝手増設
PEZY-SC2上における倍々精度Rgemmの実装と評価
PEZY-SC2上における倍々精度Rgemmの実装と評価
Toshiaki Hishinuma
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
えむ ばーど
Let's play with Goldfish
Let's play with Goldfish
Tetsuyuki Kobayashi
仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点
Kuniyasu Suzaki
Open VZ
Open VZ
Kazuaki Fujikura
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
Effective Hyper-V - 久しぶりエディション
Effective Hyper-V - 久しぶりエディション
Kuninobu SaSaki
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
株式会社サードウェア
Windows Server 2019 の Hyper-Converged Infrastructure (HCI)
Windows Server 2019 の Hyper-Converged Infrastructure (HCI)
Hiroshi Matsumoto
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
Takuro Iizuka
MongoDB on AWS
MongoDB on AWS
Ryuji Tamagawa
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
Toru Makabe
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
Masahide Yamamoto
Yet another Intel Chipset Internal SMBus device’s driver: ismt(4)(and spdmem...
Yet another Intel Chipset Internal SMBus device’s driver: ismt(4)(and spdmem...
Masanobu Saitoh
Isca13 study
Isca13 study
Toshiya Komoda
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
Etsuji Nakai
WalBの紹介
WalBの紹介
Takashi Hoshino
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
Mr. Vengineer
Semelhante a x86-64/Linuxに独自メモリ空間を勝手増設
(20)
PEZY-SC2上における倍々精度Rgemmの実装と評価
PEZY-SC2上における倍々精度Rgemmの実装と評価
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
Let's play with Goldfish
Let's play with Goldfish
仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点
Open VZ
Open VZ
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
Effective Hyper-V - 久しぶりエディション
Effective Hyper-V - 久しぶりエディション
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
Windows Server 2019 の Hyper-Converged Infrastructure (HCI)
Windows Server 2019 の Hyper-Converged Infrastructure (HCI)
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
MongoDB on AWS
MongoDB on AWS
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
Yet another Intel Chipset Internal SMBus device’s driver: ismt(4)(and spdmem...
Yet another Intel Chipset Internal SMBus device’s driver: ismt(4)(and spdmem...
Isca13 study
Isca13 study
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
WalBの紹介
WalBの紹介
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
x86-64/Linuxに独自メモリ空間を勝手増設
1.
第七回 カーネル/VM探検隊発表 x86-64/Linuxに独自メモリ空間を勝手増設
中村 実 nminoru1975@gmail.com Twitter @nminoru_jp http://www.nminoru.jp/~nminoru/ 1
2.
自己紹介 • 某電機メーカーのサラリーマンです。 • 01~05
Java VM • 06~10 メインフレームのソフトエミュ レータ • 11 ファイルシステム 2
3.
エミュレータを高速化するに
は? • ゲストとホストでCPUが異なる計算機を想 定 – ARM、MIPS、SPARC、Alphaをx86-64上で実行 • ゲストの仮想メモリがネック – ソフトウェアでエミュレーションすると絶対 的に遅い – ホストのMMUを使ってゲストのメモリ空間を エミュレーションしましょう。 3
4.
ホストMMUをどうやって使う
か? • どうすればいい? 1. OSを自前で作る 2. OSから一部のCPUを切り離して独自処理 3. 既存のOSを改造 このLTではx86-64/Linux上で32ビットCPUを エミュレーションする勝手改造を紹介しま す 4
5.
オレオレVM • Linux仮想メモリ(VM)中に自分専用のVMを!
– https://github.com/nminoru/oleolevm/ x86風の2段のページテーブルを持つCPUを仮定 • 使い方 – /proc/oleolevm を mmap – CPU 命令のインタプリータがロード・ストア – ゲストのTLB ミス・保護違反は SIGSEGV シグナルで通知 Memory Load/Store mmap CPU Interpreter /proc/oleolevm oleolevm SIGSEGV ioctol or syscall 5
6.
どのように改造するか? • Hugetlb を参考に
(`・ω・´) • vm_area_structのvm_flagsを勝手に追加 – /include/linux/mm.h #define VM_HUGETLB 0x00400000 #define VM_OLEOLETLB 0x100000000UL • VM_HUGETLBとis_vm_hugetlb_pageを手掛 かりに追加 if (is_vm_hugetlb_page(vma)) return copy_hugetlb_page_range(dst_mm, src_mm, vma); if (is_vm_oleoletlb_page(vma)) return -ENOMEM; 6
7.
Shadow Page Table(SPT)
• ゲストの仮想メモリ空間をホストのページテーブルに 組み込む。 CR3 oleolevm 0x3,000,000 Guest Virt Space PGD Page 512GB 0x2,000,000 PUD 空き4GB 1GB 写像 0x1,000,000 PMD Guest Phy Space 2MB Page PTE gCR3 ST PT 4KB 0x0,000,000 Page 7
8.
サンプルはここまでで力尽きま
した 8
9.
ゲストCR3を切り替え対応 • ゲストのコンテキストスイッチに応じてSPTの書き換
えが必要 • 毎回破棄するとコスト高なので過去のSPTも保存 – PUDをゲスト仮想空間1つに割り当てると効率がイイ!! CR3 PGD PMD PMD PMD PMD CR3が変更され たら入れ替え PUD PTE PTE PTE PTE 1GB PMD PMD PMD PMD PMD PMD PMD PMD PTE PTE PTE PTE PTE PTE PTE PTE 9
10.
ゲストモード対応 • ゲストにもuser modeとsupervisor
modeがあり アクセス禁止領域が違う • User mode用とsupervisor mode用の空間を分 けてしまえば解決 Guest Virt Space (Supervisor) 空き CPU Interpreter Guest Virt Space (User) 空き Guest Phy Space 10
11.
JITコンパイラ対応 • 高速化のためのJIT Compilation
– Dynamic Binary Translationとも言う • 分岐回数テーブル – 普通はハッシュテーブル Branch Counter Table – オレオレVMならMMUで用意 • 翻訳コードへのlookup table Page カウン タ – これもMMUで用意できる • 翻訳元コードの書込み保護 空き – 書込み保護違反時にカーネル側 Guest Virt Space で翻訳コードの破棄が可能 Page 命令 11
12.
ゲストデバッグ機能対応 • Watchpoint Debug
– 指定したメモリ範囲にアクセスがあったことを検 出 • 問題 – アクセスの補足方法 • x86のdebug registerはエミュは使い辛い • ゲストのwatchpoint範囲をカバーするようにSPTのペー ジにプロテクションを付ける – アドレスの判定 – Watchpointに引っかかったx86命令の再実行方法 12
13.
アドレス判定 • #PF例外はCR2に例外を起こしたメモリアドレ
スを返すが不正確 – movq %rax, [0x0FFE] で #PF がでてもCR2は0x1000に なるかも。 • x86命令をデコードしてアドレスを判定 – struct pt_regsに#PFが起きた時点のレジスタが格納 されている – %ripから16バイトを読み込んで命令をデコード – でもオペコードレベルで400命令以上のデコード が必要 (´;ω;`) 13
14.
再実行 • ゲストのLOAD/STOREは#PF例外補足後に再実
行できないとダメ – でもSPTにプロテクションをかけているよ • x86を1命令エミュレーション – #PFを起こしたx86命令をカーネルランドで1命令 エミュし、pt_regsに結果を書き戻す。%ripも1命 令分続ける。 • x86のSingle Step実行を使う 1. #PFハンドラでSPTのプロテクションを解除し、 EFLAGSにTFを立ててユーザランドに戻る 2. 1命令を実行したら#DB例外が発生 3. SPTのプロテクションを元に戻す 14
15.
まとめ • オレオレVMを使えばx86-64のMMUを全部
使える (`・ω・´) • でもカーネルのリベースが大変 (´;ω;`) • なにかうまい手はありませんか? 15
16.
参考文献 • Jim Smith,
Ravi Nair, Virtual Machines: Versatile Platforms for Systems and Processes 16
17.
清聴ありがとうございまし
た。 17
18.
ここから未使用
18
19.
予約領域を使う • x86/x86-64は#PF例外の種類が少ない • #PF例外時のエラーコード
– Present bit – W/R bit – U/S bit • そうだ!! 予約領域を使おう – RSVD 19
20.
SPTの一貫性(1/2) • ゲストのページテーブルとSPTの一貫性の維
持するには? 1. ゲストのページテーブル領域に書込み保護をか ける 2. 毎回SPTを破棄 3. 毎回SPTをゲストのページテーブルとチェック • x86-64の予約領域を使ってSPTのチェックを 遅延させる方法があるよ – 特許4897578「仮想計算機の制御プログラムおよ び仮想計算機システム」服部 直也ほか 20
21.
SPTの一貫性(2/2) • 予約領域へビットを打った場合「SPTを
チェックしろ」という意味 • RSVD=1の#PF例外をハンドルして検査 • 最初はPGDのreserved bitを打つ。 • #PF例外があがるとPGDのreserved bitを解除し て直下のPUDの512エントリにresreved bitを打 つ。 • 中位のエントリのreserved bitを下位のテーブ ルに写してゆく。 • 最後のPTEのreserved bitを解除する時にゲス トPTEとチェックを行う 21
22.
改造なしで独自メモリ管理 • vm_area_structにvm_opsを設定 static
int foo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) { vmf->page = page; // ここにロジックを入れる } static struct vm_operations_struct foo_vm_ops = { .fault = foo_vm_fault, }; static int foo_mmap(struct file *filp, struct vm_area_struct *vma) { vma->vm_ops = &foo_vm_ops; } static struct file_operations foo_fops = { .mmap = foo_mmap, }; 22
23.
X86-64の仮想メモリは将来拡張さ
れるか? • U.S. Patent 6,671,791 Processor including a translation unit for selectively translating virtual addresses of different sizes using a plurality of paging tables and mapping mechanisms 23
Baixar agora