サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
中東情勢
valinux.hatenablog.com
はじめに Wasmの特徴 仮想マシン実行環境 スタック 関数 グローバル変数 メモリ テーブル 命令セット データ型 数値演算 ベクトル演算 変数、メモリ、テーブルアクセス 制御フロー ランタイムとのインタフェース バイナリフォーマット タイプ インポート 関数 テーブル メモリ グローバル エクスポート スタート エレメント データ 終わりに 執筆者 : 小田 逸郎 はじめに WebAssembly(以下、Wasm)というものが世間で話題となっているようです。 元々、Webブラウザで実行されるバイトコードであるという程度の認識で、Java みたいなものか(?)くらいの感想しかなく、あまり関心はなかったのでした。 しかしながら、最近、Kubernetesでコンテナの代わりにWasmアプリケーション を扱えるような記述を見かけるに至り、「は?(なんじゃそりゃ)」と、 にわかに関心が出てきたの
1. 静的コード解析 2. Infer 3. 調査環境 4. Inferのビルド 5. Inferで解析できるようにLinuxカーネルソースコードに少し修正を加える 6. LinuxカーネルソースコードをInferで検証 7. 解析結果に対する精査の一例 7.1. 真のバグの例 7.2. フォールスポジティブの例 7.3. 真のバグか判断に困るものの例 8. 結論とこれから 執筆者 : 岡部 究 1. 静的コード解析 普段の開発で品質向上させるためにどのような手法を採用されているでしょうか。おそらくユニットテストや結合テストを代表するテストを使っているのではないでしょうか。 このテスト手法は現実的ですがざっと挙げるだけでも以下の課題があります: 入力と出力をテストケースと呼ばれる例として与えるので全ての場合を網羅することは不可能 テストの網羅率を上げるにはユニットテストのような小さい単位で
1. 細々とした予備知識 1.1 Qemuのデバイスエミュレーション 1.2 QemuのCPUエミュレーション 1.3 Qemuのスレッド 2. 追加のI/OスレッドとAioContext 2.1 追加のI/Oスレッド 2.2 AioContext 2.3 Big Qemu Lock 3. AioContextの各種イベント処理 3.1 AioHandler 3.2 event_notifier 3.3 タイマー、Bottom half 3.5 スレッドプール 執筆者 : 箕浦 真 こういう 仕事をしていると、ときどきQemuの仕組みや内部動作をお客様に説明する必要があることがあるが、そういう時に「Qemuの〜についてはここを見てね」と言えるような文書があるといいなぁと思って自分で作ってみることにした。 1. 細々とした予備知識 1.1 Qemuのデバイスエミュレーション Qemuはコンピ
はじめに 環境の準備 ブートプログラム 例外レベル 例外動作の概要 TrustZone ベクタテーブルの設定 AArch64ステートの設定 スタックポインタ設定 例外レベルの遷移 EL1での動作 メモリ配置 コンパイル QEMU上で起動 GDBで制御 最後に 執筆者 : 原田 秀一 はじめに 現在ArmアーキテクチャのCPUは採用も多く情報も溢れていますが、改めてARMv8-Aアーキテクチャでの64bit環境(AArch64)でのブートプログラム作成についてまとめます。 ブート処理の内容は過去記事 RISC-V OSを作ろう (1) ~ブート処理 - VA Linux エンジニアブログ と同様にOSを動かす土台とできるようにします。 環境の準備 ツールチェーンはArmが提供しているものを使用しました。 https://developer.arm.com/downloads/-/arm-gn
1. はじめに 2. 使用環境 3. コンパイル 4. opensnoopとは 5. opensnoop.bpf.cの解説 5.1 mapの宣言 5.2 BPFプログラムのメイン処理 5.2.1 33-68行目 5.2.2 88-124行目 5.2.3 プログラムタイプとコンテキスト 5.3 opensnoop.bpf.cのコンパイル 6. opensnoop.cの解説 6.1 ヘッダファイルのインクルード 6.2 BPFアプリケーションのメイン処理 6.3 231-232行目 6.4 opensnoop_bpf__open 6.4.1 bpf_object__init_maps 6.4.2 bpf_object_init_progs 6.5 241-245行目 6.6 opensnoop_bpf__load 6.6.1 bpf_object__create_maps 6.6.2 bpf_
静的コード解析ツールの1つである Inferを使ってLinuxカーネルのソースコードを解析し、メモリ関連の不具合を検出してみます。Infer のビルドから、解析の実行と検証、解析結果の精査についてまとめました。
1. はじめに 2. BPFとは 3. BPFで実現できること 4. BPFの仕組み 4.1 BPFプログラムを開発しClang/LLVMでコンパイルしてバイトコードにする 4.2 bpftoolでバイトコードからスケルトンヘッダを作成し、BPFアプリケーションで読み込む 4.3 BPFプログラムの結果を保存するmapを作成 4.4 BPFプログラムをカーネルにロード 4.5 イベントが発生したらBPFプログラムが実行され結果をmapに保存 5. BCCとは 5.1 BCC-Tools 5.2 BCCを使った開発 6. CO-RE 6.1 BPFプログラムをCO-RE対応する場合 6.2 CO-REの仕組み 7. おわりに 執筆者:稲葉貴昭 1. はじめに 本記事は近年注目されているeBPFについて、概論編と実装編に分け解説を行います。 概論編となる今回では、以下のことを解説します。 (1
はじめに OAuth 2.0 と OAuth 2.1 の違い 1. Authorization Code grant フローでは PKCE を標準で使用する 2. リダイレクトURIの検証は文字列の完全一致で行わなければならない 3. Implicit grant フローは仕様から除去される 4. Resource Owner Password Credentials grant フローは仕様から除去される 5. Bearer トークンをURIのクエリ文字列として渡す方法は仕様から除去される 6. パブリッククライアントでは、リフレッシュトークンを利用できる送信者または利用回数を制限する 何をしないといけないか 執筆者 : 山下雅喜 はじめに OAuth 2.0 が RFC 6749 (The OAuth 2.0 Authorization Framework) としてリリースされてから1
1. vmlinuxのELFセクション 2. .parainstructionsセクション 2.1. PV_SITEマクロ 2.2.paravirt_altマクロ 3. .altinstructions、.altinstr_replacementセクション 4. apply_paravirt()、apply_alternative() 5. 休憩 執筆者 : 箕浦 真 1. vmlinuxのELFセクション 前回記事では、vmlinuxのinitセグメントに含まれる、.percpu、.init.text、.init.dataなどのセグメントについて調べた。今回はその続きで、そのinitセグメントに含まれている.parainstructions、.altinstructions、.altinstr_replacementの各セクションを取り上げる。これらは、初期化時にLinuxコード自体を書
1. はじめに 2. Busy Poll Socket 2.1 概要 2.2 使い方 2.3 内部実装 3. kthread NAPI polling 3.1 概要 3.2 使い方 3.3 内部実装 4. まとめ 執筆者 : 西村 大助 1. はじめに 前編では、NAPI とそれに関連するソフトウェア割り込みの仕組みについて解説しました。 本稿では、前回の最後に触れた通り、Linux kernel に組み込まれている、NIC をソフトウェア割り込み以外で polling するための仕組みである、Busy Poll Socket と kthread NAPI polling について解説します。 2. Busy Poll Socket 2.1 概要 使用する socket に setsockopt(2) システムコールを使い、@optname=SO_BUSY_POLL で時間(μ秒単位。以降
1. vmlinuxのELFセクション 2. initセグメント 2.1. percpuセグメント 2.2. .init.text、.init.data、.init.rodataセクション 2.3. .exit.text、.exit.dataセクション 2.4. .x86_cpu_dev.initセクション 2.5 .iommu_tableセクション 2.6 .apicdriversセクション 3. 休憩 執筆者 : 箕浦 真 1. vmlinuxのELFセクション 前回記事は、もう1年半も前に書いて、それなりに多くの方に読んでいただけたようだ。今回記事は、コード例もなく、単にLinuxという巨象の枝葉末節をああでもないこうでもないと闇雲に撫で回すだけの記事だ。 ELFセクションは、リンク時に、同名のセクションのコードやデータを、すべてのオブジェクトファイルからかき集める、という効果がある
1. はじめに 2. Linux カーネルのおさらい 2.1 実行コンテキスト 2.2 ソフトウェア割り込み 3. NAPI とは 3.1 概要 3.2 関連データ構造 3.3 処理の流れ 4. NAPI の問題点 5. 参考資料 執筆者 : 西村 大助 1. はじめに 本稿では、Linux におけるネットワーク受信処理で利用されている、NAPI(New API)と呼ばれる仕組みについて、実装レベルで解説したいと思います。 2. Linux カーネルのおさらい NAPI について解説する前に、前提として Linux カーネルについていくつかおさらいします。 2.1 実行コンテキスト Linux には実行コンテキストとして、大きく以下の2つのコンテキストがあります1。 プロセスコンテキスト プロセス(本稿では、ユーザプロセスだけでなく、カーネルスレッドも含むものとします)を実行するコンテキス
はじめに RISC-Vの割り込み機能 割り込み発生時の動作 割り込み禁止 タイマ割り込み機能を実装する RISC-Vのタイマ割り込み トラップベクタの登録 割り込みスタック タイマハンドラの用意 タイマ割り込みを発生させてみよう タスクをゆっくり動かしてみる 最後に おまけ 執筆者 : 高橋 浩和 はじめに 今回は、RISC-V OSに割り込み機能を追加します。今回は割り込みハンドラを動作させるところまで実装します。 割り込みは、CPU上でタスク等が実行している命令とは関係なく非同期に発生します。 割り込みが発生すると、OSは発生した割り込みの種別に対応した割り込みハンドラを呼び出します。 割り込みとよく似たものに、CPU上でタスク等が実行している命令が要因となって発生する例外があります。 例外の扱いについては別の機会に説明したいと思います。 RISC-Vの割り込み機能 今回実装するOSで
はじめに 前提事項 お試し動作確認 仕組みの調査 javaagentとは バイトコード変更が行われている箇所 バイトコードの変更内容 アプリケーション間のコンテキスト伝播 Spanに設定される名前 Spanに追加されるタグ 未調査項目 OpenTelemetry Instrumentation for Java のカスタマイズ WARやEARアプリケーションへの適用 まとめ 執筆者 : 山下雅喜 はじめに 分散トレーシングを行うためのソフトウェアとして、最近は OpenTelemetry が流行してきているように感じます。 OpenTelemetry は CNCF の Incubating プロジェクトであり、OpenTracing や OpenCensus を統合したものとして活発に仕様策定や開発が行われています。 一方、実際に分散トレーシングを行うためには、トレースを出力する仕組みをア
はじめに 環境の用意 ブートプログラムを作る 動かしてみる コンパイル QEMU上で起動 GDBで制御 最後に おまけ 執筆者 : 高橋 浩和 はじめに RISC-VはMIPSアーキテクチャの流れを汲む正統派?のRISC CPUです。命令セットはシンプルですが、既存のメジャーなCPUのアーキテクチャと大きな違いがあるわけではありません。 Linux上で利用できるRISC-Vツール群も揃ってきたので、それらを使ってRISC-V用の小さなOSを実装してみようと思います。 最初は欲張らずに単純な実装を目指すことにします。 シングルコアのみサポート 64bitモードを使用 マルチタスキングを実現 タイムシェアリングスケジューリングを実装 割り込みネストは無し 保護機能は使わない 既存のBIOSやbootプログラムは利用せず、リセットエントリから全て作成する qemuの仮想マシン上で動作させる。ター
はじめに マルチタスク RISC-Vアーキテクチャにおけるタスクコンテキスト 関数呼び出し タスク切り替え関数の方針 タスク切り替え関数を実装しよう タスク切り替え タスクの初期化 最初のタスクの起動 デバッグ文 タスク切り替え関数を動かしてみよう タスクスケジューラの用意 タスクスケジューラを動かしてみよう 最後に おまけ 執筆者 : 高橋 浩和 はじめに 前回はbootプログラムが動くところまできました。今回は、複数のタスクが切り替わりながら並列動作できる仕組みを作ります。 まだ割り込み機能は無いので、タスクからスケジューラを明示的に呼び出すことにより、別のタスクへ切り替えてもらうという仕組みにします。 マルチタスク それぞれのタスクは、あたかも自分がCPUを専有しているかのようにプログラムを実行することができます。 各タスクに仮想的なCPUを割り当てることにより実現します。仮想的なC
0. してみた結果... CentOS 8.3 がインストールされたマシンを AlmaLinux で用意されている移行ツールを用いて、AlmaLinux 8.3 に移行してみたところ、特に問題なく移行できた。 今回、GUI (GNOME) 環境を持つサーバーを移行したが、デスクトップの壁紙、ロック画面などは、CentOS に比べかなりポップな感じになった。 もちろん、移行後も NFSD サービス、HTTP サービスなど問題なく使用できている。 ただし、運用中のサーバーで、パッケージのバージョンに変更があると問題がある場合には注意が必要。 移行には、dnfコマンドの... 続きはのちほど。 0. してみた結果... 1. はじめに 1.1. CentOS の代替 1.2. 代替の候補 AlmaLinux Rocky Linux Oracle Linux 2. CentOS 8.3 から A
概要 LVM について pvmove と lvconvert --mirror の動作 実験 解説 pvmove の後処理 dm_suspend / dm_resume の詳細 実験 まとめ 執筆者 : 岩本 俊弘 概要 クラウド全盛のこのご時世においても、物理マシンのお守りをしないといけないことはあって、古くなったディスクの交換作業が必要になった。 出社は避けられないものの、なるべくオフィスでの滞在時間を減らしたい。 pvmove コマンドというものがあって、online のままディスクを移行できる。 だが、このコマンドの解説記事は少なく、アンマウントしてから pvmove を実行しろといった記述があるものもある。以下はわりと正確なものである。 https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7
はじめに 利用した環境 cgroup の階層構造 例:CPU やメモリの制限 例:PID 数の制限 例:CPU コアの排他的割り当て まとめ 執筆者 : 山下雅喜 はじめに cgroup とは、Linux カーネルの機能の1つであり、プロセスやスレッドが利用するリソースの制限や分離を行うための機能です。 cgroup は名前空間の機能と共に、Linux コンテナの根幹を成す技術の1つでもあります。 Kubernetes において、名前空間は PID 名前空間、ネットワーク名前空間、マウント名前空間などで利用者の目に触れやすい存在ではありますが、cgroup は相対的に目に付きにくいもののように感じています。 そこで今回は、Kubernetes のいくつかの機能を例に挙げ、cgroup がどう利用されているか見ていきます。 利用した環境 利用したソフトウェアおよびバージョンは次の通りです。
1. はじめに 2. 環境 3. 前提 4. AF_XDP (zerocopy) アプリケーション 4-1. アーキテクチャ 4-2. レイテンシ特性 4-2-1. 特性 4-2-2. チューニング (a). 一般的なirq_exitからのSoftIRQ実行及びksoftirqdによる実行双方に共通する項目 (b). ksoftirqdに限定される項目 4-3. スループット特性 5. まとめ 執筆者 : 田 幸一郎 1. はじめに 近年活発に開発が進んでいるAF_XDPを利用したアプリケーションは、(skbを持ち回してプロトコルスタックを駈け登る/駆け下りる)Linux Kernel Network Stackをバイパス出来るという観点で、DPDKを活用したアプリケーションと比較されることが少なからずあるかと思います。普通この2つの要素技術を比較検討する際、スループット性能に焦点が当たる
1. はじめに 2. perf 概説 2.1 perf とは 2.2 基本的な使い方 性能データの採取 性能データの分析 2.3 採取可能なイベント 組み込みイベント ユーザ定義イベント(dynamic tracepoint) 3. 具体例 3.1 準備 3.2 プロファイル 性能データの採取 性能データの分析 3.3 トレース 性能データの採取 性能データの分析 4. 最後に 5. 参考資料 執筆者 : 西村 大助 1. はじめに 本稿では、ネットワークの受信処理を例に、perf を使った性能分析を行う方法を解説します。 提示している実行例やソースは、実行環境として(やや古い)Ubuntu18.04LTS(4.15.0-20-generic)を前提としていますが、他のバージョンでも基本的な考え方は変わりません。 2. perf 概説 具体的な例の前に、簡単に perf についてまとめてお
1. vmlinuzの怪 2. vmlinuxの入手 3. ELFファイル 4. ELFセクション 5. セクションの意味 6. Linuxのセクションとldscript 7. .cpuidle.textセクション 8. おわりに 執筆者 : 箕浦 真 1. vmlinuzの怪 Linux (カーネル) のファイル名といえば、/boot/vmlinuz-<version>だ。なんでlinux-<version>とかじゃないのだろうか。 vmの方は、これはおそらくBSD Unixのカーネルvmunixに倣ったものだろう。ベル研究所のResearch Unixを、VAXのハードウェアを生かして仮想記憶 (Virtual Memory) 機能を大幅に強化したため、vmunixとした。 zの方は、これは圧縮されていることを表す。なぜZで圧縮なのかはよくわからないが、圧縮の意味なのだ *1。 現在一
1. はじめに 2. 想定環境と基礎知識 想定するネットワーク環境 Docker で IPv6 を利用するための基本設定 3つのネットワーク構成パターン 3. パターン1 : ユニークローカルユニキャストアドレス + IPマスカレード 4. パターン2 : グローバルユニキャストアドレス + ルーティング 5. パターン3 : ホストネットワークのサブネット + NDP Proxy 6. まとめ 執筆者 : 山下雅喜 1. はじめに IPv4 アドレスが枯渇すると言われてから早20年以上経ちますが、IPv6 に対応したシステム構築はなかなか進んでいないように感じています。 企業の社内ネットワークが IPv6 化されていないために、IPv6 に対応した Web システムを構築しようとしても、社内からはその動作を確認できないということもあるでしょう。 とは言え、システムの IPv6 対応 (I
このページを最初にブックマークしてみませんか?
『VA Linux エンジニアブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く