Re: kernel optimization

From: cutaway
Date: Sat Jul 23 2005 - 17:04:17 EST


I submit that sparse switch jump table's are not an "unusual" construct in
the Linux kernel/drivers. GCC only creates a table large enough to cover
the largest of the sparse values - it doesn't have to be 0...255. 0...60
with 10 values sparsely scattered would generate a 61 element jump table.

There's many K of locked memory in these sparse jump tables. About 2K worth
in the VT102 code alone.

----- Original Message -----
From: "Alan Cox" <alan@xxxxxxxxxxxxxxxxxxx>
To: <cutaway@xxxxxxxxxxxxx>
Cc: "Adrian Bunk" <bunk@xxxxxxxxx>; <linux-kernel@xxxxxxxxxxxxxxx>
Sent: Saturday, July 23, 2005 15:50
Subject: Re: kernel optimization


> On Sad, 2005-07-23 at 02:30 -0400, cutaway@xxxxxxxxxxxxx wrote:
> > Larger does not always mean slower. If it did, nobody would implement a
> > loop unrolling optimization.
>
> Generally speaking nowdays it does. Almost all loop unrolls are a loss
> on PIV.
>
> > ex. Look at how GCC generates jump tables for switch() when there's
about
> > 10-12 (or more) case's sparsely scattered in the rage from 0 through
255.
>
> You are comparing with very expensive jump operations its an unusual
> case. For the majority of situations the TLB/cache overhead of misses
> vastly outweighs the odd clock cycle gained by verbose output.
>
>

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/