lkml.org 
[lkml]   [2013]   [Jun]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 18/24] n_tty: Separate buffer indices to prevent cache-line sharing
    Date
    If the read buffer indices are in the same cache-line, cpus will
    contended over the cache-line (so called 'false sharing').

    Separate the producer-published fields from the consumer-published
    fields; document the locks relevant to each field.

    Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
    ---
    drivers/tty/n_tty.c | 21 +++++++++++++++------
    1 file changed, 15 insertions(+), 6 deletions(-)

    diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
    index a6eea30..d0c8805 100644
    --- a/drivers/tty/n_tty.c
    +++ b/drivers/tty/n_tty.c
    @@ -82,29 +82,38 @@
    #endif

    struct n_tty_data {
    - unsigned int column;
    + /* producer-published */
    + size_t read_head;
    + size_t canon_head;
    + DECLARE_BITMAP(process_char_map, 256);
    +
    + /* private to n_tty_receive_overrun (single-threaded) */
    unsigned long overrun_time;
    int num_overrun;

    /* non-atomic */
    bool no_room;

    + /* must hold exclusive termios_rwsem to reset these */
    unsigned char lnext:1, erasing:1, raw:1, real_raw:1, icanon:1;
    unsigned char echo_overrun:1;

    - DECLARE_BITMAP(process_char_map, 256);
    + /* shared by producer and consumer */
    + char *read_buf;
    DECLARE_BITMAP(read_flags, N_TTY_BUF_SIZE);

    - char *read_buf;
    - size_t read_head;
    - size_t read_tail;
    int minimum_to_wake;

    + /* consumer-published */
    + size_t read_tail;
    +
    + /* protected by echo_lock */
    unsigned char *echo_buf;
    unsigned int echo_pos;
    unsigned int echo_cnt;

    - size_t canon_head;
    + /* protected by output lock */
    + unsigned int column;
    unsigned int canon_column;

    struct mutex atomic_read_lock;
    --
    1.8.1.2


    \
     
     \ /
      Last update: 2013-06-15 16:01    [W:4.160 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site