lkml.org 
[lkml]   [2011]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 1/7] clocksource: Restructure clocksource struct members
    Group the hot path members of struct clocksource together so we have a
    better cache line footprint. Make it cacheline aligned.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Eric Dumazet <eric.dumazet@gmail.com>
    ---
    include/linux/clocksource.h | 32 ++++++++++++++------------------
    1 file changed, 14 insertions(+), 18 deletions(-)

    Index: linux-2.6-tip/include/linux/clocksource.h
    ===================================================================
    --- linux-2.6-tip.orig/include/linux/clocksource.h
    +++ linux-2.6-tip/include/linux/clocksource.h
    @@ -159,42 +159,38 @@ extern u64 timecounter_cyc2time(struct t
    */
    struct clocksource {
    /*
    - * First part of structure is read mostly
    + * Hotpath data, fits in a single cache line when the
    + * clocksource itself is cacheline aligned.
    */
    - const char *name;
    - struct list_head list;
    - int rating;
    cycle_t (*read)(struct clocksource *cs);
    - int (*enable)(struct clocksource *cs);
    - void (*disable)(struct clocksource *cs);
    + cycle_t cycle_last;
    cycle_t mask;
    u32 mult;
    u32 shift;
    u64 max_idle_ns;
    - unsigned long flags;
    - cycle_t (*vread)(void);
    - void (*suspend)(struct clocksource *cs);
    - void (*resume)(struct clocksource *cs);
    +
    #ifdef CONFIG_IA64
    void *fsys_mmio; /* used by fsyscall asm code */
    #define CLKSRC_FSYS_MMIO_SET(mmio, addr) ((mmio) = (addr))
    #else
    #define CLKSRC_FSYS_MMIO_SET(mmio, addr) do { } while (0)
    #endif
    -
    - /*
    - * Second part is written at each timer interrupt
    - * Keep it in a different cache line to dirty no
    - * more than one cache line.
    - */
    - cycle_t cycle_last ____cacheline_aligned_in_smp;
    + const char *name;
    + struct list_head list;
    + int rating;
    + cycle_t (*vread)(void);
    + int (*enable)(struct clocksource *cs);
    + void (*disable)(struct clocksource *cs);
    + unsigned long flags;
    + void (*suspend)(struct clocksource *cs);
    + void (*resume)(struct clocksource *cs);

    #ifdef CONFIG_CLOCKSOURCE_WATCHDOG
    /* Watchdog related data, used by the framework */
    struct list_head wd_list;
    cycle_t wd_last;
    #endif
    -};
    +} ____cacheline_aligned;

    /*
    * Clock source flags bits::



    \
     
     \ /
      Last update: 2011-05-18 23:35    [W:5.562 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site