Enviar pesquisa
Carregar
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
•
7 gostaram
•
2,912 visualizações
Takuya ASADA
Seguir
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 35
Baixar agora
Baixar para ler offline
Recomendados
BHyVeってなんや
BHyVeってなんや
Takuya ASADA
Bhyve code reading
Bhyve code reading
Takuya ASADA
BHyVe: The BSD Hypervisor
BHyVe: The BSD Hypervisor
Takuya ASADA
Bhyve Internals
Bhyve Internals
Takuya ASADA
軽快なBHyVe
軽快なBHyVe
Takuya ASADA
UEFI時代のブートローダ
UEFI時代のブートローダ
Takuya ASADA
KVM+cgroup
KVM+cgroup
(^-^) togakushi
KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)
KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)
株式会社サードウェア
Recomendados
BHyVeってなんや
BHyVeってなんや
Takuya ASADA
Bhyve code reading
Bhyve code reading
Takuya ASADA
BHyVe: The BSD Hypervisor
BHyVe: The BSD Hypervisor
Takuya ASADA
Bhyve Internals
Bhyve Internals
Takuya ASADA
軽快なBHyVe
軽快なBHyVe
Takuya ASADA
UEFI時代のブートローダ
UEFI時代のブートローダ
Takuya ASADA
KVM+cgroup
KVM+cgroup
(^-^) togakushi
KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)
KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)
株式会社サードウェア
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
Free bsd jail入門
Free bsd jail入門
Tsubasa Nomura
Open VZ
Open VZ
Kazuaki Fujikura
Lxc cf201207-presen
Lxc cf201207-presen
Kouhei Maeda
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
Kazuyuki Sato
CUDAメモ
CUDAメモ
Yuuki Takano
Trema での Open vSwitch
Trema での Open vSwitch
kazuyas
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像
Sho Shimizu
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
Masahide Yamamoto
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
Go Saito
Memory sanitizer
Memory sanitizer
MITSUNARI Shigeo
Eucalyptus on OpenStack
Eucalyptus on OpenStack
irix_jp
あるmmapの話
あるmmapの話
nullnilaki
Kernel fcache-bug
Kernel fcache-bug
MITSUNARI Shigeo
あるキャッシュメモリの話
あるキャッシュメモリの話
nullnilaki
NetBSD on Google Compute Engine
NetBSD on Google Compute Engine
Ryo ONODERA
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0
Satoshi Kume
ゆるバグ
ゆるバグ
MITSUNARI Shigeo
GUNDAM ROCK
GUNDAM ROCK
Conrad Collins
PCA10 Heres a Scenario For You
PCA10 Heres a Scenario For You
Paul Teich
Mais conteúdo relacionado
Mais procurados
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
Free bsd jail入門
Free bsd jail入門
Tsubasa Nomura
Open VZ
Open VZ
Kazuaki Fujikura
Lxc cf201207-presen
Lxc cf201207-presen
Kouhei Maeda
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
Kazuyuki Sato
CUDAメモ
CUDAメモ
Yuuki Takano
Trema での Open vSwitch
Trema での Open vSwitch
kazuyas
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像
Sho Shimizu
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
Masahide Yamamoto
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
Go Saito
Memory sanitizer
Memory sanitizer
MITSUNARI Shigeo
Eucalyptus on OpenStack
Eucalyptus on OpenStack
irix_jp
あるmmapの話
あるmmapの話
nullnilaki
Kernel fcache-bug
Kernel fcache-bug
MITSUNARI Shigeo
あるキャッシュメモリの話
あるキャッシュメモリの話
nullnilaki
NetBSD on Google Compute Engine
NetBSD on Google Compute Engine
Ryo ONODERA
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0
Satoshi Kume
ゆるバグ
ゆるバグ
MITSUNARI Shigeo
Mais procurados
(20)
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Free bsd jail入門
Free bsd jail入門
Open VZ
Open VZ
Lxc cf201207-presen
Lxc cf201207-presen
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
CUDAメモ
CUDAメモ
Trema での Open vSwitch
Trema での Open vSwitch
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
Memory sanitizer
Memory sanitizer
Eucalyptus on OpenStack
Eucalyptus on OpenStack
あるmmapの話
あるmmapの話
Kernel fcache-bug
Kernel fcache-bug
あるキャッシュメモリの話
あるキャッシュメモリの話
NetBSD on Google Compute Engine
NetBSD on Google Compute Engine
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0
ゆるバグ
ゆるバグ
Destaque
GUNDAM ROCK
GUNDAM ROCK
Conrad Collins
PCA10 Heres a Scenario For You
PCA10 Heres a Scenario For You
Paul Teich
Winslow overview june 12 2013
Winslow overview june 12 2013
vbullara
Driving And Mobiles Don\'t Mix
Driving And Mobiles Don\'t Mix
Alan Bassett
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
Lixun Peng
Kelly ruggles
Kelly ruggles
Kelly Ruggles
Content Quality Checklist By Heidi Cohen of Actionable Marketing Guide
Content Quality Checklist By Heidi Cohen of Actionable Marketing Guide
Heidi Cohen
Best photos cnn 2004
Best photos cnn 2004
verka 123
When worlds collide - leveraging learning content as brand experience
When worlds collide - leveraging learning content as brand experience
Brightwave Group
Astronomy
Astronomy
Ramaswamy Ramakrishnan
Google Suppression Attack Lost Blogging Files
Google Suppression Attack Lost Blogging Files
Carl Ocab
Ud22
Ud22
guest32f0fe9
Workshop webcollege - cursus didactiek
Workshop webcollege - cursus didactiek
Jurjen Helmus
Good Health And Safety
Good Health And Safety
Alan Bassett
Making Learning Alive
Making Learning Alive
Brightwave Group
Genkidama:実装と課題
Genkidama:実装と課題
Takuya ASADA
A Message To Starbucks
A Message To Starbucks
AJBlumenfeld
Cool Tools
Cool Tools
Goodnight Memorial Library
Open sourcelibrary
Open sourcelibrary
Goodnight Memorial Library
B E L G R A D E
B E L G R A D E
verka 123
Destaque
(20)
GUNDAM ROCK
GUNDAM ROCK
PCA10 Heres a Scenario For You
PCA10 Heres a Scenario For You
Winslow overview june 12 2013
Winslow overview june 12 2013
Driving And Mobiles Don\'t Mix
Driving And Mobiles Don\'t Mix
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
Kelly ruggles
Kelly ruggles
Content Quality Checklist By Heidi Cohen of Actionable Marketing Guide
Content Quality Checklist By Heidi Cohen of Actionable Marketing Guide
Best photos cnn 2004
Best photos cnn 2004
When worlds collide - leveraging learning content as brand experience
When worlds collide - leveraging learning content as brand experience
Astronomy
Astronomy
Google Suppression Attack Lost Blogging Files
Google Suppression Attack Lost Blogging Files
Ud22
Ud22
Workshop webcollege - cursus didactiek
Workshop webcollege - cursus didactiek
Good Health And Safety
Good Health And Safety
Making Learning Alive
Making Learning Alive
Genkidama:実装と課題
Genkidama:実装と課題
A Message To Starbucks
A Message To Starbucks
Cool Tools
Cool Tools
Open sourcelibrary
Open sourcelibrary
B E L G R A D E
B E L G R A D E
Semelhante a BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
as-5. サブルーチン呼び出しのメカニズム
as-5. サブルーチン呼び出しのメカニズム
kunihikokaneko1
仮想記憶の構築法
仮想記憶の構築法
magoroku Yamamoto
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
Ryo Sakamoto
カジュアルにソースコードリーディング
カジュアルにソースコードリーディング
Akihiro Okuno
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
android sola
Cpu cache arch
Cpu cache arch
Shinichiro Niiyama
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
Takuro Iizuka
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Masahiro Nagano
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
Hayato Mizuno
Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~
Kazunari Hara
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動
Tech Summit 2016
Aaなゲームをjsで
Aaなゲームをjsで
Moriyoshi Koizumi
Aaなゲームをjsで
Aaなゲームをjsで
Moriyoshi Koizumi
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
NTT DATA OSS Professional Services
From IA-32 to avx-512
From IA-32 to avx-512
MITSUNARI Shigeo
Semelhante a BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
(20)
LLVM最適化のこつ
LLVM最適化のこつ
x86とコンテキストスイッチ
x86とコンテキストスイッチ
as-5. サブルーチン呼び出しのメカニズム
as-5. サブルーチン呼び出しのメカニズム
仮想記憶の構築法
仮想記憶の構築法
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
カジュアルにソースコードリーディング
カジュアルにソースコードリーディング
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
Cpu cache arch
Cpu cache arch
C++でHello worldを書いてみた
C++でHello worldを書いてみた
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動
Aaなゲームをjsで
Aaなゲームをjsで
Aaなゲームをjsで
Aaなゲームをjsで
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
From IA-32 to avx-512
From IA-32 to avx-512
Mais de Takuya ASADA
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
Takuya ASADA
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Takuya ASADA
高スループットなサーバアプリケーションの為の新しいフレームワーク 「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク 「Seastar」
Takuya ASADA
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜
Takuya ASADA
OSvのご紹介 in Java 8 HotSpot meeting
OSvのご紹介 in Java 8 HotSpot meeting
Takuya ASADA
OSvパンフレット v3
OSvパンフレット v3
Takuya ASADA
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/Fall
Takuya ASADA
OSv噺
OSv噺
Takuya ASADA
OSvの概要と実装
OSvの概要と実装
Takuya ASADA
Linux network stack
Linux network stack
Takuya ASADA
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
Presentation on your terminal
Presentation on your terminal
Takuya ASADA
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
Takuya ASADA
Interrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
OSvパンフレット
OSvパンフレット
Takuya ASADA
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2
Takuya ASADA
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1
Takuya ASADA
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
Takuya ASADA
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Takuya ASADA
仮想化環境での利用者公平性
仮想化環境での利用者公平性
Takuya ASADA
Mais de Takuya ASADA
(20)
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
高スループットなサーバアプリケーションの為の新しいフレームワーク 「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク 「Seastar」
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜
OSvのご紹介 in Java 8 HotSpot meeting
OSvのご紹介 in Java 8 HotSpot meeting
OSvパンフレット v3
OSvパンフレット v3
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/Fall
OSv噺
OSv噺
OSvの概要と実装
OSvの概要と実装
Linux network stack
Linux network stack
Ethernetの受信処理
Ethernetの受信処理
Presentation on your terminal
Presentation on your terminal
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
Interrupt Affinityについて
Interrupt Affinityについて
OSvパンフレット
OSvパンフレット
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
仮想化環境での利用者公平性
仮想化環境での利用者公平性
Último
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Último
(11)
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
1.
BHyVeでOSvを起動したい ∼BIOSがなくてもこの先生 きのこるには∼ @syuu1228
2.
これまでのおさらい • BHyVeいじってます • OSvいじりはじめました • BHyVeでOSvを起動したい • BIOSが無いから起動しない!(いつもの流れ
3.
OSvとは? • 仮想化環境上で特定(Java)アプリケーションを効率よく実行す る事に特化したOS • Cloudis
Systemsが開発 KVMを開発したQumranetのメンバー Avi KivityがCTO • KVM, Xenで動く→Amazon EC2へデプロイ可能 • BSDライセンス • http://osv.io/ • https://github.com/cloudius-systems/osv
4.
BHyVeとは? • FreeBSD版のLinux KVMのようなもの • カーネル側ドライバ・ユーザランドプログラム共にFreeBSD baseツリー上で開発 されている • Intel
VTを用いたハイパーバイザ • KVMと異なりユーザランド側 • FreeBSD 10.0 RELEASEで同梱 • ゲストOSとしてFreeBSD, Linux, OpenBSDが起動 (但しx86_64版のOSのみ) • http://bhyve.org/ • 詳しくは私のSoftwareDesignの連載を読んで下さい
5.
OSvのブートコードを読んで BHyVe用のOSローダを書こう • OSvのブートコードはこの辺 • • • https://github.com/cloudius-systems/osv/blob/ master/arch/x64/boot16.S https://github.com/cloudius-systems/osv/blob/ master/arch/x64/boot.S 書いてみたBHyVe用OSローダはこちら • https://github.com/syuu1228/bhyveosvload
6.
ゲストOSのダイレクトブート とは • KVMではqemu -kernel vmlinuz
-initrd initrd.img • BHyVeではbhyveloadコマンド • ホストOS上でゲストマシンにFreeBSDカーネル をロードし各種レジスタやページテーブルを初期 化している • ゲストマシンはbhyveコマンド実行時に64bitの エントリポイントから実行される
7.
BIOSを用いる従来のブートプ ロセス • BIOSがMBRからブートセクタをロード • ブートセクタはBIOSコールを用いてブートローダをロード& 実行 • ブートローダはページテーブルやレジスタを初期化 • ブートローダはファイルシステムからカーネルを探して読み込 み(IOにはBIOSコールを使用) • ブートローダはCPUを64bitモードに切り替えてカーネルの 64bitエントリポイントへジャンプ
8.
ダイレクトブート時のブートプ ロセス • ユーザはホストOS上でゲストOSローダを実行 • ゲストOSローダはゲストマシンのページテーブルや ゲストマシンのレジスタを初期化 • ゲストOSローダはゲストOSディスクイメージから カーネルを探して読み込み • ゲストOSローダは仮想CPUを64bitモードに切り替 えてカーネルの64bitエントリポイントへジャンプ
9.
具体的にはどう実装するのか? (1) • コンソールへの文字列表示(ブートローダではINT10h) printf() • ディスクの読み込み(ブートローダではINT13h) fd = open(disk_image) read(fd,
buf, len) • メモリへの書き込み ctx = vm_open(vm_name) ptr = vm_map_gpa(ctx, offset, len) memcpy(ptr, data, len)
10.
具体的にはどう実装するのか? (2) • レジスタへの書き込み(セグメントレジスタ以外) ctx = vm_open(vm_name) vm_set_register(ctx,
cpuno, VM_REG_GUEST_RFLAGS, val) • レジスタへの書き込み(セグメントレジスタ) ctx = vm_open(vm_name) vm_set_desc(ctx, cpuno, VM_REG_GUEST_CS, base, limit, access) vm_set_register(ctx, cpuno, VM_REG_GUEST_CS, selector)
11.
ここからboot16.Sを翻訳開始 • https://github.com/cloudius-systems/osv/blob/master/arch/ x64/boot16.S • MBR上のブートセクタに存在 • ここでやっていること • ディスクからカーネル引数をロード • ディスクからカーネルのELFバイナリをロード • BIOSからメモリマップを取得 • カーネルの32bitエントリポイントへエントリ
12.
disk image layout nsectors 0 1 MBR
(boot16.S) cmdline • 汎用ブートローダを使わないこと によりブート時間短縮 64 blank? 128 loader.elf • カーネル引数/ELFバイナリを直接 ディスクに書いている • ブートローダはELFバイナリのエン トリポイントへ自力でジャンプ bootfs (bootfs.manifest) • カーネル引数、メモリサイズの情 報はメモリ上に置いてmultibootと 互換性のある形式でカーネルに渡 す 262144 ZFS (usr.manifest)
13.
ブートコードを翻訳(1) cmdline load cmdline =
0x7e00 ! mb_info = 0x1000 mb_cmdline = (mb_info + 16) ! int1342_boot_struct: # for command line ← DAP .byte 0x10 ← size of DAP .byte 0 ← unused .short 0x3f # 31.5k ← number of sectors to be read .short cmdline ← segment:offset pointer to the memory buffer(offset側) .short 0 ←(segment側) .quad 1 ← absolute number of the start of the sectors to be read ! init: xor %ax, %ax mov %ax, %ds ← DS = 0 ! lea int1342_boot_struct, %si ← DS:SIでDAPを指定 mov $0x42, %ah mov $0x80, %dl int $0x13 ← INT 13h AH=42h: Extended Read Sectors From Drive movl $cmdline, mb_cmdline ← mb_info-‐>mb_cmdlineに0x7e00を代入
14.
15.
ブートコードを翻訳(1) cmdline load char *cmdline;
struct multiboot_info_type *mb_info; ! cmdline = vm_map_gpa(ctx, 0x7e00, 1 * 512); pread(disk_fd, cmdline, 0x3f * 512, 1 * 512); ! mb_info = vm_map_gpa(ctx, 0x1000, sizeof(*mb_info)); mb_info-‐>cmdline = 0x7e00;
16.
ブートコードを翻訳(2) kernel load tmp =
0x80000 count32: .short 4096 # in 32k units, 4096=128MB int1342_struct: .byte 0x10 .byte 0 .short 0x40 # 32k .short 0 .short tmp / 16 lba: .quad 128 ! read_disk: lea int1342_struct, %si mov $0x42, %ah mov $0x80, %dl int $0x13 jc done_disk cli lgdtw gdt mov $0x11, %ax lmsw %ax ljmp $8, $1f 1: .code32 mov $0x10, %ax mov %eax, %ds mov %eax, %es mov $tmp, %esi mov xfer, %edi mov $0x8000, %ecx rep movsb mov %edi, xfer mov $0x20, %al mov %eax, %ds mov %eax, %es ljmpw $0x18, $1f 1: .code16 mov $0x10, %eax mov %eax, %cr0 ljmpw $0, $1f 1: xor %ax, %ax mov %ax, %ds mov %ax, %es sti addl $(0x8000 / 0x200), lba decw count32 jnz read_disk ← count32回ループ done_disk:
17.
ブートコードを翻訳(2) kernel load char *target;
! target = vm_map_gpa(ctx, 0x200000, 1 * 512); pread(disk_fd, target, 0x40 * 4096 * 512, 128 * 512);
18.
ブートコードを翻訳(3) e820 mb_info = 0x1000
mb_mmap_len = (mb_info + 44) mb_mmap_addr = (mb_info + 48) e820data = 0x2000 ! mov $e820data, %edi ← ES:DI Buffer Pointer mov %edi, mb_mmap_addr ← mb_info-‐>mb_mmap_addrに0x2000を代入 xor %ebx, %ebx ← Continuation more_e820: mov $100, %ecx ← Buffer Size mov $0x534d4150, %edx ← Signature 'SMAP' mov $0xe820, %ax add $4, %edi int $0x15 ← INT 15h, AX=E820h -‐ Query System Address Map jc done_e820 mov %ecx, -‐4(%edi) add %ecx, %edi test %ebx, %ebx jnz more_e820 done_e820: sub $e820data, %edi mov %edi, mb_mmap_len ← mb_info-‐>mb_mmap_lenにe820dataのサイズを代入
19.
ブートコードを翻訳(3) e820 struct e820ent *e820data;
! e820data = vm_map_gpa(ctx, 0x1100, sizeof(struct e820ent) * 3); e820data[0].ent_size = 20; e820data[0].addr = 0x0; e820data[0].size = 654336; e820data[0].type = 1; e820data[1].ent_size = 20; e820data[1].addr = 0x100000; e820data[1].size = mem_size -‐ 0x100000; e820data[1].type = 1; e820data[2].ent_size = 20; e820data[2].addr = 0; e820data[2].size = 0; e820data[2].type = 0; ! mb_info-‐>mmap_addr = 0x1100; mb_info-‐>mmap_length = sizeof(struct e820ent) * 3;
20.
ブートコードを翻訳(4) entry to protected
mode cmdline = 0x7e00 target = 0x200000 entry = 24+target mb_info = 0x1000 ! ljmp $8, $1f 1: .code32 mov $0x10, %ax mov %eax, %ds mov %eax, %es mov %eax, %gs mov %eax, %fs mov %eax, %ss mov $target, %eax ← 0x200000をeaxに設定 mov $mb_info, %ebx ← 0x1000をebxに設定 jmp *entry ← 32bit protected modeのコードを動かすつもりはないので無視
21.
ブートコードを翻訳(4) entry to protected
mode vm_set_register(ctx, 0, VM_REG_GUEST_EAX, 0x200000); vm_set_register(ctx, 0, VM_REG_GUEST_EBX, 0x1000);
22.
ここからboot.Sを翻訳開始 • https://github.com/cloudius-systems/osv/ blob/master/arch/x64/boot.S • カーネルの32bitエントリポイントに存在 • ここでやっていること • GDT, ページテーブルなどを用意してlong modeへ切り替え
23.
ブートコードを翻訳(5) GDTの初期化 gdt_desc:
.short gdt_end -‐ gdt -‐ 1 .long gdt ! .align 8 gdt = . -‐ 8 .quad 0x00af9b000000ffff # 64-‐bit code segment .quad 0x00cf93000000ffff # 64-‐bit data segment .quad 0x00cf9b000000ffff # 32-‐bit code segment gdt_end = . ! lgdt gdt_desc
24.
ブートコードを翻訳(5) GDTの初期化 /* gdtrは空いてそうな適当な領域に置く */ uint64_t
*gdtr = vm_map_gpa(ctx, 0x5000, sizeof(struct uint64_t) * 4); gdtr[0] = 0x0; gdtr[1] = 0x00af9b000000ffff; gdtr[2] = 0x00cf93000000ffff; gdtr[3] = 0x00cf9b000000ffff; vm_set_desc(ctx, 0, VM_REG_GUEST_GDTR, gdtr, sizeof(struct uint64_t) * 4 -‐ 1, 0);
25.
ブートコードを翻訳(6) ページテーブルの初期化 .data .align 4096
ident_pt_l4: .quad ident_pt_l3 + 0x67 .rept 511 .quad 0 .endr ident_pt_l3: .quad ident_pt_l2 + 0x67 .rept 511 .quad 0 .endr ident_pt_l2: index = 0 .rept 512 .quad (index << 21) + 0x1e7 index = index + 1 .endr ! lea ident_pt_l4, %eax mov %eax, %cr3
26.
ブートコードを翻訳(6) ページテーブルの初期化 uint64_t *PT4; uint64_t *PT3; uint64_t
*PT2; /* PT4-‐2は空いてそうな適当な領域に置く */ PT4 = vm_map_gpa(ctx, 0x4000, sizeof(uint64_t) * 512); PT3 = vm_map_gpa(ctx, 0x3000, sizeof(uint64_t) * 512); PT2 = vm_map_gpa(ctx, 0x2000, sizeof(uint64_t) * 512); for (i = 0; i < 512; i++) { PT4[i] = (uint64_t) ADDR_PT3; PT4[i] |= PG_V | PG_RW | PG_U; PT3[i] = (uint64_t) ADDR_PT2; PT3[i] |= PG_V | PG_RW | PG_U; PT2[i] = i * (2 * 1024 * 1024); PT2[i] |= PG_V | PG_RW | PG_PS | PG_U; } vm_set_register(ctx, 0, VM_REG_GUEST_CR3, 0x4000);
27.
ブートコードを翻訳(7) 各種レジスタの設定 #define BOOT_CR0 (
X86_CR0_PE | X86_CR0_WP | X86_CR0_PG ) ! #define BOOT_CR4 ( X86_CR4_DE | X86_CR4_PSE | X86_CR4_PAE | X86_CR4_PGE | X86_CR4_PCE | X86_CR4_OSFXSR | X86_CR4_OSXMMEXCPT ) and $~7, %esp mov $BOOT_CR4, %eax mov %eax, %cr4 ← PAE有効など mov $0xc0000080, %ecx mov $0x00000900, %eax xor %edx, %edx wrmsr ← EFERのLMEフラグを立てている mov $BOOT_CR0, %eax mov %eax, %cr0 ← PE,PG有効など ljmpl $8, $start64 .code64 .global start64 start64:
28.
ブートコードを翻訳(7) 各種レジスタの設定 vm_set_register(ctx, 0, VM_REG_GUEST_RSP,
ADDR_STACK); vm_set_register(ctx, 0, VM_REG_GUEST_EFER, 0x00000d00); vm_set_register(ctx, 0, VM_REG_GUEST_CR4, 0x000007b8); vm_set_register(ctx, 0, VM_REG_GUEST_CR0, 0x80010001);
29.
ブートコードを翻訳(8) 64bitエントリポイント #define BOOT_CR0 (
X86_CR0_PE | X86_CR0_WP | X86_CR0_PG ) ! #define BOOT_CR4 ( X86_CR4_DE | X86_CR4_PSE | X86_CR4_PAE | X86_CR4_PGE | X86_CR4_PCE | X86_CR4_OSFXSR | X86_CR4_OSXMMEXCPT ) and $~7, %esp mov $BOOT_CR4, %eax mov %eax, %cr4 mov $0xc0000080, %ecx mov $0x00000900, %eax xor %edx, %edx wrmsr mov $BOOT_CR0, %eax mov %eax, %cr0 ljmpl $8, $start64 .code64 .global start64 ← ここをRIPにしたい start64:
30.
あっ… • このアドレス、リンカで固定されたりしてない …どうしよ…
31.
よーしパパELFパーサ使っちゃ うぞー elf(3)、gelf(3)を使って関数名→アドレスの変換コー ドを実装 int elfparse_open_memory(char *image,
size_t size, struct elfparse *ep); int elfparse_close(struct elfparse *ep); uintmax_t elfparse_resolve_symbol(struct elfparse *ep, char *name);
32.
ブートコードを翻訳(8) 64bitエントリポイント struct elfparse ep; uint64_t
start64; if (elfparse_open_memory(target, 0x40 * 4096 * 512, &ep)); start64 = elfparse_resolve_symbol(&ep, "start64"); vm_set_register(ctx, 0, VM_REG_GUEST_RIP, start64);
33.
完成! # /usr/local/sbin/bhyveosvload -‐m
1024 -‐d ../loader.img osv0 sizeof e820data=48 cmdline=java.so -‐jar /usr/mgmt/web-‐1.0.0.jar app prod start64:0x208f13 ident_pt_l4:0x8d5000 gdt_desc:0x8d8000 # /usr/sbin/bhyve -‐c 1 -‐m 1024 -‐AI -‐H -‐P -‐g 0 -‐s 0:0,hostbridge -‐s 1:0,virtio-‐net,tap0 -‐s 2:0,virtio-‐blk,../loader.img -‐S 31,uart,stdio osv0 ACPI: RSDP 0xf0400 00024 (v02 BHYVE ) ACPI: XSDT 0xf0480 00034 (v01 BHYVE BVXSDT 00000001 INTL 20130823) ACPI: APIC 0xf0500 0004A (v01 BHYVE BVMADT 00000001 INTL 20130823) ACPI: FACP 0xf0600 0010C (v05 BHYVE BVFACP 00000001 INTL 20130823) ACPI: DSDT 0xf0800 000F2 (v02 BHYVE BVDSDT 00000001 INTL 20130823) ACPI: FACS 0xf0780 00040 Assertion failed: st == AE_OK (../../drivers/hpet.cc: hpet_init: 171) Aborted
34.
デモ
35.
まとめ • ブートローダを注意深く読み解けば簡素なCコードで実装され たホストOSで動作するゲストOSローダへ翻訳可能である • BIOSなんて要らなかった • UEFIなんて要らなかった • libvmmapiのbindingさえあればスクリプト言語でも実装しう る • 実は汎用OSローダとかも開発されつつある https://github.com/grehan-freebsd/grub2-bhyve
Baixar agora