タグ

*programとlinuxに関するsh19910711のブックマーク (208)

  • 噂のpidfdをRustで試してみた - Qiita

    はじめに Python3.9の新機能 (まとめ)という記事を書く中でpidfdというものを知りました。まだあまり良い解説記事がないのですが、最近の5.x系Linuxカーネルに新たに導入されたプロセスを識別するための仕掛けです。この機能がRust言語でCrate(ライブラリのようなもの)として実装されていたので試してみました。 pidfdとは これまでプロセスはPID(Process ID)によって指し示されていました。PIDはプロセスを一意に指し示すための識別子で、例えばシグナルなどを送ったりするのに使われます。 PIDは32bitの整数で、プロセスが生成される時にカーネルが割り振りますが、システム全体で共有しているので枯渇しちゃいます。32bitならそこそこあるように思いますが、実はPIDの最大値はもっと小さく設定されています。Linuxの場合は cat /proc/sys/kernel

    噂のpidfdをRustで試してみた - Qiita
    sh19910711
    sh19910711 2024/05/24
    "pidfd: 5.x系Linuxカーネルに新たに導入されたプロセスを識別するための仕掛け + Pythonでは asyncioの子プロセスを監視するための仕掛けとして 3.9から導入 / PIDの最大値: Linuxの場合は cat /proc/sys/kernel/pid_max で見ることができ" 2020
  • eBPFを使ったオレオレカーネル拡張入門

    Kernel/VM探検隊@東京 No16

    eBPFを使ったオレオレカーネル拡張入門
    sh19910711
    sh19910711 2024/04/20
    "eBPF: モニタリング + 高速パケット処理 + システムコールのフィルタ + これだけじゃない / いま、eBPFを使ったカーネルの拡張が熱い + MemcachedのキャッシュをeBPFでカーネルに移植 / XRP: eBPFを用いたストレージ処理高速化" 2023
  • RustでRISC-Vエミュレータを書いてNOMMU Linuxをブラウザで動かした | MaybeUnInit

    RustRISC-Vエミュレータを書いてNOMMU Linuxをブラウザで動かした #2023-05-23 以前からRISC-Vエミュレータを書いてみようと思っていたのだが、書いては飽きてを繰り返して全然進められずにいた。そんな中、以下のRepositoryで、rv32ima,Zifencei,Zicsr、あとはCLINTを実装すればLinuxが動くと知り、飽きずに進められそうな気がしてきたので今度こそ、と実装してみることにした。 https://github.com/cnlohr/mini-rv32ima目次成果物 #Repositoryは以下。記事では実装の概要の記載もあるが、簡略化していたり抜粋だったりするので適宜参照いただきたい。基的にはcoreというcrateが実装の中枢となっている。appはcoreにcliの皮を被せただけだ。 また以下にPlaygroundも用意した。

    sh19910711
    sh19910711 2024/01/12
    "参考図書: RISC-V 原典 + 私はどのようにして Linux カーネルを学んだか / 記述量は 1000 行くらい / CPUのみではなく、割り込み機構やTimer/UARTがどういうものかも学ぶことができる" / 2023
  • 書評:ふつうの Linux プログラミング - 入門本のかくあるべき姿 - にょきにょきブログ

    ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道 作者: 青木峰郎出版社/メーカー: ソフトバンククリエイティブ発売日: 2005/07/27メディア: 単行購入: 35人 クリック: 450回この商品を含むブログ (145件) を見る ふと軽い気持ちで手に取った入門であるが、いやはや驚いた。 入門のかくあるべき姿がここにあったのだから。 「ふつうの Linux プログラミング」の内容はタイトルが表している通り、ふつうの Linux プログラミング。 cat コマンドや head コマンドを C で実装しながらプロセスやファイルやパイプの仕組みを学んでいく、というある程度 C 言語を知っている人向けの入門である。一見巷にありふれていそうなふつうのであるが、書はひときわ輝いている。プロセスやファイルやストリーム等々の概念の説明もわかりやすく

    書評:ふつうの Linux プログラミング - 入門本のかくあるべき姿 - にょきにょきブログ
    sh19910711
    sh19910711 2023/05/07
    2012 / "cat コマンドや head コマンドを C で実装しながらプロセスやファイルやパイプの仕組みを学んでいく / 本書はエラー処理を書いても問題ないどころか素晴らしい本になることを示した"
  • Cのプロダクトを作るためにやったこと - Tomohisa Oda

    今年に入って Octopassというプロダクトを公開しました。それは、Linuxのユーザや権限をGithubのTeamと連携して運用を楽にするというツールでした。色んな方々のご協力により、多くのRetweetやはてぶいただいたことで、ある程度、Octopass を必要としそうな人の目に触れたのではないかと思っています。(Githubのスター数が少ないのは今後の課題)その中で「すごく便利」「ぜひ導入したい」というフィードバックは、継続して機能追加していくというモチベーションにつながっていて、非常にありがたいです。 さて、この Octopass は、Linuxユーザ名前解決をするためにの glibc の libnssモジュールをCで実装しています。cgoやその他の言語でShared Objectを吐き出しても良かったのですが、それだと技術的挑戦が足りないとして、触れてこなかったCに挑戦しました

    Cのプロダクトを作るためにやったこと - Tomohisa Oda
    sh19910711
    sh19910711 2023/03/09
    2017 / "Octopass: Linuxのユーザや権限をGithubのTeamと連携して運用を楽にする + Linuxユーザ名前解決をするためにの glibc の libnssモジュールをCで実装"
  • Ruby: eBPFでメモリアロケーションをプロファイリングする(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許可および指示により「非公式の翻訳として」翻訳・公開いたします。 英語記事: Spying on a Ruby process's memory allocations with eBPF - Julia Evans 原文公開日: 2018/01/31 著者: Julia Evans なお、eBPFはBPF(Berkeley Packet Filter)の拡張版(extended BPF)です。 参考: LinuxのBPF : (1) パケットフィルタ - 睡分不足 参考: LinuxのBPF : (3) eBPFの基礎 - 睡分不足 今回は、CPUプロファイラを使う代わりに、まったく新しいアイデアに基づいた実験を披露いたします。 私がその日の朝に思いついたのは、Rubyの任意のプロセスのPID(既に実行されているプロセスのPID)を取得してメモリアロケーションを追えるのでは

    Ruby: eBPFでメモリアロケーションをプロファイリングする(翻訳)|TechRacho by BPS株式会社
  • 広告配信サーバーのパフォーマンス問題を解決した話 (_raw_spin_lock_irqに関して) - GENIEEエンジニアブログ

    はじめに こんにちは、ジーニーR&D部アド・プラットフォーム開発部の宮下です。 今日は弊社の開発業務で普段どんなことをしているのかな、 という業務の一旦を弊社プロダクトのGenieeDSPを例にとってご紹介したいと思います。 現象 GenieeDSPは、弊社のDSP広告配信システムでSSPから来るリクエストのうち、おおむね月間800億リクエストを処理して、広告を返しています。 ある日のこと、監視システムから、配信サーバーの一台で負荷が高まっていることを示すアラートが上がってきました。 ジーニーでは各サーバーの稼働状況をモニタリングするものとして、Grafanaというツールを使用しています。 この時の状況でいうと、 CPU使用率は30%程度 load averageはほぼ限界まで高まっている(全てのCPUが処理待ち)という症状でした。 現象はリクエストの多い時間帯で起きており、症状の起きた

    広告配信サーバーのパフォーマンス問題を解決した話 (_raw_spin_lock_irqに関して) - GENIEEエンジニアブログ
  • netfilterでパケットの送受信を制御する | monolithic kernel

    netfilterは、LinuxカーネルのネットワークスタックのいろいろをフックしてあれこれするためのAPIです。身近なところだと、iptablesnftablesの実装に利用されています。カーネル内のAPIなので敷居が高そうに思われるかもしれませんが、簡単なLoadable Kernel Module (LKM) を書くだけで利用でき、カーネルに直接変更を加える必要がないので、かなりお手軽です。それでいて、iptablesnftablesでも利用されているだけあってできることの範囲は広く、パケットの監視やファイアウォールを始めとしてパケットを読み書きするような処理なら割と何でもできます。 この記事では、netfilterを使うカーネルモジュールの基的な書き方を紹介します。なお、動作確認はKernel 3.14で行いました。カーネルのバージョンによってメンバや定数の名称が変化している

  • Linuxのメモリダンプ解析の話 (その1) - Qiita

    背景 社内で Linux マシンのとあるドライバの挙動がおかしいということで「ライブ crash で見たいなぁ」って呟いたら、「クラッシュって何?壊すの?」という反応が出て自分としてはカルチャーショックを受けたので、メモリダンプ解析の話を書いてみようと思いました。 色々と検索してみたところ、kdumpでメモリダンプ (世の中的にはクラッシュダンプと言う方が多い?) を採取する設定・手順についてはたくさんあるんですが、実際にその解析をどうやるのかって記事はあんまりないなぁと。パッと見つかったレベルだとこんな感じ。英文記事も探せば出てくるのだろうか。 VA Linuxの「ダンプ解析講座」の記事は結構ちゃんと書いてる。 O'Reillyの Debug Hacks -デバッグを極めるテクニック&ツール は結構ページ使って説明してる (役に立つかどうかは読み手次第)。 ミラクル・リナックスのLin

    Linuxのメモリダンプ解析の話 (その1) - Qiita
  • eBPF+USDTでphpをトレースしてみる、bpftaceとRbBCCでやる - ださろぐ@はてな

    最近プロダクション環境での諸々の調査に使いたいというモチベーションで BPF Performance Tools (Book) 読み進めつつ、提供されているbcc-toolsを試したりbpftraceでlibほげほげの関数パラメータを抜いたりしていた、のだがUSDTを使用したトレースはうまく動かせず悶々としていた。 正直USDTはパッケージ入れておけばいきなりproductionでさくっと使える、という感じでもなく当初の目的からはやや外れているのだが、機構があるのに動かせないというのはなんとももどかしいので、諸々試行錯誤してとりあえず動いた、というころまでの記録を残しておく。対象はphpで。 なぜphpなのかというと、プライベート的にもお仕事的にも馴染みがありワンチャン使える可能性もあるのでは・・という期待と、ツールを試す過程で標準パッケージのphpで $ tplist-bpfcc -l

    eBPF+USDTでphpをトレースしてみる、bpftaceとRbBCCでやる - ださろぐ@はてな
  • 最小限のELF | κeenのHappy Hacκing Blog

    κeenです。 先日の記事で言及した最小限のELFが需要ありそうだったので解説してみます。 コンパイラを作るときの参考にしてみて下さい ELFはExecutable and Linkable Formatを表わし、Linuxなどで標準の実行可能ファイルのフォーマットとなっています。 なんらかの形でこのファイルを生成するのがコンパイラの最終目標となります。 一般にはアセンブラまで吐いて外部のアセンブラやリンカにELFファイルの生成を任せることが多いのですが、自作するなら最後までやりたいという人向けにとっかかりになる最小限のELFファイルを解説します。 まずはこのファイルを生成するのを目指して、後から色々追加していけばインクリメンタルにできるよね、という訳です。 一部、「どうしてかは分からないけどこうしたら動く」みたいな箇所もあるので詳しい人がいたら教えて下さい。 全体構成 プログラムそのもの

    最小限のELF | κeenのHappy Hacκing Blog
  • eBPF for Rubyist 現状確認(1) - RbBCC の使い方 in March 2020 - ローファイ日記

    気づいたら3月に... このたび、Rubyアソシエーションの助成対象となった RbBCC の開発について、最終報告書を出したのですが、せっかくなのでブログで何をやったかも書いとこうという気持ちです。 udzura.hatenablog.jp これの話です。 で、サラッと書くつもりでしたががっつりしています。週末プログラミングのお供にでもどうぞ。 RbBCC の話 以前ブログに書いた気がしていたんですが、 hello world が動いた!みたいなことしか内容がなくて、 udzura.hatenablog.jp 今はもうちょっと現実的なツールが動くんで、とりあえず書いて動かしてみましょう。 動かす環境づくりとインストール まずLinuxを用意します。カーネルのバージョンは新しいほど嬉しいです。今回はもうすぐリリースされるであろう Ubuntu Focal(20.04) を使います。カーネルバ

    eBPF for Rubyist 現状確認(1) - RbBCC の使い方 in March 2020 - ローファイ日記
    sh19910711
    sh19910711 2020/03/31
    BPF / "RbBCCを用いるとRuby(と若干の定型的なC)を書くだけで、Linuxの様々なイベントをトレースできます"
  • libbccをmrubyにポートしている話 - ローファイ日記

    たまには「〜話」メソッドでブログを書く。あと6月は二回ブログを書けたのでめでたい。 さて、タイトルのようなことをしています。 前提としてeBPFという、カーネル内で動く特定の目的のプログラムを比較的高速・安全に書くための技術があるのですが、そのプログラムはバイトコードベースなので、eBPFを扱うプログラムをもう少し人間的な形式で書きたくなります。せめてC言語とか。そのためのコンパイラがlibbccです。 github.com 大きくはkprobe、uprobe、kernel tracepointといったカーネルイベントのトレースをしたり、XDPというネットワーク周りのトレースをしたり挙動を変更する処理を書くことができたりします。 以下の記事が詳しいと思います。 mmi.hatenablog.com qiita.com 知人の id:mrtc0 さんという人がeBPF関係の中でもUSDTとい

    libbccをmrubyにポートしている話 - ローファイ日記
  • 完全なワンバイナリーmruby - ローファイ日記

    タイトルは 575 です。相変わらず気ぜわしいので小ネタを投げます。 mruby は「ワンバイナリ」を作れるRubyとして知られています。ですが、実際にはlibcなどをダイナミックリンクします。それはそうでしょうという感じですが、例えばLinuxでmruby-bin-mrubyでmrubyバイナリを作ると、こんな感じで確認できます。 $ ldd ./bin/mruby linux-vdso.so.1 (0x00007ffca74f3000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9bd477e000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9bd438d000) /lib64/ld-linux-x86-64.so.2 (0x00007f9bd4de40

    完全なワンバイナリーmruby - ローファイ日記
  • プログラムはどう動くのか? 〜 ELFの黒魔術をかいまみる

    もう締切日なのにネタがない。というわけで簡単なプログラム "hello, world" がどのように起動され、どのように処理されて動くのかを無意味に詳しく解説してみよう。 #include <stdio.h> int main(int argc, char *argv[]) { printf("hello, world\n"); exit(0); } この hello.c をコンパイルすると次のようなhelloというバイナリができる % cc -g -o hello hello.c この hello というバイナリは % file hello hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs),

  • perf, ftraceのしくみ - 睡分不足

    Linuxのトレーサーであるperfやftraceのツールの使い方に関する情報は結構ありますが,構造に関してはあまり見つけられなかったため,ここに簡単に調べたことをまとめようかと思います.(ツールの使い方の説明はあんまりしないです.) この文章はLinux 4.15のソースに基づいています. 全体像 ftrace function trace tracepoint (static event) kprobe (dynamic event) その他のtracer trace-cmd perf PERF_TYPE_HARDWARE, HW_CACHE, RAW PERF_TYPE_SOFTWARE PERF_TYPE_TRACEPOINT PERF_TYPE_BREAKPOINT USDT (SDT Event) perf-tools perf ftrace straceとの比較 その他 pe

    perf, ftraceのしくみ - 睡分不足
  • mrubyでカジュアルにLinuxのプロセスをサスペンドしてみよう

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 子育てと家事にいそしんでいてあまり研究ができていない松です。こんばんは。 今日はmrubyからLinux上で動いているプロセスをサスペンドしてイメージとして保存し、サーバ再起動後や任意のタイミングでサスペンドしたタイミングのプロセスを復帰させてみましょう。 そのために、mruby-criuというmrubyのモジュールを作りました。これはCRIUという技術を使っていて、上記のようなプロセスのサスペンドが可能になります。 今回は簡単なプロセスサスペンドの例を紹介します。 カウンタをインクリメントするプロセスを起動 まずは以下のように1秒毎にsleepしながらカウンタをインクリメントして表示する簡単なスクリプトを用意します。 [program l

    mrubyでカジュアルにLinuxのプロセスをサスペンドしてみよう
  • Linuxのユーザーランドをinitから全てまるごとgolangで書く

    Infinite Debian - Platform for mass-producing system every second

    Linuxのユーザーランドをinitから全てまるごとgolangで書く
  • Linuxコマンドでボトルネックを調べる

    俺の話を聞け!!LT大会 #8でトークした資料です

    Linuxコマンドでボトルネックを調べる
  • ruby/perl のsyswrite について話したあとばたんと寝てたら、寝てる間に ruby コミッタと linux kernel コミッタがやってきて write(2) の制約であることが明らかになっていた

    ruby/perl のsyswrite について話したあとばたんと寝てたら、寝てる間に ruby コミッタと linux kernel コミッタがやってきて write(2) の制約であることが明らかになっていた

    ruby/perl のsyswrite について話したあとばたんと寝てたら、寝てる間に ruby コミッタと linux kernel コミッタがやってきて write(2) の制約であることが明らかになっていた