[lkml]   [2006]   [Sep]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectCache line size
    Hash: SHA1

    Is there a way for the Linux Kernel to know the cache line size of the
    CPU it's on, besides #define X86_CACHE_LINE_SZ 32 or whatnot? I am
    looking in /proc/cpuinfo trying to determine how to run caching
    optimizations and interested in this information and its implications.
    It may also be useful if I can get this information at run time in
    application code.

    For the curious (those of you who don't care, stop reading; those who
    are going to tell me I shouldn't care about these numbers, keep reading
    anyway), I am trying to avoid false sharing in a memory allocator,
    mainly by bitmapping cache lines on top of the 16 byte block bitmap per

    In many cases I avoid segment sharing altogether. Segments suffering
    from lack of use are returned to the global scope for other threads; but
    so are segments in terminated threads. Threads needing more space try
    to retrieve their own segments; when this is not possible, they retrieve
    segments from terminated threads. When both of these options fails,
    segments owned by active threads set in the global scope are adopted.

    When segments are shared, there is the potential that the same cache
    line may be allocated in different threads, possibly leading to
    concurrent access to the same cache line on different CPUs in an SMP
    environment. To avoid this, each active thread with any allocations in
    a shared segment will keep a bitmap of its own used cache lines, and
    overlay that bitmap onto the master cache line bitmap for the segment.

    Cache lines in use but not by the current thread will not be used by the
    current thread for allocations. Whenever a thread terminates, it
    removes all cache lines it holds from use in the master cache line
    bitmap; false sharing cannot occur if there is no thread to share with,
    so overlapping cache lines with the dead thread is not an issue (and not
    technically possible).


    Bitmap: |x|x| |x|x| | | |x|x| 16 byte blocks
    CLnBMP: | X | X | X | | | 32 byte cache lines
    T1CLnB: | X | | X | | | Cache lines from Thread 1
    T2CLnB: | | X | | | | Cache lines from Thread 2
    ^ ^--Used by dead thread

    - --
    All content of all messages exchanged herein are left in the
    Public Domain, unless otherwise explicitly stated.

    Creative brains are a valuable, limited resource. They shouldn't be
    wasted on re-inventing the wheel when there are so many fascinating
    new problems waiting out there.
    -- Eric Steven Raymond

    We will enslave their women, eat their children and rape their
    -- Bosc, Evil alien overlord from the fifth dimension
    Version: GnuPG v1.4.3 (GNU/Linux)
    Comment: Using GnuPG with Mozilla -

    -----END PGP SIGNATURE-----
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2006-09-11 02:37    [W:0.022 / U:49.988 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site