diff mbox

Fix detailed mem report WRT hash tables

Message ID 20150327152606.GE63825@kam.mff.cuni.cz
State New
Headers show

Commit Message

Jan Hubicka March 27, 2015, 3:26 p.m. UTC
Hi,
I notieced that GGC hash tables are now accounted to hash-table.h:alloc_entries
that is not very informative (we do not have any stats for heap hash tables that
would be nice to have).

This patch fixes the first problem by adding annotations. OK (perhaps for next stage1?)
Bootstrapped/regtested x86_64-linux with and without gathering stats.

Honza

	* hash-table.c (hash_table constructor): Add mem stats.
	(alloc_entries): Likewise.

Comments

Richard Biener March 30, 2015, 9:13 a.m. UTC | #1
On Fri, Mar 27, 2015 at 4:26 PM, Jan Hubicka <hubicka@ucw.cz> wrote:
> Hi,
> I notieced that GGC hash tables are now accounted to hash-table.h:alloc_entries
> that is not very informative (we do not have any stats for heap hash tables that
> would be nice to have).
>
> This patch fixes the first problem by adding annotations. OK (perhaps for next stage1?)

Ok for stage1.

Thanks,
Richard.

> Bootstrapped/regtested x86_64-linux with and without gathering stats.
>
> Honza
>
>         * hash-table.c (hash_table constructor): Add mem stats.
>         (alloc_entries): Likewise.
> Index: hash-table.h
> ===================================================================
> --- hash-table.h        (revision 221734)
> +++ hash-table.h        (working copy)
> @@ -615,7 +615,7 @@ class hash_table<Descriptor, Allocator,
>    typedef typename Descriptor::compare_type compare_type;
>
>  public:
> -  hash_table (size_t);
> +  hash_table (size_t CXX_MEM_STAT_INFO);
>    ~hash_table ();
>
>    /* Current size (in entries) of the hash table.  */
> @@ -751,7 +751,8 @@ private:
>  };
>
>  template<typename Descriptor, template<typename Type> class Allocator>
> -hash_table<Descriptor, Allocator, false>::hash_table (size_t size) :
> +hash_table<Descriptor, Allocator, false>::hash_table (size_t size
> +                                                     MEM_STAT_DECL) :
>    m_n_elements (0), m_n_deleted (0), m_searches (0), m_collisions (0)
>  {
>    unsigned int size_prime_index;
> @@ -1116,7 +1117,7 @@ class hash_table<Descriptor, Allocator,
>    typedef typename Descriptor::compare_type compare_type;
>
>  public:
> -  explicit hash_table (size_t, bool ggc = false);
> +  explicit hash_table (size_t, bool ggc = false CXX_MEM_STAT_INFO);
>    ~hash_table ();
>
>    /* Create a hash_table in gc memory.  */
> @@ -1245,7 +1246,7 @@ private:
>    template<typename T> friend void gt_pch_nx (hash_table<T> *,
>                                               gt_pointer_operator, void *);
>
> -  value_type *alloc_entries (size_t n) const;
> +  value_type *alloc_entries (size_t n CXX_MEM_STAT_INFO) const;
>    value_type *find_empty_slot_for_expand (hashval_t);
>    void expand ();
>    static bool is_deleted (value_type &v)
> @@ -1295,7 +1296,8 @@ private:
>  };
>
>  template<typename Descriptor, template<typename Type> class Allocator>
> -hash_table<Descriptor, Allocator, true>::hash_table (size_t size, bool ggc) :
> +hash_table<Descriptor, Allocator, true>::hash_table (size_t size, bool ggc
> +                                                    MEM_STAT_DECL) :
>    m_n_elements (0), m_n_deleted (0), m_searches (0), m_collisions (0),
>    m_ggc (ggc)
>  {
> @@ -1304,7 +1306,7 @@ hash_table<Descriptor, Allocator, true>:
>    size_prime_index = hash_table_higher_prime_index (size);
>    size = prime_tab[size_prime_index].prime;
>
> -  m_entries = alloc_entries (size);
> +  m_entries = alloc_entries (size PASS_MEM_STAT);
>    m_size = size;
>    m_size_prime_index = size_prime_index;
>  }
> @@ -1326,14 +1328,15 @@ hash_table<Descriptor, Allocator, true>:
>
>  template<typename Descriptor, template<typename Type> class Allocator>
>  inline typename hash_table<Descriptor, Allocator, true>::value_type *
> -hash_table<Descriptor, Allocator, true>::alloc_entries (size_t n) const
> +hash_table<Descriptor, Allocator, true>::alloc_entries
> +        (size_t n MEM_STAT_DECL) const
>  {
>    value_type *nentries;
>
>    if (!m_ggc)
>      nentries = Allocator <value_type> ::data_alloc (n);
>    else
> -    nentries = ::ggc_cleared_vec_alloc<value_type> (n);
> +    nentries = ::ggc_cleared_vec_alloc<value_type> (n PASS_MEM_STAT);
>
>    gcc_assert (nentries != NULL);
>    for (size_t i = 0; i < n; i++)
Jeff Law April 13, 2015, 1:35 p.m. UTC | #2
On 03/27/2015 09:26 AM, Jan Hubicka wrote:
> Hi,
> I notieced that GGC hash tables are now accounted to hash-table.h:alloc_entries
> that is not very informative (we do not have any stats for heap hash tables that
> would be nice to have).
>
> This patch fixes the first problem by adding annotations. OK (perhaps for next stage1?)
> Bootstrapped/regtested x86_64-linux with and without gathering stats.
>
> Honza
>
> 	* hash-table.c (hash_table constructor): Add mem stats.
> 	(alloc_entries): Likewise.
OK for the trunk.

jeff
diff mbox

Patch

Index: hash-table.h
===================================================================
--- hash-table.h	(revision 221734)
+++ hash-table.h	(working copy)
@@ -615,7 +615,7 @@  class hash_table<Descriptor, Allocator,
   typedef typename Descriptor::compare_type compare_type;
 
 public:
-  hash_table (size_t);
+  hash_table (size_t CXX_MEM_STAT_INFO);
   ~hash_table ();
 
   /* Current size (in entries) of the hash table.  */
@@ -751,7 +751,8 @@  private:
 };
 
 template<typename Descriptor, template<typename Type> class Allocator>
-hash_table<Descriptor, Allocator, false>::hash_table (size_t size) :
+hash_table<Descriptor, Allocator, false>::hash_table (size_t size
+						      MEM_STAT_DECL) :
   m_n_elements (0), m_n_deleted (0), m_searches (0), m_collisions (0)
 {
   unsigned int size_prime_index;
@@ -1116,7 +1117,7 @@  class hash_table<Descriptor, Allocator,
   typedef typename Descriptor::compare_type compare_type;
 
 public:
-  explicit hash_table (size_t, bool ggc = false);
+  explicit hash_table (size_t, bool ggc = false CXX_MEM_STAT_INFO);
   ~hash_table ();
 
   /* Create a hash_table in gc memory.  */
@@ -1245,7 +1246,7 @@  private:
   template<typename T> friend void gt_pch_nx (hash_table<T> *,
 					      gt_pointer_operator, void *);
 
-  value_type *alloc_entries (size_t n) const;
+  value_type *alloc_entries (size_t n CXX_MEM_STAT_INFO) const;
   value_type *find_empty_slot_for_expand (hashval_t);
   void expand ();
   static bool is_deleted (value_type &v)
@@ -1295,7 +1296,8 @@  private:
 };
 
 template<typename Descriptor, template<typename Type> class Allocator>
-hash_table<Descriptor, Allocator, true>::hash_table (size_t size, bool ggc) :
+hash_table<Descriptor, Allocator, true>::hash_table (size_t size, bool ggc
+						     MEM_STAT_DECL) :
   m_n_elements (0), m_n_deleted (0), m_searches (0), m_collisions (0),
   m_ggc (ggc)
 {
@@ -1304,7 +1306,7 @@  hash_table<Descriptor, Allocator, true>:
   size_prime_index = hash_table_higher_prime_index (size);
   size = prime_tab[size_prime_index].prime;
 
-  m_entries = alloc_entries (size);
+  m_entries = alloc_entries (size PASS_MEM_STAT);
   m_size = size;
   m_size_prime_index = size_prime_index;
 }
@@ -1326,14 +1328,15 @@  hash_table<Descriptor, Allocator, true>:
 
 template<typename Descriptor, template<typename Type> class Allocator>
 inline typename hash_table<Descriptor, Allocator, true>::value_type *
-hash_table<Descriptor, Allocator, true>::alloc_entries (size_t n) const
+hash_table<Descriptor, Allocator, true>::alloc_entries
+	 (size_t n MEM_STAT_DECL) const
 {
   value_type *nentries;
 
   if (!m_ggc)
     nentries = Allocator <value_type> ::data_alloc (n);
   else
-    nentries = ::ggc_cleared_vec_alloc<value_type> (n);
+    nentries = ::ggc_cleared_vec_alloc<value_type> (n PASS_MEM_STAT);
 
   gcc_assert (nentries != NULL);
   for (size_t i = 0; i < n; i++)