【问题标题】:What does statistics in /proc/net/protocols mean?/proc/net/protocols 中的统计信息是什么意思?
【发布时间】:2014-05-08 02:06:19
【问题描述】:

Linux 操作系统 /proc/net/protocols 中的统计信息是什么意思?

cat /proc/net/protocols
protocol  size sockets  memory press maxhdr  slab module     cl co di ac io in de sh ss gs se re sp bi br ha uh gp em
PACKET     888      0      -1   NI       0   no   kernel      n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n
UNIX       752     40      -1   NI       0   yes  kernel      n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n
UDP-Lite   816      0      -1   NI       0   yes  kernel      y  y  y  n  y  y  y  n  y  y  y  y  y  n  y  y  y  y  n
RAW        792      0      -1   NI       0   yes  kernel      y  y  y  n  y  y  y  n  y  y  y  y  n  y  y  y  y  n  n
UDP        816      4       2   NI       0   yes  kernel      y  y  y  n  y  n  y  n  y  y  y  y  y  n  y  y  y  y  n
TCP       1656     29       1   no     272   yes  kernel      y  y  y  y  y  y  y  y  y  y  n  y  n  n  y  y  y  y  y
NETLINK    752      1      -1   NI       0   no   kernel      n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n

【问题讨论】:

    标签: linux networking tcp linux-kernel


    【解决方案1】:

    它有一些关于每个协议的统计数据和Linux中每个协议的总结方法。

    不幸的是,RHEL 6.5 上的 man 5 proc 没有提及 /proc/net/protocols。于是我看了一下源码:http://lxr.free-electrons.com/source/net/core/sock.c?v=2.6.29#L2202http://lxr.free-electrons.com/source/include/net/sock.h#L924

    2169 static void proto_seq_printf(struct seq_file *seq, struct proto *proto)
    2170 {
    2171         seq_printf(seq, "%-9s %4u %6d  %6d   %-3s %6u   %-3s  %-10s "
    2172                         "%2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c\n",
    2173                    proto->name,
    2174                    proto->obj_size,
    2175                    sock_prot_inuse_get(seq_file_net(seq), proto),
    2176                    proto->memory_allocated != NULL ? atomic_read(proto->memory_allocated) : -1,
    2177                    proto->memory_pressure != NULL ? *proto->memory_pressure ? "yes" : "no" : "NI",
    2178                    proto->max_header,
    2179                    proto->slab == NULL ? "no" : "yes",
    2180                    module_name(proto->owner),
    2181                    proto_method_implemented(proto->close),
    2182                    proto_method_implemented(proto->connect),
    2183                    proto_method_implemented(proto->disconnect),
    2184                    proto_method_implemented(proto->accept),
    2185                    proto_method_implemented(proto->ioctl),
    2186                    proto_method_implemented(proto->init),
    2187                    proto_method_implemented(proto->destroy),
    2188                    proto_method_implemented(proto->shutdown),
    2189                    proto_method_implemented(proto->setsockopt),
    2190                    proto_method_implemented(proto->getsockopt),
    2191                    proto_method_implemented(proto->sendmsg),
    2192                    proto_method_implemented(proto->recvmsg),
    2193                    proto_method_implemented(proto->sendpage),
    2194                    proto_method_implemented(proto->bind),
    2195                    proto_method_implemented(proto->backlog_rcv),
    2196                    proto_method_implemented(proto->hash),
    2197                    proto_method_implemented(proto->unhash),
    2198                    proto_method_implemented(proto->get_port),
    2199                    proto_method_implemented(proto->enter_memory_pressure));
    2200 }
    

    所以这是每个协议提供的关于自身的信息。

    让我们从包含大量“y”和“n”的最后部分开始。

    2164 static char proto_method_implemented(const void *method)
    2165 {
    2166         return method == NULL ? 'n' : 'y';
    2167 }
    

    因此,如果特定方法是否在协议中实现,这只是信息。例如,“cl”列用于关闭方法。例如,由于 TCP 有 "y" 是 "close" 列,所以 TCP 协议实现 close() 并且它的 proto strcut 在 'close' 成员中有一个非空指针:

    924 struct proto {
    925         void                    (*close)(struct sock *sk,
    926                                         long timeout);
    

    outpit 中的一些第一列:

    1. 协议名称
    2. 协议特定套接字结构的大小
    3. sockets - 现在有多少个这种类型的sockets
    4. 内存 - 当前分配的内存
    5. press - memory_pressure - 它是一个标志,表示在内存压力下工作

    到目前为止,您可以自己查看源代码

    有用的链接:

    【讨论】:

    • “内存-当前分配的内存”的单位是什么?
    • 我不确定 100%,但是在分析 core.c 中的代码并阅读man tcp 部分tcp_mem: This is a vector of 3 integers: [low, pressure, high]. These bounds, measured in units of the system page size, are used by TCP to track its memory usage. 之后,我相信这是系统页数。
    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2017-08-10
    • 2012-04-12
    相关资源
    最近更新 更多