virtual-memory

キャッシュされていないページのページテーブルアドレスフィールド
virtual-memory

キャッシュされていないページのページテーブルアドレスフィールド

LinuxシリーズシステムのBryantとO'Hallaronの(やや抽象的な)ページテーブルモデルによると、各ページテーブルエントリ(PTE)には3つの値のうちの1つを保持するアドレスフィールドがあります。 (1)物理アドレス(実際にはページ番号)は、(2)ページを見つけることができる長期ストレージデバイスの対応する場所識別子、または(3)未割り当てページを示す0です。ページが長期ストレージからメインメモリに置き換えられたとします。このアカウントでは、カーネルは長期保存アドレス(2)を物理アドレス(1)に置き換えます。書いた場合、元の長期保存アドレスをPT...

Admin

Linuxで非権利モードでページテーブルを読み取ることはできますか?
virtual-memory

Linuxで非権利モードでページテーブルを読み取ることはできますか?

これはUnixとLinuxでの最初の質問です。現在、仮想メモリについて学んでいます。 この素晴らしい論文に感謝します。ドラマー(CCS'16)。 Android 6.0.1では、バディアロケータをだまして脆弱なページにページテーブルページを割り当てます(対応するLinuxカーネルは~3.18.10.) 権限のない作業を行います(最終的な目的は次のとおりです。)root権限のエスカレーション.). しかし、ユーザーモードでページテーブルページにアクセスする方法がわかりません。仮想メモリでは、仮想メモリアドレス全体がカーネル空間とユーザ空間(例えば、上位 1GB...

Admin

ページサイズが4096ではないx86_64用のLinuxをコンパイルする方法は?
virtual-memory

ページサイズが4096ではないx86_64用のLinuxをコンパイルする方法は?

ページサイズが4096より大きいx64 Linuxカーネルをコンパイルしようとしています。ブロックサイズの大きいファイルシステムはVFSを介してマウントする必要があります。他のアーキテクチャでは、カーネル構成を使用してページサイズを選択できます。 x86_64では動作しません。 x86_64でページサイズを変更できますか? PAGE_SHIFTを16に増やそうとしましたが、arch/x86/include/asm/page_types.hエラーが発生しました。 x86_64でさまざまなページサイズでビルドできる場合、どのページサイズがサポートされ、正しい設定...

Admin

シーケンシャルアクセスとランダムアクセスメモリページエラーの違いは何ですか?
virtual-memory

シーケンシャルアクセスとランダムアクセスメモリページエラーの違いは何ですか?

マップされた(しかしロードされていない)メモリ値のシーケンスがあり、それにアクセスしようとしているとします。ページエラーが発生してカーネルがそれをメモリにロードすると、カーネルはランダムアクセスよりも順次アクセスを高速化するためにどのような最適化を実行しますか? たとえば、100ページのメモリをマッピングすると、シーケンシャルアクセスは1ページ、2ページ、3ページを読み取り、ランダムアクセスは10ページ、2ページ、5ページをランダムに読み込みます。遅延時間の違いがある場合は何で説明できますか? ...

Admin

Linux 4.xで4kB RSSを実装する方法は?
virtual-memory

Linux 4.xで4kB RSSを実装する方法は?

私は90年代後半からオープンソースIRCボットの開発者/維持管理者として活動してきました。目標は、常に小さなメモリ空間内でできるだけ多様で便利にすることです。 2000年代には、便利なプログラムを4kB RSSに圧縮した概念証明コードも書いていましたが、これは2.4カーネルで実装するのは難しくありませんでした。私はinitとAgettyを使ってこれを達成しました。つまり、単一の4kBメモリページ内に常駐して実行するようにしました。 ある日、ボットにメモリ使用量を報告するよう依頼したとき、ボットは次のように答えました。 [Mar 27 2018] <bo...

Admin

Linuxカーネルのページに仮想アドレスを手動でマップする方法は?
virtual-memory

Linuxカーネルのページに仮想アドレスを手動でマップする方法は?

私は組み込みLinuxシステム(kernel-5.10.24)を開発しており、カーネルメモリマッピングテストを試しています。 このテストも同様のことを行いますvmalloc()。仮想メモリアドレスと利用可能なページを取得し、仮想メモリアドレスをページまたは物理アドレスにマッピングする必要があります。 map_kernel_range()とのカーネル関数は利用できるようですが、unmap_kernel_range()外部カーネルモジュールにエクスポートされません。 それでは、このマッピングを実行できる他のカーネルAPIはありますか? ...

Admin

LinuxはRAMキャッシュを無効にします。
virtual-memory

LinuxはRAMキャッシュを無効にします。

私はARM M1 MacBook Airでカーネル6.5を使用してDebian stableを実行しています。最大の問題は、RAMとVRAMが統合されていることであり、使用されているRAMの量がVRAMであることを確認するための具体的な方法はありません(Asahi Linuxメイン開発者による確認)。 これにより、空きRAMが500MiBに近づくと、システムは継続的に停止します。理論的には、このプログラムを使用してメモリを割り当てることができ、カーネルはそれを終了しますstressが、実際にはあまりにも多くのメモリを使用する他のプログラムは、カーネルが使用さ...

Admin

プロセスメモリレイアウト - ヒープ、データ、mmap領域の違い
virtual-memory

プロセスメモリレイアウト - ヒープ、データ、mmap領域の違い

私はオンラインでLinuxプロセスのメモリレイアウトについて矛盾するか不明な説明をたくさん見ました。通常よく使われる写真良い: 別の共通点がある説明する言うことができる: データセグメントには、事前定義された値があり、変更できるグローバルまたは静的変数のみが含まれます。ヒープには、通常、データセグメントの終わりから始まるヒープセクションと呼ばれるメモリ部分に格納されている動的に割り当てられたデータが含まれます。 そして返品: 通常、ヒープはCランタイムによって生成および管理される特定のメモリ領域ですmalloc(システムコールを使用して増減brk し...

Admin

GPartedでサイズ変更操作を適用した後もdf -hに表示されないCentOS VMの拡張仮想ハードディスク
virtual-memory

GPartedでサイズ変更操作を適用した後もdf -hに表示されないCentOS VMの拡張仮想ハードディスク

CentOS VM(Windows Hyper-V Manager)の仮想ドライブを25 GBから40 GBに拡張しました。 /dev/sda2 また、GParted を使用して、新しく割り当てられた 15 GB スペース全体を使用するように既存のスペースのサイズを変更します (すべて適用クリック)。 しかし、まだ表示されていませんdf -h。私が取るべき他の措置がありますか? ...

Admin

どの物理アドレスがどのNUMAノードに属しているかを確認するには?
virtual-memory

どの物理アドレスがどのNUMAノードに属しているかを確認するには?

物理アドレスがあり、それが属するNUMAノードを確認したいと思います。 検索中にNUMAノードを確認するいくつかの方法が見つかりました。仮想アドレス(例move_pages:)ですが、実際の住所は含まれていません。おそらく2番目に良い方法は、pagemap物理アドレスを仮想アドレスに逆変換することを確認することです。 ...

Admin

スタックとヒープの割り当てに関するシステムコール
virtual-memory

スタックとヒープの割り当てに関するシステムコール

プロセスアドレス空間にはスタックとヒープがあります。関数が呼び出されるかローカル変数が宣言されると、カーネルは物理アドレスを割り当て、仮想アドレスと物理アドレスのマッピングを生成する必要があるため、これにはシステム呼び出しが必要です。どうしたの? Linuxでは、スタック割り当てはどのように機能しますか? 最初の答えは次のとおりです。 ((straceに従って)システムコールなしでスタックが大きくなることがわかりました。したがって、これはカーネルが自動的にスタックを大きくするという意味です(上記の「暗黙的」が意味するものです)。つまり、プロセスで明示的なmm...

Admin

/proc/ を使用してサブタスク(スレッド)のスタックを見つける方法/マップ?
virtual-memory

/proc/ を使用してサブタスク(スレッド)のスタックを見つける方法/マップ?

目的: Linux環境でポインタスキャナを作成する方法を理論化しています。 婦人声明: 私の結果は、Debian Bookworm(現在の安定版)とカスタムカーネルを持つGentooシステムでテストされました。違いは観察されなかった。 質問: ターゲットプロセスにデバッガを接続せずに、各スレッド/サブタスクスタックのVMAを識別できることを願っています。これは以下を使用して可能でなければなりませんプロセス擬似ファイルシステム 議論する: Linux 4.5より前は、パス名フィールドに親ジョブのスタック領域が表示され/proc/[parent_tid]/ma...

Admin

mmap I/O レイテンシを測定する方法は?
virtual-memory

mmap I/O レイテンシを測定する方法は?

ディスクI / Oが大量に進行している間に速度が遅くなったりブロックされたりするように見えるアプリケーションがあるため、アプリケーションのI / O操作がブロックされていると思われます。また何が間違っているのか想像できませんが、確認したかったです。問題は、アプリケーションが主にI / Oにmmapファイルを使用するため、mmapメモリからI / Oをブロックすることがページエラーであることを知りませんstrace。しかし、ページエラーのためにスレッドの実行が一時停止された時間を測定する方法はありますか? ...

Admin

まだ86GBのRAMを使用できますが、システムでスワップを多用するのはなぜですか?
virtual-memory

まだ86GBのRAMを使用できますが、システムでスワップを多用するのはなぜですか?

パフォーマンスの問題ではなく、何が起こっているのか、そしてどのように機能するのかを理解したいという願望です。私のシステムには128 GBのRAMを含む多くのリソースがあります。私が見つけたもの(そして十分なランタイムがあるたびに起こったこと)は、まだ86 GBのメモリが残っているときにシステムが利用可能なスワップスペース全体を使い始めるということです。 以下は、システムの状態を示すhtopのスクリーンショットです。 Swappinessは5に設定されます。 $ sysctl vm.swappiness vm.swappiness = 5 vmstatディ...

Admin

Linuxのヒープメモリ割り当て
virtual-memory

Linuxのヒープメモリ割り当て

プロセスが「x」だけのヒープを要求すると、Linuxによって割り当てられたメモリが実際に物理的に連続しているかどうかが混乱します。 私の現在の理解は次のとおりです。 Linuxのメモリ割り当て単位はページサイズです。デフォルトでは、ページサイズは4KBです。ページはRAM上で物理的に連続しています。 /proc/buddyinfoの出力から、合計メモリがグループ0、グループ1、...グループ10など、複数のグループに分かれていることがわかります。 各グループ「n」には、それぞれサイズが4 KB *(2 ^ n)の複数の物理的に連続したメモリページが含まれてい...

Admin