週刊? Linux Kernel Patch Watch 20180520

前書き 細かいpatchも見ているとなるほどーなとか勉強になりますね 今週のpatch 2038年問題対応 [PATCH 0/6] Transition vfs to 64-bit timestampsです。VFSがstruct timespecを使っているところで、この構造体は2038年問題があるのでstruct timespec64に置…

週刊? Linux Kernel Patch Watch 20180511

前書き (´-`).oO(ほんとに小ネタが多いな 今週のpatch vdsoの未使用ファイル削除 [PATCH] x86/vdso: remove unused fileです。読まなくて良いファイルが消えるのは良いことですね。 gcc8でobjtoolのワーニングがたくさん出る問題 Kernel build with gcc 8 a …

週刊? Linux Kernel Patch Watch 20180504

前書き 今週もなんとか小ネタを集めて。。。 今週のpatch IRQのon/off切り替わり時のトレースポイントでパフォーマンス劣化してた [PATCH RFC] tracepoint: Introduce tracepoint callbacks executing with preempt onです。hackbenchで〜10%のパフォーマン…

GRUB2(UEFI)のコンソールからの起動メモ

たまにやる必要があったりするのでメモです。 まずは。。。 pagerを1に設定することで、出力内容が多い時に(catとかで)moreとlessみたいに1ページ毎にページ送り出来ます。これないと辛い。。 setコマンドで引数渡さなければ現在の設定が見れます。これで…

週刊? Linux Kernel Patch Watch 20180427

前書き 2018 Linux Storage, Filesystem, and Memory-Management Summit関連の記事でlwn.netに面白そうな記事が増えてる今日この頃ですヽ(=´▽`=)ノ 今週のpatch メモリを確保してデータを書き込んだあとはR/Oにするpmalloc() 前にlwn.netでも紹介されてたかも…

週刊? Linux Kernel Patch Watch 20180420

前書き 今週も細かいネタを拾っていきます。重要そうなpatchはLWN.netをチェックしましょう。lwnはSubscriberになると最新の記事がすぐに読めて快適ですΣ(゚∀゚ノ)ノキャー 今週のpatch cpuタイマーのバグフィックス LKML: Laura Abbott: [PATCH] posix-cpu-timers:…

週刊? Linux Kernel Patch Watch 20180413

まえがき 週刊Railsウォッチというrailsを中心とした記事がとても良い感じで、これのカーネル版あったら嬉しなということで自分でやってみました(*´Д`) どれくらいのボリュームでとか、毎週ちゃんと書くのかは全く不明でございます。 我々にはWelcome to LW…

gccのインラインアセンブラ内からcのラベルにgotoでジャンプ

最近のgccはインラインアセンブラ内からcのgotoラベルに飛べる仕組みがあるのでそれのメモです。 ドキュメントはUsing the GNU Compiler Collection (GCC): Extended AsmとUsing the GNU Compiler Collection (GCC): Extended Asmです。たしかLKMLに送られて…

vdsoの領域を読んでファイルに保存

ふとvdsoで提供されている関数の一覧が見たくなったので。 dump vdso masami@saga:~$ gcc read_vdso.c -o read_vdso masami@saga:~$ ./read_vdso [*]read 2 pages [*]vdso start address is 0x7ffd532fb000 [*]write data [*]Done. masami@saga:~$ file vdso…

xv6のメモリ管理周りのコードリーディング

xv6のページング周りをちょっと見てたので記録をφ(..)メモメモ 参照したドキュメントはbook-rev10.pdfです。 book-rev10.pdfのP21、 Figure 1-2にxv6のメモリレイアウトがあります。 仮想アドレスの0から0x80000000がユーザー空間で、0x80000000〜0xFFFFFFFF…

ページングでメモリを割り当てる処理の動きを確認できるものを作ってみた

Linuxのしくみの5章でページングの説明がありますね。なんとなく、この辺の挙動をエミュレートする感じのものでも作ってみようかなと思ったりしたので。 リポジトリはこちらです。 github.com ページングのコードを実際に書くなら自作OSを書くのが良いと思い…

Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識 読みました

著者の武内さんより「[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識」を献本いただきました。ありがとうございますm( )m 武内さんはQiitaなどでもわかりやすいカーネルの解説記事を書かれているので、記事を読んだことが有る方も…

Linux kernelをgdbでリモートデバッグするときはKASLRをoffにするのを忘れずに(´・ω・`)

カーネルをgdbでリモートデバッグできるようにするかーとか思ってやってたわけです。 しかし、下記のような感じでちょっとハマってました。 ブレークポイントが効かなかったり vmlinuxとvmlinuzの組が合ってるのにシンボル名が出なかったり Cannot access me…

Linuxの/proc/cpuinfoでflagsを表示しているところの仕組みめも

/proc/cpuinfoでcpuの機能を表示するflagsのところってどうやって名称設定してんだろ?と思ったので調べてみたメモです。調べたカーネルのバージョンはv4.14.12です。 ↓これですね /proc/cpuinfoのopen処理 これはfs/proc/cpuinfo.cにあるcpuinfo_open()が担…

Linux4.14.12(x86_64)のPage Global Directoryの設定を見てみる

Linux 4.14でプロセスをforkした時のPage Global Directoryの設定を見てみます。読むカーネルはv4.14.12です。 前にLinux x86_64のPaging:Page Global Directory辺りの扱いを見てみる - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ書いてたけど、最新のカー…

Linuxカーネルで一回だけ実行する関数を作る

この記事はLinux Advent Calendar 2017の9日目の記事です。 なんとなくlib/を見ていたらonce.cなんてファイルを見つけて、一度だけ実行したいという時に使う関数を見つけたのでその機能についてのきじになります。 使い方 まず使い方をザクっと見てみましょ…

string_get_size()でサイズのお手軽表示

この記事はLinux Advent Calendar 2017の22日目の記事です。 カーネルのコードを書いていてサイズを表示したい時にstring_get_size()を使うとお手軽に2進接頭辞(KiBとか)とSI接頭辞(KBとか)を使ったサイズの文字列を作ることができます。 関数のプロトタイ…

argbashでbashスクリプトのオプション引数を受け取る

この記事はShell Script Advent Calendar 2017の15日目の記事です。 bashスクリプトでオプション引数を処理したい時にcaseで処理したりすると思いますが、引数の処理をサポートするargbashというツールがありました。というわけで、試してみます。 argbashで…

Linuxカーネルもくもく会の運営

この記事はIT勉強会/コミュニティ運営 Advent Calendar 2017の3日目の記事です。2日目はikkouさんのIT勉強会/コミュニティ運営 Advent Calendar 2017 をやるよ、あるいは今からでも書いてくれる人を募集しているよ、という話でした。 Linuxカーネルもくもく…

弄りながらなんとなく学ぶLinuxのスラブアロケーター

この記事はLinux Advent Calendar 2017の1日目の記事です。Linuxのスラブアロケーター仕組みを多少弄りながら学んでみます。 スラブアロケーターとはなんぞやというところはSlab allocation - Wikipediaを参照してください。スラブアロケーターはSolaris5.4…

cgroup: プロセスが所属しているmemoryサブシステムが使用しているメモリの使用量を見るツール

pythonでなんとなく。 show memory usage in memcg. memoryサブシステムにtest1を作ってメモリの上限を100Mで設定。 root@saga:/sys/fs/cgroup/memory/test1# cat memory.limit_in_bytes 104857600 root@saga:/sys/fs/cgroup/memory/test1# cat memory.memsw…

memory cgroupとpageのLRUめも

カーネルは4.1系です。 include/linux/mm_inline.hにLRUへの登録・削除処理の実装があります。 static __always_inline void add_page_to_lru_list(struct page *page, struct lruvec *lruvec, enum lru_list lru) { int nr_pages = hpage_nr_pages(page); m…

Linuxのsystem call fuzzer「syzkaller」めも

Linuxのシステムコールのファジングツールとしてsyzkallerというのがあって、これはコードカバレッジを見つつ入力を変えていってくれるというファジングするツールです。 試してみたのでどんな感じなのかを簡単にめも。 まず、ツール自体はgolangで書かれて…

cgroupでタスクの移動処理

cgroupでタスクの移動というのは例えば、/sys/fs/cgroup/cpusetにfooとbarというディレクトリがあって、fooに所属しているタスクをbarに移動するとかです。 タスクの移動といってもcgroupのコアと呼ばれてるcgroupの基本機能側での処理とサブシステム(cpuse…

φ(..)メモメモ gccの3項演算子の拡張メモ

c

Linuxカーネルのコードを読んでいて?:なんて演算子が使われていて???と思ったのでめも。 gccの拡張機能で3項演算子の拡張としてUsing the GNU Compiler Collection (GCC): Conditionalsなんてのがありました。 以下のようなコードを z = x ? x : y このよ…

/proc/<pid>にファイルをおいてデータを読みたい

/proc/<pid>/ にファイルを作ってデータを読めると便利なときがあったりするのでめも。 今回はcgroup.cで処理を実装して、その関数をcgroup.hにて宣言。fs/proc/base.cでcgroupのほうに追加した関数を登録する形です。/proc/<pid> にあるファイルに対する関数はここで</pid></pid>…

try_charge()めも2

前回の続き 前回はここの2238行目のpage_counter_try_charge()を読んだのでその下からです。 2236 if (!do_swap_account || 2237 !page_counter_try_charge(&memcg->memsw, batch, &counter)) { 2238 if (!page_counter_try_charge(&memcg->memory, batch, &…

try_charge()の処理めも(1)

chargeの処理としてはこの辺が重要だろうと思われる(要出典)try_charge()の処理を読みましょう。 早速処理を見ていきますが、まず対象のmemcgがルートのmemcgだった場合は何もしません。このチェックはmem_cgroup_is_root()で行えます。次にconsume_stock(…

mem_cgroup_try_charge()の処理めも

commitの前にmem_cgroup_try_charge()を呼んでいるので、commitの処理では重要な関数。 mem_cgroup_try_charge()自体はそんなに処理はなくて、メインなのはtry_charge()関数。mem_cgroup_try_charge()の処理は memcgが無効なら何もしないで終了。 5468 if (m…

Linux 4.11から入った参照カウンタのAPIめも

security things in Linux v4.11を読んでて参照カウンタ用のAPIが4.11に入ったとのことなので軽くめもです。 利用にはinclude/refcount.hをインクルードします。実装はlib/refcount.cです。 機能的には変数は実態はatomic_t型のrefcount_tという型が作られて…