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 */

Reply via email to