ホームページ >データベース >Redis >Redis がさまざまなメモリ アロケータを使用して断片化率を比較する方法

Redis がさまざまなメモリ アロケータを使用して断片化率を比較する方法

WBOY
WBOY転載
2023-05-26 10:58:211771ブラウズ

Redis の zmalloc.c のソース コードでは、次のコードを確認できます:

/* tcmalloc を使用するときに、malloc/free などを明示的にオーバーライドします。 */

#if 定義されています。 (USE_TCMALLOC )

#define malloc(size) tc_malloc(size)

tc_calloc(count,size) は calloc 関数の定義です

#define realloc(ptr,size) ) tc_realloc( ptr,size)

#define free(ptr) tc_free(ptr)

#elif defined(USE_JEMALLOC)

#define malloc(size) je_malloc(size) )

次の文はリクエストに応じて書き直されました。 ステートメント「#define calloc(count,size) je_calloc(count,size)」は、標準定義関数「calloc」を「je_calloc」という名前のカスタム関数に置き換えるために使用されます。 size) je_realloc(ptr,size)

#define free(ptr) je_free(ptr)

#endif

上記のコードから、Redis がコンパイル時にtcmalloc を使用する場合は、標準 libc の関数実装が tcmalloc に対応する関数に置き換えられます。この後、jemalloc が有効かどうかを確認しますが、有効でない場合は標準 libc のメモリ管理機能が使用されます。

最新バージョン 2.4.4 では、jemalloc がソース コード パッケージの一部として含まれており、直接使用できるようになりました。 tcmalloc を使用したい場合は、自分でインストールする必要があります。

tcmalloc パッケージのインストール方法について簡単に説明します。tcmalloc は google-proftools の一部であるため、実際には google-proftools をインストールする必要があります。 64 ビット マシンにインストールする場合は、必要な libunwind ライブラリを最初にインストールする必要があります。

wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz

tar zxvf libunwind-0.99-alpha.tar.gz

cd libunwind-0.99-alpha/

CFLAGS=-fPIC ./configure

make CFLAGS=-fPIC

make CFLAGS=-fPIC install

Redis がさまざまなメモリ アロケーターを使用する方法の断片化率の比較

# 次に、google-preftools をインストールします。

wget http://google-perftools.googlecode.com/files/ google- perftools-1.8.1.tar.gz

tar zxvf google-perftools-1.8.1.tar.gz

cd google-perftools-1.8.1/

。 /configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --disable-debugalloc --enable-minimal

make && make install

Sudo echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf #このファイルがない場合は、自分で作成してください

sudo /sbin/ldconfig

次に Redis をインストールし、tcmalloc を有効にするときに対応するパラメータを指定します。

## $curl -O http://redis.googlecode.com/files/redis-2.4.4.tar. gz

$ tar xzvf redis-2.4.4.tar.gz

# $ cd redis-2.4.4

# $ make USE_TCMALLOC=yes FORCE_LIBC_MALLOC=yes

# $ sudo make install

Redisを再起動すると、infoコマンドで使用されているメモリアロケータが確認できます。

この記事の主題に戻り、この記事では、tcmalloc、jemalloc、libc に対応する 3 つのメモリ アロケータについて説明します。以下は、Redis 情報情報から取得した、パフォーマンスと断片化率を評価するために設計された簡単なテスト結果です。テストでは異なるアロケーターが使用されました。以下に示すように、tcmalloc を使用すると断片化率が最も低くなり、jemalloc は 1.02、libc のアロケータ断片化率は 1.31 であることがわかります。 :675.57M

used_memory_rss:715169792

used_memory_peak:708814040

used_memory_peak_human:675.98M

mem_fragmentation_ratio:1.01

mem_ allocator:tcmalloc -1.7

used_memory:708381168

used_menory_human:675.56M

used_memory_rss:723587072

used_memory_peak:708803768

# used_memory_peak_human:675.97 M

mem_fragmentation_ratio:1.02

mem_allocator:jemalloc-2.2.1

used_memory:869000400

used_menory_human:828.74M

used_memory_rss:1136689152

used_memory_peak:868992208

used_memory_peak_human:828.74M

mem_fragmentation_ratio:1.31

mem_allocator:libc

以上がRedis がさまざまなメモリ アロケータを使用して断片化率を比較する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。