2024.12.03
企業の情報漏えいで最も多いのは「中途退職者」による持ち出し 内部不正が発生しやすい3つの要素
Linux KernelにおけるCompactionについて(全1記事)
リンクをコピー
記事をブックマーク
齊加匠氏:「Deep Dive into the Linux Kernel メモリ管理におけるCompaction機能について」というタイトルで株式会社エヌ・ティ・ティ・データの齋加が発表します。
自己紹介です。所属は株式会社エヌ・ティ・ティ・データで、業務はアプリケーション開発です。OSは関係ないんですが、アプリケーション開発をしていて、主にSpringを使っています。好きなものはGolangやArch Linuxです。かねてよりメモリ管理に興味があって、Linux Kernelのメモリ管理について詳しく知ってみたいと思っていたので、今回はCompactionを見てみようと思いました。
テーマの方針ですが、今回はCompaction機能について調査しました。具体的には、Linux Kernelのコードを読んでどういう処理を行っているか、仕組みや工夫点を調査しました。使用したKernelのバージョンは5.8.2です。
そもそもCompactionとは何かというところですが、これはフラグメンテーションを緩和する手法で、つまりデフラグ(デフラグメンテーション)です。フラグメンテーションとは何かというと、メモリに対してallocationとdeallocationを繰り返していると、メモリが虫食い状態になって、使用可能な連続した領域が少なくなってしまう現象です。Compactionはこれを緩和する手法です。
具体的にそれをどう緩和するのか仕組みの概要です。LWN(https://lwn.net/)によると、まず2つの探索が走ります。1つ目は低位から高位へ動かせるページを探索する処理で、もう1つは高位から低位へとフリーなページを探索する処理です。この2つの探索が走ります。
2つの探索がぶつかると、探索を止めてmovable pagesからfree pagesへ移動する仕組みになっています。ここでいうpageとはphysical pageのことです。
実際に処理のソースコードを見ていきます。これはCompaction.cですが、処理の工夫点はここですね。memory isolationをやっています。これは候補のリストを作って、それを操作しています。つまり、Compactionの処理中にページのロックをつかみ続ける必要がないので、性能が向上するという工夫がされています。
全体の呼び出し関係についてちょっと見ていきます。Compactionの処理は基本的にCompaction.cに書かれています。そもそもpage_alloc.cから呼び出されて、_try_to_compact_apgesからcompact_zone_order、そこからcompact_zoneを呼び出します。zoneというのはメモリの分割単位です。
そこ(compact_zone)から2つに分かれています。movable pagesを探す処理のisolate_migratepagesとfree pagesを探す処理のisolate_freepagesです。この2つが対応する関係になっています。compact_zone_orderから呼び出されたmigrate.cのmigrate_pagesで、実際にページマイグレーションを行っています。
まずisolate_migratepagesについてソースコードを見ていきたいと思います。「//略」と書いているところには、本当は多くのコードがあるのですが、説明の都合上、主要な箇所を抜粋しています。これはmovable pagesを探す処理になっているんですが、for文でループが回っていて、低位から高位へとループが回ってmovable pagesを探索します。実際に実行する処理はisolate_migratepages_blockに実装されています。ブロックとメモリを分割する単位です。
次にisolate_freepagesを見ていきたいと思います。ここも先ほどの処理と対応していて、for文があって、今度は逆に高位から低位へfree pagesを探索する処理が行われています。実際の処理は、isolate_freepages_blockに実装されています。
次にcompact_zoneについて見ていきたいと思います。ゾーンもメモリの分割単位ですが、これをcompactionする処理になっています。ここではwhileでループが回っていて、停止条件はcompact_finishedです。
このcompact_finishedはcompact_scanners_metを呼び出しています。その実装はこの資料には記載してないのですが、free pages scannerがmovable pages scannerよりも低位にいた場合、つまりぶつかった場合に止まるように実装されています。
コードを見ると、isolate_migratepagesが呼び出されていたり、compaction_allocがisolate_freepagesを呼び出しており、それらをマイグレートします。
次はそのcompact_zoneから呼び出されているのを実際にマイグレートする処理ですね。migrate.cのmigrate_pagesを見ていきたいと思います。これは実際にマイグレートしている処理なんですが、ここに関してループが回っていて、10回試す、もしくはmovable pagesがない場合にリターンするという処理です。
実際にマイグレートしているのはこのunmap_and_moveという部分で、free pagesにマイグレートする処理が行われています。
まとめです。まずCompactionはデフラグ(デフラグメンテーション)の手法です。Compactionの機能について、実際にどう動作しているのか、Kernelのソースコードレベルで今回は把握できたんじゃないかなと思います。Compactionの基本の原理自体は既知だったんですが、どのようにコードレベルで動作しているのかを解説した資料はたぶんなかったので、そこについて今回発表できたと思います。
実装の工夫点として、memory isolationで行うことで性能向上を図っていることがわかりました。以上で発表を終わります。ありがとうございました。
2024.11.26
タスクの伝え方が部下のモチベーションを左右する マッキンゼー流、メンバーが動き出す仕事の振り方
2024.11.25
仕事はできるのに、なぜか尊敬されない人が使いがちな言葉5選 老害化を防ぐために大切な心構えとは
2024.11.27
何もせず月収1,000万円超…オンラインゲームにハマって起こした事業 大学中退し4社立ち上げ・2社売却した起業家人生
2024.11.29
「明日までにお願いできますか?」ちょっとカチンとくる一言 頭がいい人に見える上品な言い方に変えるコツ
2024.11.25
論理的に「詰める」マネジメントでは本質的な解決にならない マッキンゼー流、メンバーの理解と納得を得る接し方
2024.11.28
管理職の「疲弊感」がメンバーに伝わるリスク 部下の「働きがい」を育む6つのポイント
2024.11.27
部下に残業させられず、自分の負担ばかり増える管理職 組織成長のカギを握る「ミドル層」が抱える課題
2024.11.27
仕事中の「今ちょっといいですか」が苦痛… いしかわゆき氏が語る、ADHD気質にマッチした働き方のヒント
2024.11.26
仕事の質を左右する「ムダな習慣」トップ5 忙しくなる前に棚卸ししたい“やめたほうがいいこと”とは
2024.11.28
“新規事業が生まれない組織”に足りていないもの 「PoC貧乏」に陥らず、アイデアを形にするためのヒント
長期投資の衝撃の真実!20年投資しても年率1.9%しか増えない!?
2024.10.04 - 2024.10.04
第765回 トレンド経営学『顧客に謝る基準とは?』
2022.04.18 - 2022.04.18
不機嫌な自分をやめるために!認知行動療法の専門家 中島美鈴先生新刊『脱イライラ習慣! あなたの怒り取扱説明書』発売記念【無料オンラインイベント】
2024.10.25 - 2024.10.25
ログミーBusiness リニューアル記念イベント開催
2024.11.29 - 2024.11.29
品がある人、育ちがいい人の見える 人のセリフ 3選
2022.11.30 - 2022.11.30