The current hash function in libhurd-ihash results in a lot of collisions when the hash table is 80% full. To overcome this, we keep hash tables at most 30% full. This represents a fair amount of overhead. Find a better algorithm. There can either be one that is appropriate in the general case or one that works well in a relevant, specific case, e.g., viengoos/object.c uses a hash to find the object corresponding to a frame, which is keyed on its physical address.
Note that this applies to the Hurd's libihash, too.