On 2/25/07, David Miller <[EMAIL PROTECTED]> wrote:
From: Roger While <[EMAIL PROTECTED]>
Date: Sun, 25 Feb 2007 09:55:34 +0100
> Was anything done about size/member alignment of struct tcp_sock per
> mail from last year -
> http://marc.theaimsgroup.com/?l=linux-netdev&m=114318857102290&w=2
>
> (I have no idea what current size is)
Nothing has been done yet but I've been thinking about it a lot
over the past year and I've had some discussions with other
developers such as Arnaldo.
It's just a matter of me being backlogged, so I never get to
it as often as I would like :)
Attached goes a current (DaveM's net-2.6 git tree build) pahole
picture of tcp_sock on UP, 32bits, summary:
}; /* size: 1288, cachelines: 21 */
/* last cacheline: 8 bytes */
and for the really curious, take a look at:
http://oops.ghostprotocols.net:81/acme/dwarves/tcp_sock.pahole.expand_types.txt
All the types are expanded, makes a pretty big picture :-)
- Arnaldo
[EMAIL PROTECTED] net-2.6]$ pahole ../OUTPUT/qemu/net-2.6/vmlinux tcp_sock
/* <e40138> /home/acme/git/net-2.6/include/linux/tcp.h:227 */
struct tcp_sock {
struct inet_connection_sock inet_conn; /* 0 844 */
/* --- cacheline 13 boundary (832 bytes) was 12 bytes ago --- */
u16 tcp_header_len; /* 844 2 */
u16 xmit_size_goal; /* 846 2 */
__be32 pred_flags; /* 848 4 */
u32 rcv_nxt; /* 852 4 */
u32 snd_nxt; /* 856 4 */
u32 snd_una; /* 860 4 */
u32 snd_sml; /* 864 4 */
u32 rcv_tstamp; /* 868 4 */
u32 lsndtime; /* 872 4 */
struct {
struct sk_buff_head prequeue; /* 0 28 */
struct task_struct * task; /* 28 4 */
struct iovec * iov; /* 32 4 */
int memory; /* 36 4 */
int len; /* 40 4 */
} ucopy; /* 876 44 */
/* --- cacheline 14 boundary (896 bytes) was 24 bytes ago --- */
u32 snd_wl1; /* 920 4 */
u32 snd_wnd; /* 924 4 */
u32 max_window; /* 928 4 */
u32 mss_cache; /* 932 4 */
u32 window_clamp; /* 936 4 */
u32 rcv_ssthresh; /* 940 4 */
u32 frto_highmark; /* 944 4 */
u8 reordering; /* 948 1 */
u8 frto_counter; /* 949 1 */
u8 nonagle; /* 950 1 */
u8 keepalive_probes; /* 951 1 */
u32 srtt; /* 952 4 */
u32 mdev; /* 956 4 */
/* --- cacheline 15 boundary (960 bytes) --- */
u32 mdev_max; /* 960 4 */
u32 rttvar; /* 964 4 */
u32 rtt_seq; /* 968 4 */
u32 packets_out; /* 972 4 */
u32 left_out; /* 976 4 */
u32 retrans_out; /* 980 4 */
struct tcp_options_received rx_opt; /* 984 24 */
u32 snd_ssthresh; /* 1008 4 */
u32 snd_cwnd; /* 1012 4 */
u16 snd_cwnd_cnt; /* 1016 2 */
u16 snd_cwnd_clamp; /* 1018 2 */
u32 snd_cwnd_used; /* 1020 4 */
/* --- cacheline 16 boundary (1024 bytes) --- */
u32 snd_cwnd_stamp; /* 1024 4 */
struct sk_buff_head out_of_order_queue; /* 1028 28 */
u32 rcv_wnd; /* 1056 4 */
u32 rcv_wup; /* 1060 4 */
u32 write_seq; /* 1064 4 */
u32 pushed_seq; /* 1068 4 */
u32 copied_seq; /* 1072 4 */
struct tcp_sack_block duplicate_sack[1]; /* 1076 8 */
struct tcp_sack_block selective_acks[4]; /* 1084 32 */
/* --- cacheline 17 boundary (1088 bytes) was 28 bytes ago --- */
struct tcp_sack_block_wire recv_sack_cache[4]; /* 1116 32 */
struct sk_buff * lost_skb_hint; /* 1148 4 */
/* --- cacheline 18 boundary (1152 bytes) --- */
struct sk_buff * scoreboard_skb_hint; /* 1152 4 */
struct sk_buff * retransmit_skb_hint; /* 1156 4 */
struct sk_buff * forward_skb_hint; /* 1160 4 */
struct sk_buff * fastpath_skb_hint; /* 1164 4 */
int fastpath_cnt_hint; /* 1168 4 */
int lost_cnt_hint; /* 1172 4 */
int retransmit_cnt_hint; /* 1176 4 */
int forward_cnt_hint; /* 1180 4 */
u16 advmss; /* 1184 2 */
u16 prior_ssthresh; /* 1186 2 */
u32 lost_out; /* 1188 4 */
u32 sacked_out; /* 1192 4 */
u32 fackets_out; /* 1196 4 */
u32 high_seq; /* 1200 4 */
u32 retrans_stamp; /* 1204 4 */
u32 undo_marker; /* 1208 4 */
int undo_retrans; /* 1212 4 */
/* --- cacheline 19 boundary (1216 bytes) --- */
u32 urg_seq; /* 1216 4 */
u16 urg_data; /* 1220 2 */
u8 urg_mode; /* 1222 1 */
u8 ecn_flags; /* 1223 1 */
u32 snd_up; /* 1224 4 */
u32 total_retrans; /* 1228 4 */
u32 bytes_acked; /* 1232 4 */
unsigned int keepalive_time; /* 1236 4 */
unsigned int keepalive_intvl; /* 1240 4 */
int linger2; /* 1244 4 */
long unsigned int last_synq_overflow; /* 1248 4 */
u32 tso_deferred; /* 1252 4 */
struct {
u32 rtt; /* 0 4 */
u32 seq; /* 4 4 */
u32 time; /* 8 4 */
} rcv_rtt_est; /* 1256 12 */
struct {
int space; /* 0 4 */
u32 seq; /* 4 4 */
u32 time; /* 8 4 */
} rcvq_space; /* 1268 12 */
/* --- cacheline 20 boundary (1280 bytes) --- */
struct {
u32 probe_seq_start; /* 0 4 */
u32 probe_seq_end; /* 4 4 */
} mtu_probe; /* 1280 8 */
}; /* size: 1288, cachelines: 21 */
/* last cacheline: 8 bytes */