developer's diary

最近はc#のエントリが多いです

C初心者がmemcached-1.4.5を追いかける。(12)

C初心者がmemcached-1.4.5を追いかける。(11)の続き
ソースはコチラにてDLしました。


getoptで受け取ったパラメータによって処理を行っている部分を追いかける。

memcached.c(4344行目あたり)

        case 'k':
            lock_memory = true;
            break;
          "k"   /* lock down all paged memory */


lock_memoryはmainの中で宣言されている変数。

int main (int argc, char **argv) {
    int c;
    bool lock_memory = false;

使用している箇所は一箇所だけだ。
memcached.c(4576行目あたり)

    /* lock paged memory if needed */
    if (lock_memory) {
#ifdef HAVE_MLOCKALL
        int res = mlockall(MCL_CURRENT | MCL_FUTURE);
        if (res != 0) {
            fprintf(stderr, "warning: -k invalid, mlockall() failed: %s\n",
                    strerror(errno));
        }
#else
        fprintf(stderr, "warning: -k invalid, mlockall() not supported on this platform.  proceeding without.\n");
#endif
    }

mlockallが使用できる場合・・・なんだろうか。HAVE_MLOCKALLはどこで定義しているのか?

mlock() と mlockall() はそれぞれ、呼び出し元プロセスの仮想アドレス空間の一部または全部を RAM 上にロックし、メモリがスワップエリアにページングされるのを防ぐ。

MCL_CURRENTとMCL_FUTUREもどこで定義しているのか分からない・・

MCL_CURRENTとMCL_FUTUREはmlockallで使う定数でした。
404 - エラー: 404

MCL_CURRENT
現在、プロセスのアドレス空間にマップされている全てのページをロックする。
MCL_FUTURE
将来、プロセスのアドレス空間にマップされる全てのページをロックする。 例えば、ヒープ (heap) やスタックの成長により新しく必要になったページだけで なく、新しくメモリマップされたファイルや共有メモリ領域もロックされる。

続きは↓
C初心者がmemcached-1.4.5を追いかける。(13){vオプションやvvv}