タグ

メモリに関するrin51のブックマーク (62)

  • Linuxのメモリ割り当てアルゴリズムを追う Slab Allocation編

    はじめに この記事はコネヒトAdvent Calendar2023の24日目の記事です。 前回の記事では、Linuxの主要なメモリ割り当てアルゴリズムの一つであるBuddy Memory Allocationについて詳しく紹介しました。 記事では、Linuxで使用されているもう一つの重要なメモリ割り当てアルゴリズムであるSlab Allocationに焦点を当てて、その仕組みについて解説していきたいと思います。 ↓ 前編の記事です 前提 前編のおさらい 前編では、Buddy Memory Allocationの基原理と仕組みについて紹介しました。 このアルゴリズムは、メモリブロックの割り当てと解放を2の冪乗単位で行うことにより、外部フラグメンテーションの発生を削減できると同時に、割り当てと解放のプロセスを高速化できるというものでした。 ビットマップ方式とBuddy Memory All

    Linuxのメモリ割り当てアルゴリズムを追う Slab Allocation編
  • Buddy memory allocation by bitmap - Qiita

    はじめに 組み込みやゲームなど特殊な環境では, 独自のメモリ割り当てが必要になることがあります. ひとつの選択肢として, "Buddy memory allocation"を考えてみます. 良いメモリ割り当ての理想は次になります. 特殊環境で自前に実装する理由は, 3つ目を捨てて, その環境で1と2を追求するということです. 確保・解放が高速に動作する 内部・外部断片化が最小である 環境に応じて最適に動作する 記載するコードは一部を抜き出しています. Buddy system オブジェクトの相方(buddy)を決めて, 処理の効率化を測るシステムになります. "Buddy memory allocation"では, メモリブロックを2分木で管理して, 兄弟の節を相方と考えます. 実装が2分木であるかではなく, 考え方が2分木です. メモリ割り当ての効率化とは, コンパクションの効率化になり

    Buddy memory allocation by bitmap - Qiita
  • 自作OSのメモリ管理をBuddy Systemで実装してみて学んだこと | ドクセル

  • Linuxのメモリ割り当てアルゴリズムを追う Buddy Memory Allocation編

    はじめに この記事はコネヒトAdvent Calendar2023の5日目の記事です。 世界中で広く使われているLinuxがどのようなメモリ割り当てアルゴリズムを使って物理メモリを管理しているのか、その仕組みには以前から興味がありました。 そこで、Linuxでメモリ割り当てアルゴリズムとして使用されている、Buddy Memory AllocationとSlab Allocationを自作しているOSに実装したのですが、日語の記事や情報があまりなく実装するのに結構時間がかかってしまいました。(両者とも日語版Wikipediaにすら載っていませんでした)なので、日語の情報が少ないのならばこの機会に残しておこうと思い、この記事を書くことにしました。 記事では、Buddy Memory Allocationに焦点を当て、その仕組みを紹介していきたいと思います。 ↓ 後編の記事です 前提

    Linuxのメモリ割り当てアルゴリズムを追う Buddy Memory Allocation編
  • 第6回 Linux Kernelメモリ管理最新動向[その2] | gihyo.jp

    2012年6月6日~8日にLinuxCon Japan 2012 が開催されます。ここではLinux Kernelの最新技術の発表や議論がいろいろ行われるのですが、このカンファレンスを楽しむ手助けとなる記事を…ということで、最近のLinux Kernelのメモリ管理の以下のトピックについて、2回に分けて紹介しています。 第2回目の今回は、以下のテーマについて説明します。 ファイルシステム、デバイスと連携したエンハンス メモリ資源管理機能(cgroup) CleanCache ファイルシステム・デバイスと連携したエンハンス I/O less dirty throttling Linuxでは「ファイルシステムに書き戻す必要のあるデータを持ったページ」をdirty pageと呼びます。これらのページはファイルシステムにデータを書くまでは破棄できませんから、メモリ回収前にI/Oを行う必要があります

    第6回 Linux Kernelメモリ管理最新動向[その2] | gihyo.jp
  • メモリプロファイラ「Memray」の解説 | gihyo.jp

    Memray公式サイトのキャプチャ インストール方法は以下のとおりです。 $ pip install memray Memrayの基的な使い方 Memrayがインストールされていると、memrayコマンドが使えるようになります。 プロファイリング対象のスクリプトをmemrayから実行すると、スクリプトを実行した同じフォルダに実行時のプロファイリング結果がバイナリ形式でファイルに保存されます。 プロファイルの実行 サンプルのPythonスクリプトとしてsample.pyを準備します。以下のコードでは、状態表示をわかりやすくするために1秒間の待ちを入れています。実行内容は、リスト内包表記で要素数が約1億個のリストを生成しています。 sample.py - リスト内包表記でリストを作る import time time.sleep(1) # 状態表示をわかりやすくするために1秒待つ resul

    メモリプロファイラ「Memray」の解説 | gihyo.jp
  • Huge Page まとめ

    Huge Page まとめ この文書では、Linux カーネルの機能を中心に、 huge page に関連するメモ リ管理の機能についてまとめる。概観とキーワードの把握、およびリファレン スの提供を目的である。特に non-trasparent な huge page と transparent huge page の違いとそれらの境界を把握することをひとつの主眼としている。 そのため、詳細さと網羅性はスコープ外である。 前置き、または免責 Intel x86_64 上で Linux を動かす状況を想定している。アーキテクチャ 依存、カーネル依存な事項は、一部触れられている部分もあるが、それ以上 ではない。 Linux kernel について、バージョン依存、config 依存な部分はスコープ外 である。動作確認は CentOS 7.2 で行った。 目次 Table of Contents

    Huge Page まとめ
  • 第5回 Linux Kernelメモリ管理最新動向[その1] | gihyo.jp

    2012年6月6日~8日にLinuxCon Japan 2012が開催されます。ここではLinux Kernelの最新技術の発表や議論がいろいろ行われるのですが、カンファレンスを楽しむ手助けとなる記事を…ということで、最近のLinux Kernelのメモリ管理の以下のトピックについて、2回に分けて紹介したいと思います。 今回は、 NUMA対応 組込みシステム向けの新機能 次回は ファイルシステム、デバイスと連携したエンハンス メモリ資源管理機能(cgroup) CleanCache を取り上げます。 それぞれ、LKMLでどのような提案があって、提案の理由は何か? 現在はどうなっているのか? ということを簡単に紹介したいと思います。 NUMA対応 性能エンハンス機能として現在議論されているのが、NUMAマシン上のアプリケーションのチューニング機能です。現在、全く別の方式が有名ハッカー2人から

    第5回 Linux Kernelメモリ管理最新動向[その1] | gihyo.jp
  • プロセスにもslabにも記録されないメモリ使用領域を調べてたら、zfsのarcサイズ設定が原因だった話

    概要 自分で構築したProxmox VE(PVE)のwebコンソールを眺めていたら、 4GBメモリのVMを4台しか起動していないのに仮想ホストでは48GB中37GBもメモリが使用されていた。 それの原因を突き止めるために調べていたらzfsが原因ということが判明した。 何も知らず、何も気にせず、zfsでPVEを構築していたら気付かない事象だと感じたのと、 メモリについて知ったことが多いため記事にした。 調査1(ホスト再起動) 困った時はホスト再起動するのが一番ということで、まずは再起動。 再起動後はメモリをほとんど使用されていなく、VM起動してもVMのメモリ領域くらいしか使われていない。 これで解決したと思い放置していたら、いつの間にかメモリ使用量が増えている。 なので変なプロセスがいるとかではなく、何かが起きていることがわかった。 調査2(プロセス確認) まずはメモリ使用量を確認する。 /

    プロセスにもslabにも記録されないメモリ使用領域を調べてたら、zfsのarcサイズ設定が原因だった話
    rin51
    rin51 2021/11/09
    メモリについてのトラブルシューティングの手順が書かれている
  • Rustのメモリ管理機能とその特徴

    初出:技術評論社刊「ソフトウェアデザイン 2021年9月号」 先日、技術評論社よりRustのメモリ管理機能についての特集に寄稿させて頂きました。 この記事は自分が寄稿させていただいた記事をブログ用に一部推敲・加筆を加えたものです。 なお、ソフトウェアデザインでの特集ではより実践的な例でのメモリ管理についての解説もあるので、興味のある方は誌のほうも手にとっていただければと思います。 プログラム言語におけるメモリ管理の課題プログラミングにおける課題の一つとしてどうやってメモリ領域(ヒープ領域)を管理するかというものがあります。 C言語ではmalloc/free関数などを用いて手動でメモリを管理しています。 これらの関数はメモリアドレスを示すポインタを介してメモリ管理を行います。 malloc関数は必要なメモリ領域を確保してその先頭番地のポインタを返し、プログラム内ではその番地のメモリを読み書

  • 無視できないフラグメンテーション問題への解答は?(1/2) - @IT

    1月版 無視できないフラグメンテーション問題への解答は? 小崎資広 2010/2/10 当初、今回はmemory compactionとtransparent hugepageという2つのトピックを取り上げ「Hugepage大特集」にしようと思っていたのですが、並列プログラミングカンファレンスに触発され(正確には、そのカンファレンスに参加できなくて悔しかったことに触発され)、後者を急きょ、ロックレスネタに差し替えて紹介します。 でもこれが大失敗で、調査が大変過ぎて泣けたうえに、スケジュールがとんでもないことに。人間、思い付きで行動してはいけないといういい見ですね。 Melの悲願なるか? Memory Compactionチャレンジ Mel Gormanは、Memory Compaction v1パッチシリーズを投稿しました。これは「Linuxメモリ管理の最先端を探る」で説明したAnti

  • Linux メモリ断片化 (外部フラグメンテーション) の概要と解消方法 - Qiita

    ■ 記事概要 Linux OS におけるメモリ断片化 1 ( 以降、断片化 ) について、調査したことのまとめ。 ■ 要約 断片化していると、空きメモリが十分あるにも関わらず、メモリ確保に失敗することがある。 断片化の影響を受けるのは、DMA ( Direct Memory Access ) のように物理メモリ領域を直接参照する必要があるもの ( 仮想メモリを使える場合は、物理メモリ領域が連続している必要がないため影響なし )。 断片化のレベルは /proc/buddyinfo や /sys/kernel/debug/extfrag/unusable_index から確認可能。 明示的に断片化を解消する方法は、OS 再起動と、# echo 1 > /proc/sys/vm/compact_memory がある。 ■ 物理メモリ領域について 断片化の話の前に物理メモリ領域について整理する。

    Linux メモリ断片化 (外部フラグメンテーション) の概要と解消方法 - Qiita
  • メモリのデフラグはどうやって動いてる? Linux Kernelの「Compaction」にみる断片化解消の仕組み

    Kernel/VM探検隊はカーネルや仮想マシンなどを代表とした、低レイヤーな話題でワイワイ盛り上がるマニアックな勉強会です。齊加氏は、Linux KernelコードからCompaction機能の仕組みや工夫点を調査した結果について発表しました。 メモリの虫い状態を緩和するデフラグメンテーション 齊加匠氏:「Deep Dive into the Linux Kernel メモリ管理におけるCompaction機能について」というタイトルで株式会社エヌ・ティ・ティ・データの齋加が発表します。 自己紹介です。所属は株式会社エヌ・ティ・ティ・データで、業務はアプリケーション開発です。OSは関係ないんですが、アプリケーション開発をしていて、主にSpringを使っています。好きなものはGolangやArch Linuxです。かねてよりメモリ管理に興味があって、Linux Kernelのメモリ管理につ

    メモリのデフラグはどうやって動いてる? Linux Kernelの「Compaction」にみる断片化解消の仕組み
  • E.2.18. /proc/meminfo - Red Hat Customer Portal

    導入ガイド I. システムの基設定 Expand section "I. システムの基設定" Collapse section "I. システムの基設定" 1. キーボードの設定 Expand section "1. キーボードの設定" Collapse section "1. キーボードの設定" 1.1. キーボードレイアウトの変更 1.2. キーボードレイアウト表示器の追加 1.3. 一休みの設定 2. 日付と時刻の設定 Expand section "2. 日付と時刻の設定" Collapse section "2. 日付と時刻の設定" 2.1. 日付/時刻のプロパティのツール Expand section "2.1. 日付/時刻のプロパティのツール" Collapse section "2.1. 日付/時刻のプロパティのツール" 2.1.1. 日付と時刻のプロパティ 2.1.

    E.2.18. /proc/meminfo - Red Hat Customer Portal
  • LowMemoryKiller 〜AndroidのActivityが破棄される仕組み〜 - Qiita

    この記事は、LIFULLその2 Advent Calendar 2020の23日目の記事です。 今回は、Android低レイヤーな話を取り上げてみようと思います。 具体的には、OOM Killerでプロセスがkillされるのを未然に防ぐLowMemoryKillerの仕組みについてです。 ネイティブアプリの開発は、よりメモリの事を意識した開発が必要だなと日々感じていたので、もっと低いレイヤーで何が行われているかをちゃんと理解したいと思ったのがきっかけで、勉強してきた内容になります。 読んでいただけたらこの辺の内容を理解できる内容になっていると思います。 LowMemoryKillerの仕組み Activityが破棄される基準 onSaveInstanceState()でBundleに保存するデータは実際どこに保存されているのか Androidエンジニアじゃなくても、Androidの世界を

    LowMemoryKiller 〜AndroidのActivityが破棄される仕組み〜 - Qiita
    rin51
    rin51 2021/07/01
    艦これアプリがいつのまにかkillされてるのはこういうことか
  • 日本半導体産業年代記

    以前にこんな日記を投下した半導体業界人の増田です。 https://anond.hatelabo.jp/20200813115920 https://anond.hatelabo.jp/20200813164528 久々に日記を書きたくなったので、今回は方向性を変えて年代記風の記事を投下してみます。 私自身は業界の全盛期である80年代~90年代前半を経験しておらず、当時の状況を記述するのに十分な知識がないため、その時代については省いています。 ということで、私がこの業界に入ることになる少し前の90年代半ばから物語を開始します。 ※工場の呼び名は企業の再編によって変わる事が多々あるので、原則立地で表記している。 1990年代半ばごろ 時代の転換点80年代後半に栄華を極めた日半導体産業であったが、日米貿易摩擦の影響で一時に比べて勢いを失っていた。 また、韓国企業の台頭により得意分野のDRAM

    日本半導体産業年代記
  • Chromium のメモリ管理 (PartitionAlloc) - Qiita

    はじめに Chromium は、独自のヒープ管理機構を実装しており、OS が用意するヒープを使いません。その代わりに ParitionAlloc と Oilpan と呼ばれる 2 つのヒープ管理機構が存在し、確保するオブジェクトの種類によって使い分けられています。記事では PartitionAlloc の詳細動作について紹介します。 PartitionAlloc 概要と特徴 Chromium プロジェクト公式の概要はこちらです。 PartitionAlloc Design https://chromium.googlesource.com/chromium/src.git/+/master/base/allocator/partition_allocator/PartitionAlloc.md デザイン上の特徴としては、メモリ領域をオブジェクトの種類と確保するサイズによって明確に分けてい

    Chromium のメモリ管理 (PartitionAlloc) - Qiita
  • プロセスのVSZ,RSSとfree,meminfo挙動を実機で確認 - のぴぴのメモ

    1.はじめに 1-1.この記事の要旨 1-2.(予習)メモリに関する指標とlinuxのメモリ挙動について 2.検証環境と検証方法 2-1.検証環境 2-2.検証方法 2-3.測定方法 (1)psコマンドによるVSZ,RSS情報の取得 (2)freeコマンドとmeminfo情報の取得 3.結果 3-1.全体の結果 3-2.プロセスのVSZ/RSS挙動 ポイント① malloc()した時の挙動→VSZのみ増加 ポイント② 1回目のデータread時→RSSは増えない ポイント③ データwrite→RSSが増加する 3-3.システムワイドな挙動(freeコマンド/meminfo) ポイント① malloc()した時の挙動→usedもAnonymousPageも増えない ポイント②1回目のデータread時→変化しない。 ポイント③ データwrite→used上昇、AnonymousPage上昇 4.

    プロセスのVSZ,RSSとfree,meminfo挙動を実機で確認 - のぴぴのメモ
    rin51
    rin51 2021/04/06
    rssやvmsなど
  • GitHub - microsoft/mimalloc: mimalloc is a compact general purpose allocator with excellent performance.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

    GitHub - microsoft/mimalloc: mimalloc is a compact general purpose allocator with excellent performance.
  • mimalloc のメモリ管理 - Qiita

    Microsoft の mimalloc は面白い割り切り方で、小さいソースコードで高速なアロケータを実装しています。 確保するメモリブロックのサイズを、 Small (~8KiB), Large (~512KiB), Huge (512KiB~) の3つに分類し、 Small と Large は同じアルゴリズムで管理し、 Huge は OS 任せにして、 Small と Large は同じアルゴリズムをうまく利用しています。 基礎 OSはpage (x86では基 4KiB) ごとにメモリをプロセスに割り当てています。 しかしアプリケーションではずっと小さいメモリブロックが必要になることが多くあります。また、必要になるたびに毎回OSからメモリを割り当ててもらうのはパフォーマンスも悪いです。 mimalloc やその他の malloc 実装 (以降 malloc と呼びます) は OS か

    mimalloc のメモリ管理 - Qiita