memcachedをソースからインストールする際のconfigureに

--enable-64bitをつける場合と、
つけない場合では何が異なるのでしょうか。

よろしくお願いします。

回答の条件
  • 1人10回まで
  • 登録:2009/01/05 12:19:58
  • 終了:2009/01/12 12:20:04

回答(5件)

id:zzz_1980 No.1

zzz_1980回答回数492ベストアンサー獲得回数642009/01/05 17:07:21

ポイント20pt

コンパイル時、gcc の option に -m64 が付き、ポインタが64bitアドレス空間をサポートしている環境で走る memcached が

build されます。

32bit 環境では --enable-64bit をつけても無視されます。configure の中で64bit環境かどうか見てますので。

(configure のテストスクリプトより引用)

int
main ()
{
return sizeof(void*) == 8 ? 0 : 1;

  ;
  return 0;
}
id:the_yakisoba

ご回答ありがとうございます。

64bitアドレス空間をサポートすることで変化がある部分は、

memcachedがキャッシュできるメモリの上限が変わるという認識で良いでしょうか。

2009/01/05 17:48:13
id:zzz_1980 No.2

zzz_1980回答回数492ベストアンサー獲得回数642009/01/05 18:40:09

ポイント20pt

memcachedがキャッシュできるメモリの上限が変わるという認識で良いでしょうか。

上限がかわるのか下限がかわるのかはアーキテクチャ依存なので、なんともいえませんが

「キャッシュできるメモリのサイズがかわる」ということでいいのでは。

id:the_yakisoba

再度回答ありがとうございます。

一般的に言われる32bit環境で利用可能なメモリは4Gまでという上限を超え、

利用できるかと思ったのですが、

コレはまた別の話でしょうか。

具体的にいうと、

memcachedの-mの起動オプションの上限が変わるのかと思いました。

2009/01/05 19:24:34
id:zzz_1980 No.3

zzz_1980回答回数492ベストアンサー獲得回数642009/01/06 14:07:29

ポイント20pt

具体的な例としてはどこに変化があるのでしょうか。

malloc の引数が変わります。

    if (prealloc) {
        /* Allocate everything in a big chunk with malloc */
        mem_base = malloc(mem_limit);
        if (mem_base != NULL) {
            mem_current = mem_base;
            mem_avail = mem_limit;
        } else {
            fprintf(stderr, "Warning: Failed to allocate requested memory in"
                    " one large chunk.\nWill allocate in smaller chunks\n");
        }
    }

起動のオプションに-Lが見当たらないのですが、

私が参照しているものとバージョンが異なるのでしょう。

id:the_yakisoba

ご回答ありがとうございます。

上記の結果、

memcachedを利用する際にはどの部分に変化が現れるのでしょうか。

2009/01/06 14:53:50
id:zzz_1980 No.4

zzz_1980回答回数492ベストアンサー獲得回数642009/01/06 16:02:01

ポイント20pt

memcachedを利用する際にはどの部分に変化が現れるのでしょうか。

memcached がデータのキャッシュに使う領域の大きさが増えます。memcached はこの領域を自前で管理して使いまわしています。

id:the_yakisoba

「memcached がデータのキャッシュに使う領域の大きさ」と、

起動時のオプションの-mで指定できる数値は異なるものを指しているのでしょうか。

2009/01/06 17:56:40
id:zzz_1980 No.5

zzz_1980回答回数492ベストアンサー獲得回数642009/01/07 10:04:45

ポイント20pt

「memcached がデータのキャッシュに使う領域の大きさ」と、

起動時のオプションの-mで指定できる数値は異なるものを指しているのでしょうか。

データをキャッシュするたびに malloc を呼んでメモリを確保していては処理が重くなるため、

初期化の際に -m で指定されたサイズのメモリをまとめて確保し、memcached 独自の手法にて

このメモリを使いまわしています。

確保したメモリすべてがデータのキャッシュに使われるわけではなくキャッシュの管理にも使われています。

というわけで、-m の指定のメモリがすべてデータキャッシュに使われるわけではない、ということです。

id:the_yakisoba

たびたびありがとうございます。

C言語は余りわからないのですが、

malloc の引数の元を少し見てみたところ、

memcached.cの-mオプションの引数が渡るようでした。

        case 'm':
            settings.maxbytes = ((size_t)atoi(optarg)) * 1024 * 1024;

つまりは、

このsettings.maxbytesが、

  • enable-64bitをつけると64bitに対応でき、

結果として4G以上のメモリを確保できるという認識でよいのでしょうか。

2009/01/07 11:58:07
  • id:zzz_1980
    残念ながら-m option の上限が増えるわけではないです。
  • id:the_yakisoba
    ちなみになのですが、
    -mでの上限は4Gなのでしょうか。
  • id:zzz_1980
    -m で指定できる最大の数は、そのプラットフォームの size_t が表現できる最大の正の整数です。
    size_t が int (符号付き32bit整数)が同じなら 0x7fffffff = 2G-1
    size_t が unsigned int (符号無し32bit整数)なら 0xffffffff = 4G-1
    ただし、-m の上限値が memcached のキャッシュの上限ではないようです。
    ちゃんとドキュメントとソースを読んでいないんですけれど-m を指定するより -L のほうがいいのでは。
  • id:the_yakisoba
    私が調べた限りでは、
    起動のオプションに-Lが見当たらないのですが、
    何かの間違いでしょうか。

    また2つめに回答いただいた、
    「キャッシュできるメモリのサイズがかわる」とは、
    具体的な例としてはどこに変化があるのでしょうか。

    たびたびお手数おかけしますがよろしくお願いします。
  • id:zzz_1980
    | このsettings.maxbytesが、
    | enable-64bitをつけると64bitに対応でき、
    -m64 をつけるだけで memcached が 64bit対応になるわけではなく、
    プラットフォーム側の支援(sizeof(int),sizeof(size_t),sizeof(void *)すべて8、さらにapiもすべて64bit対応) が
    必要です。

  • id:the_yakisoba
    プラットフォームについてはCent OS4.4のx86-64です。

    この環境において、
    すでにenable-64bitをつけずにインストールしているのですが、
    telnetで接続しstatsコマンドをたたくと、
    「STAT pointer_size 64」
    と表示されるのですが、
    これは64bitに対応していることではないのでしょうか。。。
  • id:zzz_1980
    たぶん対応しているでしょう。ソースコードをざっと見た感じでは
    普通(?)の64bit環境ではわざわざ enable 64bit をつけなくてもよさげですので。。。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません