タグ付けされた質問 「virtual-memory」

1
キャッシュをクリアするための/ proc / sys / vm / drop_cachesの設定
コールドキャッシュタイミングの一部として、OSキャッシュを解放しようとしています。(2019年1月取得した)カーネルのドキュメントは言います: drop_caches Writing to this will cause the kernel to drop clean caches, as well as reclaimable slab objects like dentries and inodes. Once dropped, their memory becomes free. To free pagecache: echo 1 > /proc/sys/vm/drop_caches To free reclaimable slab objects (includes dentries and inodes): echo 2 > /proc/sys/vm/drop_caches To …

1
/ proc / pid / smapsからプロセスのメモリ使用量に関する情報を取得する
の特定のプロセス/proc/<pid>/smaps、特定のマッピングエントリの場合: Shared_Clean Shared_Dirty Private_Clean Private_Dirty さShared_Clean+ Shared_Dirty他のプロセスと共有されているメモリの量を?共有RSSのようなものですか? 同様に、1つのプロセスでのみ使用可能なメモリ量はPrivate_Clean+ です。プライベートRSSのようなものですか?Private_Dirty PSS値はPrivateRSS +(SharedRSS /それを共有するプロセスの数)ですか? このリンクを読んだ後のいくつかの質問:LWN ここで、プロセス全体についてお話ししましょう。そのsmapsエントリは私たちが見ています。 プロセスのすべてのsmapsエントリに対してShared_Clean+ Shared_Dirty+ Private_Clean+ Private_Dirtyを実行すると、によって報告されたプロセスのRSSを取得することに気付きましたps。例えば ps -p $$ -o pid,rss すべてのの合計として私にRSS用(約)同じ値を与えるShared_Clean、Shared_Dirty、Private_Clean、Private_Dirtyエントリ内の/ proc / $$ / smaps。 しかし、プロセス全体のPSSはどうでしょうか?したがって、上記の例から、$$のPSSを取得するにはどうすればよいですか?すべてのsmapsマッピングにPSSエントリを追加して、$$のPSSに到達できますか? そして、プロセス全体のUSSはどうですか?もう一度上記の例を取り上げると、$ .. rightのすべてのsmapsエントリのPrivate_ *エントリのみを合計することで、$$でUSSに到着できると思います。 注: PSS =比例設定サイズ。 USS =一意のセットサイズ。

2
悪い `rm`でファイルを保存した後、マシンの電源を切るのはなぜですか?
古典的な状況:私は悪い実行し、rmすぐに間違ったファイルを削除したことを実現しました。(重要なことは何もありませんでしたが、最近のバックアップは許容範囲内でしたが、まだ迷惑です。) extundeleteまたはそのようなツールを使用してファイルを回復したい場合、さらなるディスクアクティビティが敵であることがわかったので、すぐに物理的にマシンの電源を切りました(つまり、haltコマンドではなく、電源ボタンで)。これは重要なタスクが実行されていない、または何も開いていないラップトップであるため、許容できる操作でした。(ところで、そのような状況で最初にすることは、プロセスhttps://unix.stackexchange.com/a/101247によって見つからないファイルがまだ開かれている可能性がある場合、最初に推定することであることをその後学びました-存在する場合、マシンの電源を切るのではなく、この方法で回復する必要があります。) それでも、マシンの電源を切った後、しばらく考えて、ファイルが適切なフォレンジックのためにライブシステムを起動する時間投資に見合わないと判断しました。そこで、マシンの電源を入れました。そして、ファイルがまだディスクに残っていることを発見しましrmた。電源を切る前にファイルがディスクに伝播されていませんでした。私は少しダンスをし、システム管理者の神に彼の予期せぬ許しに感謝しました。 私の質問は、これがどのように可能だったか、そしてrm実際にディスクに伝播されるまでの典型的な遅延とは何かを理解することです。ディスクIOはすぐにはフラッシュされず、しばらくの間メモリ内に置かれることはわかっていますが、ディスクジャーナルにより、保留中の操作が完全に失われないようにすばやく確認できると考えました。https://unix.stackexchange.com/a/78766は、ダーティページをフラッシュし、ジャーナル操作をフラッシュする別のメカニズムを示唆しているように見えますが、ジャーナルがa rmにどのように関与するかについての十分な詳細と、操作がフラッシュされます。 いくつかの詳細:データはLUKSボリューム内のext4パーティションにあり、マシンを起動してバックアップしたとき、次のことがわかりましたsyslog: Sep 24 10:24:58 gamma kernel: [ 11.457007] EXT4-fs (dm-0): 1 orphan inode deleted Sep 24 10:24:58 gamma kernel: [ 11.458393] EXT4-fs (dm-0): recovery complete Sep 24 10:24:58 gamma kernel: [ 11.482475] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null) しかし、私はそれがに関連していると確信していませんrm。 別の質問は、マシンの電源を落とすのではなく、保留中のディスク操作を実行しないようにカーネルに指示する方法があるかどうかです(ただし、どこかにダンプするなど)。(もちろん、保留中の操作を実行しないのは危険に思えますが、これはとにかくマシンの電源を切ったときに起こることであり、場合によってはそれがあなたを救う可能性があります。)たとえば、物理的な電源切断が簡単なオプションではないリモートサーバーの場合。

2
これはLinuxのページングの動作方法ですか?
Linuxシステムがページングに近づくと(つまり、私の場合、16GBのRAMがほぼいっぱいになり、16GBのスワップが完全に空になります)、新しいプロセスXがシステムが完全にロックするメモリを割り当てようとします。つまり、不均衡な量のページ(Xのメモリ割り当て要求の合計サイズと速度)がスワップアウトされるまでです。guiが完全に応答しなくなるだけでなく、sshdなどの基本的なサービスも完全にブロックされることに注意してください。 これらは2つのコード(明らかに粗雑な)であり、この動作をより「科学的な」方法でトリガーするために使用します。最初のコマンドは、コマンドラインから2つの数値x、yを取得し、合計x以上のバイトが割り当てられるまで、yバイトの複数のチャンクを割り当てて初期化します。そして、ただ無期限に眠ります。これは、システムをページングの寸前にするために使用されます。 #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> int main(int argc, char** argv) { long int max = -1; int mb = 0; long int size = 0; long int total = 0; char* buffer; if(argc > 1) { max = atol(argv[1]); size = atol(argv[2]); } printf("Max: %lu …

5
Linuxはセグメンテーションを使用せず、ページングのみを使用しますか?
Linuxプログラミングインターフェイスは、プロセスの仮想アドレススペースのレイアウトを表示します。図の各領域はセグメントですか? Linuxカーネルの理解から、 MMUのセグメンテーションユニットがセグメントとセグメント内のオフセットを仮想メモリアドレスにマップし、ページングユニットが仮想メモリアドレスを物理メモリアドレスにマップすることを意味するのは正しいですか? メモリ管理ユニット(MMU)は、セグメンテーションユニットと呼ばれるハードウェア回路を使用して、論理アドレスを線形アドレスに変換します。その後、ページングユニットと呼ばれる2番目のハードウェア回路が線形アドレスを物理アドレスに変換します(図2-1を参照)。 それでは、なぜLinuxはセグメンテーションを使用せず、ページングのみを使用すると言うのですか? 80x86マイクロプロセッサにはセグメンテーションが含まれており、プログラマがアプリケーションを論理的に関連するエンティティ(サブルーチン、グローバルデータエリア、ローカルデータエリアなど)に分割できるようになっています。ただし、 Linuxは非常に限られた方法でセグメンテーションを使用します。実際、セグメント化とページングは​​どちらもプロセスの物理アドレス空間を分離するために使用できるため、やや冗長です。セグメンテーションは各プロセスに異なる線形アドレス空間を割り当てることができますが、ページングは​​同じ線形アドレス空間を異なる物理アドレス空間にマッピングできます。Linuxでは、次の理由により、セグメンテーションよりもページングが優先されます。 •すべてのプロセスが同じセグメントレジスタ値を使用する場合、つまり、同じ一連のリニアアドレスを共有する場合、メモリ管理はより簡単になります。 •Linuxの設計目標の1つは、幅広いアーキテクチャへの移植性です。特に、RISCアーキテクチャでは、セグメンテーションのサポートが制限されています。 Linuxの2.6バージョンは、80x86アーキテクチャで必要な場合にのみセグメンテーションを使用します。

3
Debian Linuxがプロセスごとに最大128TiBの仮想アドレス空間を許可するのに64TiBの物理メモリしか許可しないのはなぜですか?
私はちょうどここを読んでください: プロセスあたり最大128TiBの仮想アドレス空間(2GiBではなく) 4GiB(またはPAE拡張を備えた64GiB)の代わりに64TiB物理メモリをサポート 何故ですか?つまり、物理メモリのサポートはカーネルまたは現在のハードウェアによって制限されていますか? 実際にアドレス指定できる物理メモリの2倍の仮想メモリ空​​間が必要なのはなぜですか?

6
Linuxは「RAMを使い果たす」ことができますか?
ホストされたVPSがRAMを使いすぎたために予期せずプロセスを強制終了することについて不満を述べている人々のウェブ上のいくつかの投稿を見ました。 これはどのように可能ですか?私は、すべての最新のOSが物理RAMを超えるものにディスクスワップを使用するだけで「無限RAM」を提供すると考えました。これは正しいです? プロセスが「RAM不足により強制終了」された場合、何が起こる可能性がありますか?

3
プロセスの実際のメモリ使用量
サーバーのメモリ使用量mysqlとapacheサーバー上のメモリ使用量は次のとおりです。pmapたとえば、出力によると、mysql約379Mを使用しており、277Mをapache使用しています。 [root@server ~]# pmap 10436 | grep total total 379564K [root@server ~]# pmap 10515 | grep total total 277588K これをの出力と比較するとtop、値がほぼ一致していることがわかります。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 10515 apache 20 0 271m 32m 3132 S 0.0 6.6 0:00.73 /usr/sbin/httpd 10436 mysql 20 0 370m 21m …

3
Linuxでスタック割り当てはどのように機能しますか?
OSは、スタックまたは他の何かのために有効な仮想スペースの固定量を予約しますか?大きなローカル変数を使用するだけでスタックオーバーフローを生成できますか? C仮定をテストするための小さなプログラムを作成しました。X86-64 CentOS 6.5で実行されています。 #include <string.h> #include <stdio.h> int main() { int n = 10240 * 1024; char a[n]; memset(a, 'x', n); printf("%x\n%x\n", &a[0], &a[n-1]); getchar(); return 0; } プログラムを実行する&a[0] = f0ceabe0と&a[n-1] = f16eabdf procマップはスタックを示します: 7ffff0cea000-7ffff16ec000. (10248 * 1024B) それから私は増加しようとしました n = 11240 * 1024 プログラムを実行する&a[0] = b6b36690と&a[n-1] = b763068f …

3
ページキャッシュに100%ページインされたファイルが別のプロセスによって変更されるとどうなりますか
ページキャッシュページが変更されると、ダーティとマークされ、ライトバックが必要になることがわかりますが、次の場合はどうなりますか。 シナリオ: 実行可能ファイルであるファイル/ apps / EXEは、ページキャッシュに完全にページインされ(そのページはすべてキャッシュ/メモリにあり)、プロセスPによって実行されています 連続リリースは、/ apps / EXEをまったく新しい実行可能ファイルに置き換えます。 前提1: プロセスP(および古い実行可能ファイルを参照するファイル記述子を持つ他の人)は、メモリ内の古い/ apps / EXEを問題なく使用し続け、そのパスを実行しようとする新しいプロセスが取得されると仮定します新しい実行可能ファイル。 仮定2: ファイルのすべてのページがメモリにマップされていない場合、ファイルのページを置き換えるページフォールトが発生するまで問題はなく、おそらくセグメンテーション違反が発生すると仮定しますか? 質問1: ファイルのすべてのページをvmtouchのようなものでロックすると、シナリオはまったく変わりませんか? 質問2: / apps / EXEがリモートNFS上にある場合、違いはありますか?(私は仮定しない) 2つの仮定を修正または検証し、2つの質問に答えてください。 これが、ある種の3.10.0-957.el7カーネルを備えたCentOS 7.6ボックスであると仮定しましょう。 更新:さらに考えてみると、このシナリオは他のダーティページシナリオと何の違いもないのではないかと思います。 新しいバイナリを書き込むプロセスは、すべてページングされているため、すべてのキャッシュページを読み取り、すべてのキャッシュページを取得し、それらのすべてのページがダーティとしてマークされると仮定します。ロックされている場合、参照カウントがゼロになった後、コアメモリを占有する無駄なページになります。 現在実行中のプログラムが終了すると、他のものはすべて新しいバイナリを使用すると思われます。それがすべて正しいと仮定すると、ファイルの一部のみがページインされる場合にのみ興味深いと思います。

5
プロセッサが仮想メモリをサポートするには、MMU(メモリ管理ユニット)チップが必要ですか?
プロセッサが仮想メモリをサポートするには、MMU(メモリ管理ユニット)チップが必要ですか? ソフトウェアでMMU機能をエミュレートすることはできますか?(おそらくパフォーマンスに大きな影響を与えることは承知しています)。

2
Mac OS Xで最大スワップスペースを増やすにはどうすればよいですか?
Mac OS X Yosemite 10.10.5では、128 GBのメモリ(Cで記述されたコマンドラインプログラム)を割り当てて使用する必要がある計算を実行しようとすると、カーネルは極端な偏見でプロセスを強制終了します。このコンソールログエントリは、1つのインスタンスの例です。 9/25/15 7:08:40.000 PMカーネル[0]:低スワップ:PID 6202(huffgrp)の強制終了 64 GBのメモリを割り当てて使用すると、計算は正常に機能し、妥当な時間内に動作します。Macのハードドライブには32 GBのRAMとbeaucoupスペースがあります。8 GBのRAMを搭載した別のMacでもこれを試してみました。64GBの計算も同様にうまく動作しますが、もちろん時間がかかりますが、128 GBの計算はカーネルによって同様に殺されます。 ところで、malloc()どれだけのスペースを要求しても、エラーが返されることはありません。カーネルは、プロセスが実際に使用するメモリが多すぎるとプロセスを強制終了します。その結果、ハードドライブへの大量のスワップが発生します。 そのため、64 GBから128 GBの間に秘密のスワップスペース制限があるようです。 私の質問は次のとおりです。より多くのスワップ領域を許可するようにカーネルを再構成するにはどうすればよいですか?有望なファイルを見つけました/System/Library/LaunchDaemons/com.apple.dynamic_pager.plistが、秘密の番号はそこにありません。のマニュアルページにdynamic_pagerは、スワップファイルの名前と場所を設定するだけであると書かれています。-S作成されたスワップファイルのサイズを設定するオプションを文書化した同じマニュアルページの古いバージョンがあります。160 GBのスワップファイルを要求してみましたが、効果はありませんでした。スワップファイルはそれぞれ1 GBのままであり、プロセスは依然としてカーネルによって強制終了されました。

1
pmapの出力の意味
私はmain.cLinuxで書いた: int main() { while (1){} } コンパイルして起動すると、次のことができpmapます。 # pmap 28578 28578: ./a.out 0000000000400000 4K r-x-- /root/a.out 0000000000600000 4K r---- /root/a.out 0000000000601000 4K rw--- /root/a.out 00007f87c16c2000 1524K r-x-- /lib/libc-2.11.1.so 00007f87c183f000 2044K ----- /lib/libc-2.11.1.so 00007f87c1a3e000 16K r---- /lib/libc-2.11.1.so 00007f87c1a42000 4K rw--- /lib/libc-2.11.1.so 00007f87c1a43000 20K rw--- [ anon ] 00007f87c1a48000 128K r-x-- …

1
多くのGnome 3.28デーモンは、100 GBを超えるVIRTを使用しています。どうして?
最近、このラップトップをFedora 28 Betaにアップデートし、Gnome 3.28を付けました。物事はほとんど良いです。 しかし、いくつかは奇妙です。これはすべて仮想メモリであるため、問題は発生しません。 しかし、これらのデーモンが100 GBを超える仮想メモリを割り当てるのはなぜですか? 0 1000 2012 1719 20 0 101649024 32904 SyS_po Sl ? 0:00 /usr/libexec/goa-daemon 0 1000 1983 1719 20 0 101704260 46416 SyS_po Sl ? 0:00 /usr/libexec/gnome-shell-calendar-server 0 1000 2210 1765 20 0 101736292 33656 SyS_po Sl+ tty2 0:00 /usr/libexec/deja-dup/deja-dup-monitor 0 1000 2452 1719 …

2
誰かが実際に透明な巨大ページを使用して利益を得ていますか?
私は最近、透過的な巨大ページのパフォーマンスの問題に苦労しており、多くのデータベースシステムがオフにすることを推奨していることに気付きました。私はOracle、Postgresql、MySQL、Cassandra、NuoDB、Redis、Hadoopなどについて話している。 たとえば: Peter Zaitsev(2014-07-23)。なぜTokuDBは透明のhugepagesを嫌っています。ペルコナ。 ミケーレ・ケイシー(2013-09-17)。透明で巨大なページのパフォーマンスの問題。オラクル。 Adam AbrevayaおよびOleg Levin(2014-05-15)。 Linux Transparent Huge Pages、JEMalloc、NuoDB。NuoDB DevCentre。 だから私は思っています:この機能からどのような種類のワークロードが恩恵を受けるのですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.