lkml.org 
[lkml]   [2013]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 18/18] 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 | 22 ++++++++++++++++------
    1 file changed, 16 insertions(+), 6 deletions(-)

    diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
    index adccff8..9b828f0 100644
    --- a/drivers/tty/n_tty.c
    +++ b/drivers/tty/n_tty.c
    @@ -86,28 +86,38 @@
    #define NO_ROOM 0

    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;

    + /* atomic */
    unsigned long flags;

    + /* 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-03-27 14:01    [W:2.525 / U:1.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site