差分

移動先: 案内検索

記憶管理

49 バイト追加, 2022年11月17日 (木) 15:17
/* 動的なメモリ領域確保 */
zswap[https://www.kernel.org/doc/Documentation/vm/zswap.txt]は、 Linux kernel version 3.15 から入った仮想メモリ圧縮 (Virtual Memory Compression)を利用したスワップで、外部記憶装置にページをスワップするのではなく、実メモリ上に作った圧縮ブロックデバイスにページをスワップする機能でです。実メモリ上にスワップできなくなった時に、これまでのスワップ機能で用意しているスワップ領域にスワップを始めます。
 
 
ディスクなどメモリから比較すると低速なストレージへのI/Oが少なくなるため、頻繁にページアウトが発生しスワップファイルへのI/Oがボトルネックになるようなケースでは有用な機能です。フラッシュメモリを使ったSSDのような書き換え上限があるような外部記憶装置上にスワップファイルを作ると頻繁なスワップはメディアの劣化が進むためzswapが有効であるという議論もあります。圧縮処理が行われるため、その分、CPUに負荷がかかります。ただし、それがI/Oのオーバーヘッドによる処理の低下と比較し、相対的にどちらに利益があるかは、個々のシステム構成によって変化する議論であることは注意してください。
* プログラム: malloctest.c
<syntaxhighlight lang='C' line="1" >
#include <stdlib.h>#include <errno.h>#include <unistd.h>#include <stdio.h>int main()
{
char *p;
free(p);
}
 
</syntaxhighlight>
<pre class="bash">
$ cc malloctest.c $ ./a.out & [1] 93627$ ps axu | grep a.out-o user,pid,vsize,rss,cmd USER PID VSZ RSS CMD hironobu 29813 87439 0.0 10752 0.0 525528 284 pts/8 S 17:32 6392 bashhironobu 93627 526788 0:00 580 ./a.outhironobu 93628 9928 3440 ps ---この並びは下の様になっています---o user,pid,vsize,rss,cmd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
</pre>
このプログラムは512MBメモリ領域をmalloc(3)を使いアロケーションしています。実行時の状況をpsで見てみると、VSZが525528、RSSが284となっています。VSZはVirtual を使いアロケーションしています。実行時の状況をpsで見てみると、VSZが526788、RSSが580となっています。VSZはVirtual memory Sizeのことで仮想記憶もふくめて全部のメモリサイズです。RSSはReal Set Sizeのことで、実メモリ(物理的なメモリ)で専有しているメモリサイズです。つまり、このプログラムは約523.5MBもの記憶領域を取っているにもかかわらず、実際の実メモリ上では284KBしか取られていません。 で専有しているメモリサイズです。つまり、このプログラムは約527MBもの記憶領域を取っているにもかかわらず、実際の実メモリ上では580KBしか取られていません。