How can I measure programmatically (not query the OS, but measure) the size and order of associativity of L1 and L2 caches (data caches)?
Assumptions about system:
It has L1 and L2 cache (may be L3 too, may be cache sharing),
It may have a hardware prefetch unit (just like P4+),
It has a stable clocksource (tickcounter or good HPET for gettimeofday).
There are no assumptions about OS (it can be Linux, Windows, or something non-standard), and we can't use POSIX queries.
Language is C. And compiler optimizations may be disabled.