Print this page
916 False-sharing in TCP hash buckets, plus size increase
(originally Joyent OS-299 tcp_bindi() hash lock contention affects
TCP client performance)
*** 18,27 ****
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, Joyent, Inc. All rights reserved.
*/
/* Copyright (c) 1990 Mentat Inc. */
#ifndef _INET_TCP_H
#define _INET_TCP_H
*** 494,503 ****
--- 495,507 ----
extern void tcp_ddi_g_destroy(void);
extern void *tcp_get_conn(void *arg, tcp_stack_t *);
extern mblk_t *tcp_snmp_get(queue_t *, mblk_t *, boolean_t);
extern int tcp_snmp_set(queue_t *, int, int, uchar_t *, int len);
+ /* Pad for the tf_t structure to avoid false cache line sharing. */
+ #define TF_CACHEL_PAD 64
+
/*
* The TCP Fanout structure for bind and acceptor hashes.
* The hash tables and their linkage (tcp_*_hash, tcp_ptp*hn) are
* protected by the per-bucket tf_lock. Each tcp_t
* inserted in the list points back at this lock using tcp_*_lockp.
*** 506,515 ****
--- 510,521 ----
*/
/* listener hash and acceptor hash queue head */
typedef struct tf_s {
tcp_t *tf_tcp;
kmutex_t tf_lock;
+ unsigned char tf_pad[TF_CACHEL_PAD -
+ (sizeof (tcp_t *) + sizeof (kmutex_t))];
} tf_t;
/* Also used in ipclassifier.c */
extern struct kmem_cache *tcp_sack_info_cache;