This is a simple test to determine memory usage for storing object
locations in RAM, indexed by node id, and optimized for
        - rapid object id insertion, deletion
        - easy method to determine all objects in a single node

Compile with

        gcc -O -Wall `pkg-config glib-2.0 --cflags` -o btest2 btest2.c \
                `pkg-config glib-2.0 --libs`

RAM usage with 10,000,000 objects, 3-way replication: 750 MB
RAM usage with 20,000,000 objects, 3-way replication: 1.5 GB


#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <glib.h>

enum {
        N_OBJS          = 5 * 1000000,
        N_NID           = 3,
        N_NODES         = 1000,
};

static GHashTable *ht[N_NODES];

static void store_oid_in_node(int node, int oid)
{
        g_hash_table_insert(ht[node], GINT_TO_POINTER(oid), NULL);
}

int main (int argc, char *argv[])
{
        int oid, i, n_objs = 0;
        long x = 1;

        srand(time(NULL));

        /* obtain number of objects for test */
        if (argc > 1)
                n_objs = atoi(argv[1]);
        if (n_objs < 1)
                n_objs = N_OBJS;

        /* create N_NODES hash tables for oid indices */
        for (i = 0; i < N_NODES; i++) {
                ht[i] = g_hash_table_new(g_direct_hash, g_direct_equal);
                if (!ht[i])
                        abort();
        }

        /* populate hash tables with N_NID-way simulated replication */
        for (oid = 1; oid < n_objs; oid++)
                for (i = 0; i < N_NID; i++) {
                        int node;

                        node = rand() % N_NODES;
                        store_oid_in_node(node, oid);
                }

        /*
         * once this prints, you may visit top(1) to determine
         * memory usage
         */

        printf("Table build completed.  Begin infinite loop...\n");

        while (1)
                x++;

        return 0;
}

--
To unsubscribe from this list: send the line "unsubscribe hail-devel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to