Your profile was upside down. I've re-sorted it.
It probably confused people who were wondering why the numbers
at the top of the profile were lower than the ones below them.
On Mon, Feb 24, 2003 at 04:41:37PM -0800, Dave Hansen wrote:
> a snippet from d_lookup(), annotated. I've seen oprofile be off by a
> line here, but we can be pretty sure it is in this area.
> smp_read_barrier_depends();
> /* 106 0.002793% */
> dentry = list_entry(tmp, struct dentry, d_hash);
> /* if lookup ends up in a different bucket
> * due to concurrent rename, fail it
> */
> /* 154991 4.084% */
> if (unlikely(dentry->d_bucket != head))
> break;
> /* to avoid race if dentry keep coming back to original
> * bucket due to double moves
> */
> /* 634 0.01671% */
> if (unlikely(++lookup_count > max_dentries))
> break;
> ...
Well, you're walking hash chains, you're going to get a lot of cache
misses, about the whole length of the chain's worth. You could try
changing the dcache to use something like a B+ tree or some such
nonsense to reduce its cache footprint.
I'd collect statistics to see if the dcache hash function is badly
distributing things. That's relatively easily fixable if so.
-- wli
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/