[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 5/6] libdiskfs: remove the statistics code from the name cach
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 5/6] libdiskfs: remove the statistics code from the name cache |
Date: |
Thu, 29 May 2014 18:55:17 +0200 |
User-agent: |
Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30) |
Justus Winter, le Thu 29 May 2014 18:41:03 +0200, a écrit :
> The current name cache lookup operation completes in O(n) time. This
> means that making the cache too large would decrease the performance.
> Therefore it was required to tune the size, hence the need for
> statistics.
>
> We will use a data structure with worst case constant lookup times in
> the future, removing the need to fine tune the cache size.
Ack.
> * libdiskfs/name-cache.c: Remove the statistics code from the name
> cache.
> ---
> libdiskfs/name-cache.c | 66
> +-------------------------------------------------
> 1 file changed, 1 insertion(+), 65 deletions(-)
>
> diff --git a/libdiskfs/name-cache.c b/libdiskfs/name-cache.c
> index a212a6d..25b5d0d 100644
> --- a/libdiskfs/name-cache.c
> +++ b/libdiskfs/name-cache.c
> @@ -45,29 +45,12 @@ struct lookup_cache
>
> /* Strlen of NAME. If this is zero, it's an unused entry. */
> size_t name_len;
> -
> - /* XXX */
> - int stati;
> };
>
> /* The contents of the cache in no particular order */
> static struct cacheq lookup_cache = { sizeof (struct lookup_cache) };
>
> static pthread_spinlock_t cache_lock = PTHREAD_SPINLOCK_INITIALIZER;
> -
> -/* Buffer to hold statistics */
> -static struct stats
> -{
> - long pos_hits;
> - long neg_hits;
> - long miss;
> - long fetch_errors;
> -} statistics;
> -
> -#define PARTIAL_THRESH 100
> -#define NPARTIALS MAXCACHE / PARTIAL_THRESH
> -struct stats partial_stats [NPARTIALS];
> -
>
> /* If there's an entry for NAME, of length NAME_LEN, in directory DIR in the
> cache, return its entry, otherwise 0. CACHE_LOCK must be held. */
> @@ -85,10 +68,7 @@ find_cache (struct node *dir, const char *name, size_t
> name_len)
> if (c->name_len == name_len
> && c->dir_cache_id == dir->cache_id
> && c->name[0] == name[0] && strcmp (c->name, name) == 0)
> - {
> - c->stati = i / 100;
> - return c;
> - }
> + return c;
>
> return 0;
> }
> @@ -152,46 +132,6 @@ diskfs_purge_lookup_cache (struct node *dp, struct node
> *np)
> pthread_spin_unlock (&cache_lock);
> }
>
> -/* Register a negative hit for an entry in the Nth stat class */
> -void
> -register_neg_hit (int n)
> -{
> - int i;
> -
> - statistics.neg_hits++;
> -
> - for (i = 0; i < n; i++)
> - partial_stats[i].miss++;
> - for (; i < NPARTIALS; i++)
> - partial_stats[i].neg_hits++;
> -}
> -
> -/* Register a positive hit for an entry in the Nth stat class */
> -void
> -register_pos_hit (int n)
> -{
> - int i;
> -
> - statistics.pos_hits++;
> -
> - for (i = 0; i < n; i++)
> - partial_stats[i].miss++;
> - for (; i < NPARTIALS; i++)
> - partial_stats[i].pos_hits++;
> -}
> -
> -/* Register a miss */
> -void
> -register_miss ()
> -{
> - int i;
> -
> - statistics.miss++;
> - for (i = 0; i < NPARTIALS; i++)
> - partial_stats[i].miss++;
> -}
> -
> -
>
> /* Scan the cache looking for NAME inside DIR. If we don't know
> anything entry at all, then return 0. If the entry is confirmed to
> @@ -214,14 +154,12 @@ diskfs_check_lookup_cache (struct node *dir, const char
> *name)
> if (id == 0)
> /* A negative cache entry. */
> {
> - register_neg_hit (c->stati);
> pthread_spin_unlock (&cache_lock);
> return (struct node *)-1;
> }
> else if (id == dir->cache_id)
> /* The cached node is the same as DIR. */
> {
> - register_pos_hit (c->stati);
> pthread_spin_unlock (&cache_lock);
> diskfs_nref (dir);
> return dir;
> @@ -232,7 +170,6 @@ diskfs_check_lookup_cache (struct node *dir, const char
> *name)
> struct node *np;
> error_t err;
>
> - register_pos_hit (c->stati);
> pthread_spin_unlock (&cache_lock);
>
> if (name[0] == '.' && name[1] == '.' && name[2] == '\0')
> @@ -259,7 +196,6 @@ diskfs_check_lookup_cache (struct node *dir, const char
> *name)
> }
> }
>
> - register_miss ();
> pthread_spin_unlock (&cache_lock);
>
> return 0;
> --
> 2.0.0.rc2
>
--
Samuel
Profitant de cette occasion, vous serait-il possible de rebooter
aussi Modérator et son petit copain qui gère les ressources de
download ?
-+- OB in NPC : Apprendre à flasher son personnel -+-
- [PATCH 1/6] libdiskfs: add diskfs_make_node_alloc to allocate fat nodes, Justus Winter, 2014/05/29
- [PATCH 2/6] libnetfs: add netfs_make_node_alloc to allocate fat nodes, Justus Winter, 2014/05/29
- [PATCH 5/6] libdiskfs: remove the statistics code from the name cache, Justus Winter, 2014/05/29
- Re: [PATCH 5/6] libdiskfs: remove the statistics code from the name cache,
Samuel Thibault <=
- [PATCH 3/6] trans/fakeroot: use fat nodes to simplify the node cache, Justus Winter, 2014/05/29
- [PATCH 6/6] libdiskfs: use a hash table for the name cache, Justus Winter, 2014/05/29
- [PATCH 4/6] trans/fakeroot: use netfs_node_netnode instead of np->nn, Justus Winter, 2014/05/29
- Re: [PATCH 1/6] libdiskfs: add diskfs_make_node_alloc to allocate fat nodes, Samuel Thibault, 2014/05/29