rcuja: move debugging info into judy array structure
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 31 May 2013 16:00:43 +0000 (12:00 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 31 May 2013 16:00:43 +0000 (12:00 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
rcuja/rcuja-internal.h
rcuja/rcuja-shadow-nodes.c
rcuja/rcuja.c

index 73ac41b69218bb68852a7a1385b3658f503b22d2..cf4ef96fcc71a0f0f86ba6b69a6ac24a100d9131 100644 (file)
@@ -94,6 +94,10 @@ struct cds_ja {
         */
        struct cds_lfht *ht;
        unsigned long nr_fallback;      /* Number of fallback nodes used */
+
+       /* For debugging */
+       unsigned long node_fallback_count_distribution[JA_ENTRY_PER_NODE];
+       unsigned long nr_nodes_allocated, nr_nodes_freed;
 };
 
 static inline
@@ -184,7 +188,7 @@ __attribute__((visibility("protected")))
 int rcuja_delete_ht(struct cds_lfht *ht);
 
 __attribute__((visibility("protected")))
-void free_cds_ja_node(struct cds_ja_inode *node);
+void free_cds_ja_node(struct cds_ja *ja, struct cds_ja_inode *node);
 
 //#define DEBUG
 
index 093135f751b7fa787d70ba44c425b62e45a34c08..63497c213c09abae9ccab8981074816189437784 100644 (file)
@@ -280,7 +280,7 @@ void free_shadow_node_and_node(struct rcu_head *head)
 {
        struct cds_ja_shadow_node *shadow_node =
                caa_container_of(head, struct cds_ja_shadow_node, head);
-       free_cds_ja_node(ja_node_ptr(shadow_node->node_flag));
+       free_cds_ja_node(shadow_node->ja, ja_node_ptr(shadow_node->node_flag));
        free(shadow_node);
 }
 
@@ -299,7 +299,7 @@ void free_shadow_node_and_node_and_lock(struct rcu_head *head)
        struct cds_ja_shadow_node *shadow_node =
                caa_container_of(head, struct cds_ja_shadow_node, head);
        assert(shadow_node->level);
-       free_cds_ja_node(ja_node_ptr(shadow_node->node_flag));
+       free_cds_ja_node(shadow_node->ja, ja_node_ptr(shadow_node->node_flag));
        free(shadow_node->lock);
        free(shadow_node);
 }
index 0f07b15436e8b51b1591601fd4568ffb9dfa0c7e..6c7c1e864f063a8adb9a657536622ef8f6cbe54c 100644 (file)
@@ -244,11 +244,6 @@ enum ja_recompact {
        JA_RECOMPACT_DEL,
 };
 
-static
-unsigned long node_fallback_count_distribution[JA_ENTRY_PER_NODE];
-static
-unsigned long nr_nodes_allocated, nr_nodes_freed;
-
 static
 struct cds_ja_inode *_ja_node_mask_ptr(struct cds_ja_inode_flag *node)
 {
@@ -291,7 +286,9 @@ struct cds_ja_inode *ja_node_ptr(struct cds_ja_inode_flag *node)
        }
 }
 
-struct cds_ja_inode *alloc_cds_ja_node(const struct cds_ja_type *ja_type)
+static
+struct cds_ja_inode *alloc_cds_ja_node(struct cds_ja *ja,
+               const struct cds_ja_type *ja_type)
 {
        size_t len = 1U << ja_type->order;
        void *p;
@@ -302,15 +299,15 @@ struct cds_ja_inode *alloc_cds_ja_node(const struct cds_ja_type *ja_type)
                return NULL;
        }
        memset(p, 0, len);
-       uatomic_inc(&nr_nodes_allocated);
+       uatomic_inc(&ja->nr_nodes_allocated);
        return p;
 }
 
-void free_cds_ja_node(struct cds_ja_inode *node)
+void free_cds_ja_node(struct cds_ja *ja, struct cds_ja_inode *node)
 {
        free(node);
        if (node)
-               uatomic_inc(&nr_nodes_freed);
+               uatomic_inc(&ja->nr_nodes_freed);
 }
 
 #define __JA_ALIGN_MASK(v, mask)       (((v) + (mask)) & ~(mask))
@@ -1238,7 +1235,7 @@ retry:            /* for fallback */
                        old_type_index, new_type_index);
        new_type = &ja_types[new_type_index];
        if (new_type_index != NODE_INDEX_NULL) {
-               new_node = alloc_cds_ja_node(new_type);
+               new_node = alloc_cds_ja_node(ja, new_type);
                if (!new_node)
                        return -ENOMEM;
 
@@ -1285,7 +1282,7 @@ retry:            /* for fallback */
                dbg_printf("Recompact inherit lock from %p\n", shadow_node);
                new_shadow_node = rcuja_shadow_set(ja->ht, new_node_flag, shadow_node, ja, level);
                if (!new_shadow_node) {
-                       free_cds_ja_node(new_node);
+                       free_cds_ja_node(ja, new_node);
                        return -ENOMEM;
                }
                if (fallback)
@@ -1409,7 +1406,7 @@ skip_copy:
                dbg_printf("Using fallback for %u children, node type index: %u, mode %s\n",
                        new_shadow_node->nr_child, old_type_index, mode == JA_RECOMPACT_ADD_NEXT ? "add_next" :
                                (mode == JA_RECOMPACT_DEL ? "del" : "add_same"));
-               uatomic_inc(&node_fallback_count_distribution[new_shadow_node->nr_child]);
+               uatomic_inc(&ja->node_fallback_count_distribution[new_shadow_node->nr_child]);
        }
 
        /* Return pointer to new recompacted node through old_node_flag_ptr */
@@ -2404,16 +2401,16 @@ void rcuja_free_all_children(struct cds_ja_shadow_node *shadow_node,
 }
 
 static
-void print_debug_fallback_distribution(void)
+void print_debug_fallback_distribution(struct cds_ja *ja)
 {
        int i;
 
        fprintf(stderr, "Fallback node distribution:\n");
        for (i = 0; i < JA_ENTRY_PER_NODE; i++) {
-               if (!node_fallback_count_distribution[i])
+               if (!ja->node_fallback_count_distribution[i])
                        continue;
                fprintf(stderr, "       %3u: %4lu\n",
-                       i, node_fallback_count_distribution[i]);
+                       i, ja->node_fallback_count_distribution[i]);
        }
 }
 
@@ -2445,10 +2442,10 @@ int cds_ja_destroy(struct cds_ja *ja,
                        "[warning] RCU Judy Array used %lu fallback node(s)\n",
                        uatomic_read(&ja->nr_fallback));
        fprintf(stderr, "Nodes allocated: %lu, Nodes freed: %lu. Fallback ratio: %g\n",
-               uatomic_read(&nr_nodes_allocated),
-               uatomic_read(&nr_nodes_freed),
-               (double) uatomic_read(&ja->nr_fallback) / (double) uatomic_read(&nr_nodes_allocated));
-       print_debug_fallback_distribution();
+               uatomic_read(&ja->nr_nodes_allocated),
+               uatomic_read(&ja->nr_nodes_freed),
+               (double) uatomic_read(&ja->nr_fallback) / (double) uatomic_read(&ja->nr_nodes_allocated));
+       print_debug_fallback_distribution(ja);
        free(ja);
        return 0;
 }
This page took 0.02902 seconds and 4 git commands to generate.