タグ

kernelに関するttakezawaのブックマーク (54)

  • 実践的低レイヤプログラミング

    はじめに 学校で習わないが(習う学校もある)、現実に必要になるプログラミング技術に、低レイヤプログラミングなどと呼ばれるものがある 厳密な定義は聞いたことがないし、おそらく存在しないとは思うが、大体のみんなの共通認識として、 「高級プログラミング言語を使わないプログラムを書き、OSで抽象化されないデバイスの機能を使う」といったような認識があると思う。 筆者の経験から言わせてもらうならば、低レイヤプログラミングに関する知識は、プログラミングにおいてあらゆる場面で、常に、少しずつ役立てられる知識だと言えると思う。 普段はRubyPHPなどを書いてる人であったとしても、メモリが足りなくなった場合や、デバッガを使っている場合、性能が足りなくなった場合など、 厳しい環境におかれた時に低レイヤプログラミングに関する知識が必ず役に立つ場面が来ると信じている。 また、役に立つかどうかは置いておいても、「

  • linux-sched-history.pdf - Speaker Deck

    多言語化対応における TypeScript の型定義を通して開発のしやすさについて考えた / TSKaigi TypeScript Multilingualization

    linux-sched-history.pdf - Speaker Deck
  • CとRustで一から作るマイクロカーネルOS

    マイクロカーネルは浪漫に溢れる非常に作りがいのあるソフトウェアです。この記事は,「マイクロカーネルベースのOSの一から作ってIaaSで動かす」ことを目標に作ったマイクロカーネルベースのOS Resea(りーせあ)の設計と実装について軽くまとめた物です。 ソースコードはGitHubにあります。 マイクロカーネルとは Linuxのようなモノリシックカーネルでは色んな機能がカーネル空間で動きますが,マイクロカーネルではユーザプロセスたちが互いに通信しながらOSを作り上げます。プロセス・スレッド・仮想メモリ管理,プロセス間通信,タイマーといった必要最低限の機能だけをカーネルが担います。デバイスドライバやファイルシステムといった残りの機能は,独立したユーザプロセスとして動きます。たとえデバイスドライバが暴走しても他のコンポーネントを壊すことはないのです。マイクロカーネルは信頼性が高く,疎結合で美しい

    CとRustで一から作るマイクロカーネルOS
  • Linux ファイルシステムを理解したい - Qiita

    ]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) ]# uname -a Linux localhost.localdomain 3.10.0-1062.1.2.el7.x86_64 #1 SMP Mon Sep 30 14:19:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux ファイルシステムとは何か? データを管理/操作するための仕組み。 ファイルとディレクトリで構成されていて、/ を基点とした木構造になっている。 # ls -l / 合計 56 lrwxrwxrwx. 1 root root 7 8月 25 01:17 bin -> usr/bin dr-xr-xr-x. 6 root root 4096 9月 29 15:51 boot drwxr-xr-x. 19

    Linux ファイルシステムを理解したい - Qiita
  • 自作OSとかLinuxカーネルについて役立った本 - Qiita

    はじめに なんらかの理由によってOSやOSカーネルに興味を持つ人は多々います。しかし、その次のステップとしてどんなを読めばいいんだろうと思っている人はこれまたいっぱいいます。そこで、長年Linuxカーネルにかかわってきた筆者がこれまでに読んでよかったと思うものについてここの列挙しました。紹介するのはだけであって、記事は省いています。もう一点、筆者が書いたものは省いています。 OSそのものに興味を持った人は、その後に興味の方向が次のような二つに分かれることが多いと筆者は考えています。 オレオレOSを作りたい 既存のOSを改造したい この仮説をもとに、それぞれについて筆者がかつて真面目に読んだの中から「自作OS」および「Linuxカーネル」というキーワードでよかったものを挙げておきます。Linux以外の既存OSについては語れるほどの知識はないので書いてません。 筆者について の良し悪し

    自作OSとかLinuxカーネルについて役立った本 - Qiita
  • A Heavily Commented Linux Kernel Source Code

    ttakezawa
    ttakezawa 2019/08/21
    オペレーティング・システムの教科書だとI/Oの説明とかが足りてないし、最新のカーネルだと余計なものが多すぎるので、 Version 0.12 のカーネルの実装を解説をした、って感じかな。
  • Linuxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    はじめに スラブアローケータ Linuxのスラブアローケータ slabアローケータ slobアローケータ slubアローケータ スラブオブジェクトの管理 使用中リスト スラブのマージ機能 Chache Coloring スラブの不活性化 frozen状態 スラブキャッシュの情報 slubアローケータのデータ構造 データの関連 slubアローケータで使用するデータの関連 スラブのライフサイクル スラブアローケータの機能 スラブキャッシュの作成 スラブキャッシュ生成時に設定するフラグ 空きオブジェクトの管理 空きスラブオブジェクトの設定 スラブオブジェクトの確保 スラブオブジェクトの解放 kmem_cache_cpu構造体のデータクリア スラブの不活性化 スラブの削除 スラブキャッシュの削除 スラブキャッシュのセットアップ slubアローケータで使用するヘルパー関数 __cmpxchg_dou

    Linuxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
  • [試して理解] Linuxのプロセススケジューラのしくみ - Speaker Deck

    成長は小さな失敗の積み重ね 事業を支えるCARTAのフルサイクルエンジニアリング / growth-for-small-fail-fast-carta-fullcycle

    [試して理解] Linuxのプロセススケジューラのしくみ - Speaker Deck
  • Linuxカーネルを読む前にやったこと - komukomo’s diary

    「カーネルのコードがよくわからない。Linuxカーネルに関するを読んでもいまいちしっくりこない。」 から、「読めば理解できそう..!」 になるまでにやったことのまとめ。 はじめに 低レイヤの話がわかるようになりたかった。 カーネルの中身が知りたかった。 とりあえずを読もうと思い詳解 Linuxカーネル 第3版を読んだが知識がなさ過ぎてよくわからない。 知らない用語だらけで都度調べればなんとなくはわかる気もするが、いまいち頭に入ってこない。 今思うとそもそもCPUの話なのかカーネルの話なのかさえよくわからない状態で読んでいたような気がする。 そんな状態を克服するためにやったことをまとめておく。 学習前 学習前の自分の知識はこんな感じだった。 知っていた データ構造とアルゴリズム 論理回路 C言語(研究室で数値計算に使える程度。構造体やポインタくらいならわかる。) よく知らなかった OSが

    Linuxカーネルを読む前にやったこと - komukomo’s diary
  • Container isolation gone wrong – Sysdig

    Introduction One of the main advantages of embracing containers is “lightweight virtualization”. Since each container is just a thin layer around the containerized processes, The user gains enormous efficiencies, for example by increasing the container density per host, or by spinning containers up and down at a very fast pace. However, as the troubleshooting story in the article will show, this l

    Container isolation gone wrong – Sysdig
    ttakezawa
    ttakezawa 2017/06/30
    CPUとメモリを適切に制限してコンテナを動かしているはずなのに、他コンテナのパフォーマンスに著しい悪影響を与えてしまった、という事例についての原因調査や得られた知見のお話。
  • TCP Fast Openの闇と、Kernelの緩和コミット - ASnoKaze blog

    TCP Fast Open TCP Fast Openと呼ばれる技術があり、RFC 7413として標準化されている。 このTCP Fast Openを使うと、一度コネクションを貼った相手とは、TCPの3ウェイハンドシェイク中にデータを送受信できるようになる。クライアントからSYNとともにデータを送信することで、実際にデータを送受信開始するまでの待ち時間が短縮できる。 Linuxではすでにクライアント/サーバ両方でTCP Fast Openを使用できる。 TCP Fast Openの闇 しかし、数年前よりこのTCP Fast Openには一部のネットワークで奇妙な振る舞いをすることが知られている。Appleの人が実際にデプロイした時に見つけたもので、IETFやNANOGにて報告されており、その時の資料は下記のとおりである Deploying TCP Fast Open in the wild

    TCP Fast Openの闇と、Kernelの緩和コミット - ASnoKaze blog
  • CPU使用率100%のWebサーバをOSのチューニングだけでCPU使用率20%まで改善する - 人間とウェブの未来

    こんばんは、 @matsumotoryです。 hb.matsumoto-r.jp 上記エントリにおいて、プロセスの大量メモリ確保に伴うページテーブルサイズとベージテーブルエントリ数の肥大化によるcloneやexecveの性能劣化とCPU使用時間の専有問題、および、それらの解決方法についてシステムコールレベルで確認しました。 そこで今回は、システムコールやそのカーネル内部の処理の性能、というよりは、より実践的な環境であるApache httpdとmod_cgiを用いて、phpinfo()を実行するだけのCGIに対してベンチマークをかけた時にどれぐらいCPUのidleが空くか、システムCPUの使用量が変わるかを、前回示した解決方法の1つであるHugePagesを使うかどうかの観点で比較してみましょう。 特定条件下のWebサーバ環境のシステムCPUに起因する高負荷問題から、システムコールやカーネ

    CPU使用率100%のWebサーバをOSのチューニングだけでCPU使用率20%まで改善する - 人間とウェブの未来
  • Linuxの各タスクにおけるスケジューリング統計情報 (procfs) - Qiita

    /proc/<pid>/sched の中身 procのmanマニュアルに書いてなかったので今まで全然気づいていなかったんですが、便利なスケジューリング統計情報をユーザが簡単に見れることを最近知りました。/proc/<pid>/sched です。 Ubuntu 14.04 で pid=1 の init タスクの統計情報を見てみると以下のようになります。 $ cat /etc/os-release NAME="Ubuntu" VERSION="14.04.4 LTS, Trusty Tahr" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 14.04.4 LTS" VERSION_ID="14.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG

    Linuxの各タスクにおけるスケジューリング統計情報 (procfs) - Qiita
    ttakezawa
    ttakezawa 2016/06/12
    /proc/pid/sched について
  • https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

    ttakezawa
    ttakezawa 2015/12/04
    overcommit_memoryについて。一番詳しい。1: 常にovercommitする。sparse arrayのようにzero pageが多い場合とかに。 2: overcommitしない。swapと許容された物理メモリの容量を超えて、メモリ確保しようとするとエラーになる。
  • 4.3. 設定ツール

    ttakezawa
    ttakezawa 2015/12/04
    overcommit_memory 少し不自然。MEMO 1:Always overcommit.つまりメモリ確保は成功するが実際にpage accessするとエラーになることがある。2:Don't overcommit.足りないならメモリ確保で失敗し、page accessはエラーにならない。
  • Introduction · Linux Inside

    linux-insides A book-in-progress about the linux kernel and its insides. The goal is simple - to share my modest knowledge about the insides of the linux kernel and help people who are interested in linux kernel insides, and other low-level subject matter. Feel free to go through the book Start here Questions/Suggestions: Feel free about any questions or suggestions by pinging me at twitter @0xAX,

  • Community Blog ファイルロックと新OFDロック

    UNIXシステムには古くから実装され、現在ではPOSIX、SUSにより標準化されているファイルロックですが、実は予想外の動作に驚かされることがあります。この状況を打開する新しいファイルロックがLinux v3.15で導入されました。 排他制御とファイルロック プログラミングでは、排他制御の必要に迫られることが多くあります。複数の処理の流れが同じデータを使用する場面の多くが、これに該当します。スピンロック、セマフォ、mutexなど手法はさまざまですが、いずれも目的はデータの保護にあります。逆に言えば、データを保護していないロック(排他制御)があれば、シグナルやソケットなどのプロセス間通信を検討すべきと言えます。 処理の流れの代表例はプロセスです。処理対象が自プロセスのメモリ内のみに存在するデータならば、プロセスのメモリ空間は来独立しており他プロセスが使用することはできません。このため、排他

    Community Blog ファイルロックと新OFDロック
  • 知らぬはエンジニアの恥。今さら聞けない【コンテナ/仮想化技術】11選 - paiza times

    Photo by Sam MacCutchan どうも後藤です! もう10年以上になるでしょうか・・・ とにかくなんでもかんでも仮想化すればよいというこの風潮。paizaでも仮想化技術は大活躍中。インフラは仮想化技術の上に構築されているし、もちろんコードの評価環境だってばりばりの仮想環境上です。仮想環境ばっちこーい! いったいいつからこんな流れになったんでしょう?どこに基準を求めるかでだいぶかわりますけれども、執筆現在から考えると、こうした流れには35年くらいの歴史があります。使われる仮想化技術は時代とともにかわってきました。だいたいどの時代にも流行ってものがありました。 最近(2014年ごろ)の流行とえば、インフラの一番下にハイパーバイザを入れて、その上でDockerを動かして、管理にはChefやPuppetを使うといったものです。数年経てば状況は変わるでしょうけれども、とにかく楽をした

    知らぬはエンジニアの恥。今さら聞けない【コンテナ/仮想化技術】11選 - paiza times
  • よくわかるLinux帯域制限 | GREE Engineering

    矢口です。 みなさんはLinuxのtcという機能をご存知でしょうか。送信するパケットの帯域制御を行うことができる大変強力な機能で、グリーでもいくつかの用途で使用されています。 具体的な事例の一つはRedisです。Redisではreplicationを新規に開始する際やfailoverが発生しmasterが切り替わった際(特に2.6系)にストアされている全データが転送されます。しかし帯域制限をかける機能がないため、ネットワーク帯域を圧迫してしまう危険性があります。また通常のクライアントとの通信でも大量のクエリにより予想以上の帯域を使用してしまう可能性があります。このような場合にtcを用いることでRedisの使用する帯域をコントロールできます。 このように有用なtcですが残念なことに日語/英語ともにわかりやすい解説や詳細な情報は多くありません。 私も社内において使われていたtcの設定に問題が

    よくわかるLinux帯域制限 | GREE Engineering
  • ファイルオープンと新フラグ

    多人数により日々改善が加えられるLinuxカーネルですが、その中にはまったく新しい機能もあれば、既存機能を拡張したものもあります。記事ではopen(2)に加えられた新フラグについて取り上げます。 O_TMPFILEフラグ ---- linux-3.11 2014年9月にリリースされたlinux-3.11では、ファイルオープン時に指定可能なO_TMPFILEフラグが追加されました。目的は従来のmkstemp(3)、tmpfile(3)と同様ですが、カーネルレベルで対応するため、効率とアトミック性が強化されます。glibcでは2014年2月にリリースされたv2.19でO_TMPFILEに対応しました。 従来のmkstemp(3)ファミリ、tmpfile(3)を用いる場合では、 一意な(と期待できる)ファイル名の生成 そのファイル名でファイルを作成/オープン という手順を踏みますが、一意性を保

    ファイルオープンと新フラグ
    ttakezawa
    ttakezawa 2014/09/18
    O_TMPFILE、linkat(2)、