サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブラックフライデー
retrage01.hateblo.jp
元ネタ: https://yasukata.hatenablog.com/entry/2021/10/14/145642 せっかちな人向け ARM64向けの高速なシステムコールフックを作った マイクロベンチマークではptraceの2000倍以上、seccompの140倍程度高速 コードはこちら: https://github.com/retrage/svc-hook zpolineとは USENIX ATC 2023において、zpolineというx86/Linux向けの高速なシステムコールフックが提案された[1]。これは、binary rewritingで2バイトの命令である syscallやsysenterを同じ2バイト命令であるcallq *%raxに置き換えた上で0x0のアドレスにトランポリンを設置する、というものである。 同じような仕組みを他のアーキテクチャでも実現だろうか?という
Alder Lake以降のIntel CPUでは、P-coreとE-coreの2種類のコアが搭載されている。 P-coreは性能重視、E-coreは省電力重視という位置づけで、OSがうまくこれらのコアを使い分けることで、消費電力と性能の両立が図られている。 ここまでの話は広く知られているが、実際にどのようにしてOSに対してコアの使い分けをさせているのかの実装レベルでの解説は (少なくとも日本語では) ほぼ存在しないようなので調べてみた。 OSから見たP-coreとE-core OSの役割の一つとしてプロセススケジューリングがあり、どのプロセスをいつどれぐらいの期間どのCPUコアで実行するかを決める。OSができるだけ効率よくプロセスをスケジューリングするためには、CPUコアの性能や消費電力の違いを考慮したスケジューリングが必要になる。そこで、Intel CPUではOSに対して次の2つの情報を
Apple File System (APFS)はAppleが自社製品向けに開発したファイルシステムである.APFSの仕様は公開されており以下で参照できる. https://developer.apple.com/support/downloads/Apple-File-System-Reference.pdf その目次の中で特に興味を引いたのが"EFI Jumpstart"の章である.現代的なデバイスではEFIを含めブートローダはファイルシステムを参照してOSを起動する.このとき当然ながらブートローダはそのファイルシステムを扱える必要がある.特にEFIでは仕様上対応していなければならないのはEFI System Partition (ESP)で使われるFATのみでその他のファイルシステムが事前にサポートされていることは期待できない.このため例えばWindowsであればESPに配置されたW
UEFI向け9P File Systemを実装した. これにより9Pサーバからネットワークブートができるようになった. さらにFUSEと組み合わせることで少ない労力で9Pサーバ経由で クラウドからネットワークブートができるようになった. ソースコードと発表資料と発表の録画は以下で公開している. https://github.com/yabits/9pfsPkg https://speakerdeck.com/retrage/network-boot-from-bell-labs https://youtu.be/3PX19nWrygQ ネットワークブート 通常OSを起動するときBIOSはローカルディスクにアクセスしてブートイメージをロードする. ネットワークブートではローカルディスクの代わりにネットワーク上のサーバからブートイメージをロードする. これを実現するためにBIOSはネットワーク
Linux kernelをUnikraftのライブラリ化した. これにより機能の少ないUnikernelの資源として Linux kernelの持つ機能を利用することが可能となる. 背景 Linux Kernel Library Linux kernelはよくメンテナンスされている成熟した オープンソースなOSの代表であるが, 近年その機能を効率よく再利用しようとする動きがある. Linux Kernel Library (LKL) はその一つであり, 最小限のコストでLinux kernelをanykernelと呼ばれる 形態のLibrary OSとして利用するものである. LKLは現在公式のLinux kernelには含まれていないが 活発に開発がなされており, 現時点でv4.19がサポートされている. 以下にLKLの構成を示す. LKLの構成 LKLはlklというホスト非依存なアーキ
この記事は Linux Advent Calendar 2018 の20日目の記事として書かれた. ここではLinux kerenlにおけるEFI Variableのコードをみていく. EFI Variableとは UEFIでは,EFI varibale(EFI変数)というものが存在する. これは不揮発性メモリ(NVRAM)に値が書き込まれるため, 電源を切っても値が失われることなく保存される. EFI Variableは起動時の起動の順番などが保存される. UEFIにはEFI Variablesへの読み書きを行うための機能が Runtime Servicesに存在する. このため後述するように,OSの起動後もEFI Variableが Runtime Servicesを通して利用可能となっている. 関連する関数は具体的には以下の4つである. GetVariables GetNextVar
本記事は2018年11月10日に開催されたkernelvm 北陸 Part4において 発表した内容[10]をまとめたものである. ここではUEFIの持つ独自のバイトコードであるEFI Byte CodeとそのVMについてみていく. EFI Byte Codeとは UEFI Specification v2.7によれば, EFI Byte Code (EBC)について platform- and processor-independent mechanisms for loading and executing EFI device drivers とある. つまり,OSなどのplatform非依存かつ,processor非依存な EFI device driverを読み込み,実行するための仕組み,ということである. EBCはPCI Express (PCIe)のOptionROM (ORO
Linux kernelを直接JavaScript上で動かした. つまり,JSLinuxのようにEmulatorをJavaScriptで作成し, その上でLinuxを動かすのではなく, JavaScriptで書かれたLinuxを生成し,それを動かす,ということである. LKL.js Architecture リポジトリは以下の通り. https://github.com/retrage/linux/tree/retrage/em-v2 なお lkl.js Demo にデモを用意した. SharedArrayBufferを有効にして試してみてほしい. Linux Kernel Library (LKL) ここでは,Linux kernelをLibrary OSの形態の1つであるAnykernelにする Linux Kernel Library (LKL)を利用する. LKLはLinux ke
この記事はLinux Advent Calendar 14日目の記事として書かれた. 本記事ではLinuxにおける5-Level Paging(la57 paging)の実装を見ていく. 5-Level Pagingとは これまで,x86_64では物理アドレス下位48bitのみが使用されてきた. このため,64TiBの物理アドレス空間と256TiBの仮想アドレス空間に限られてきた. Intelはこれを拡張し,物理アドレス下位56bitへと拡張させた. これにより,4PiBの物理アドレス空間と128PiBの仮想アドレス空間が利用できるようになった. この拡張に対応するため新たに導入されたのが,ここで紹介する5-Level Pagingである. 基本的な考え方は4-Level Pagingと同一であり, PML4にさらに上位にPML5が追加された形となっている. サポート状況について 現在,一
LLVMはよく知られてるコンパイラ基盤であり, 中間表現としてLLVM IRを持っている. 様々なところでこのLLVM IRが使われているが, 今まで触ってこなかったということもあり, 今回LLVM IRで何かしら遊んでみようと思っていた. itchyny.hatenablog.com 最近になって,上記のようなBrainF**kを題材にLLVM IRを出力するような 記事が上がっており,こちらの記事に刺激を受け, ELVMのLLVM IRバックエンドを作成した. じつは,以前に,Luaバックエンドを作成していた. ほとんどPythonバックエンドと同等であり,Luaを書いた経験はなかったにもかかわらず, 調べるのに使った時間を含めても2時間足らずで実装できたと記憶している. なお,先日電気通信大学のMMA主催のDentoo.LTにおいて 本バックエンドについて発表を行なった. 本稿は発表
このページを最初にブックマークしてみませんか?
『Blog posts by @retrage』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く