Подробный вывод команды ss

Ничего из того, что содержится в /proc/meminfo, нельзя настраивать, все это просто статистические данные, измеряемые ядром, а некоторые из них даже не относятся к использованию памяти.

Записи DirectMap, в частности, являются приблизительным показателем загрузки TLB. Они показывают, сколько страниц каждого размера отображается в TLB. Они не имеют ничего общего с фактическим использованием памяти, но могут быть полезны в редких случаях для отслеживания проблем с производительностью. Эта информация на самом деле не так уж и полезна в большинстве случаев, особенно если вы не знаете много о своей рабочей нагрузке.

Другими словами, это то, на чем вы основываетесь при настройке, а не то, что вы настраиваете, но даже тогда это не то, о чем стоит беспокоиться большую часть времени.

4
12.12.2019, 15:55
2 ответа

Значение некоторых из этих полей можно вывести из исходного кода сс и ядро Линукс.Информация, которую вы видите, распечатывается tcp_show_info()функция в iproute2/misc/ss.c.

адвмсс:

Вss.c:

s.advmss     = info->tcpi_advmss;
(...)
    if (s->advmss)
        out(" advmss:%d", s->advmss);

Вlinux/include/linux/tcp.h:

u16 advmss;     /* Advertised MSS           */

приложение _ограниченное:

Вss.c:

s.app_limited = info->tcpi_delivery_rate_app_limited;
(..)
if (s->app_limited)
   out(" app_limited");

Этот не задокументирован в linux/include/uapi/linux/tcp.hв Линукс:

struct tcp_info {
(...)
    __u8    tcpi_delivery_rate_app_limited:1;

но, что удивительно, мы можем найти некоторую информацию в коммите, который представил его:

commit eb8329e0a04db0061f714f033b4454326ba147f4
Author: Yuchung Cheng <ycheng@google.com>
Date:   Mon Sep 19 23:39:16 2016 -0400

    tcp: export data delivery rate

    This commit export two new fields in struct tcp_info:

      tcpi_delivery_rate: The most recent goodput, as measured by
        tcp_rate_gen(). If the socket is limited by the sending
        application (e.g., no data to send), it reports the highest
        measurement instead of the most recent. The unit is bytes per
        second (like other rate fields in tcp_info).

      tcpi_delivery_rate_app_limited: A boolean indicating if the goodput
        was measured when the socket's throughput was limited by the
        sending application.

    This delivery rate information can be useful for applications that
    want to know the current throughput the TCP connection is seeing,
    e.g. adaptive bitrate video streaming. It can also be very useful for
    debugging or troubleshooting.

Быстрый git blameв ss.cподтверждает, что app_limitedбыл добавлен после того, как tcpi_delivery_rate_app_limitedбыл добавлен в ядро.

занято:

Вss.c:

s.busy_time = info->tcpi_busy_time;
(..)
    if (s->busy_time) {
        out(" busy:%llums", s->busy_time / 1000);

А в include/uapi/linux/tcp.hв Linux написано:

struct tcp_info {
(...)
    __u64   tcpi_busy_time;      /* Time (usec) busy sending data */

ретрансляция:

Вss.c:

s.retrans    = info->tcpi_retrans;
s.retrans_total  = info->tcpi_total_retrans;
(...)
    if (s->retrans || s->retrans_total)
        out(" retrans:%u/%u", s->retrans, s->retrans_total);

tcpi_total_retransне описан вlinux/include/uapi/linux/tcp.h:

struct tcp_info {
(...)
    __u32   tcpi_total_retrans;

но используется вtcp_get_info():

void tcp_get_info(struct sock *sk, struct tcp_info *info)
{
    const struct tcp_sock *tp = tcp_sk(sk); /* iff sk_type == SOCK_STREAM */
(...)
    info->tcpi_total_retrans = tp->total_retrans;

А в linux/include/linux/tcp.hсказано:

struct tcp_sock {
(...)
    u32 total_retrans;  /* Total retransmits for entire connection */

tcpi_retransтоже не описывается, а читается tcp_get_info()снова мы видим:

info->tcpi_retrans = tp->retrans_out;

И вlinux/include/linux/tcp.h:

struct tcp_sock {
(...)
    u32 retrans_out;    /* Retransmitted packets out        */

dsack _дубликаты:

Вss.c:

s.dsack_dups = info->tcpi_dsack_dups;
(...)
    if (s->dsack_dups)
        out(" dsack_dups:%u", s->dsack_dups);

В include/uapi/linux/tcp.hв Linux:

struct tcp_info {
(...)
__u32   tcpi_dsack_dups;     /* RFC4898 tcpEStatsStackDSACKDups */

И вhttps://www.ietf.org/rfc/rfc4898.txt:

The number of duplicate segments reported to the local host by D-SACK blocks.

7
27.01.2020, 20:53

MSS обычно означает максимальный размер сегмента.

rcvmss:максимальный размер сегмента, который вы уведомите коллег, что вы его примете

advmss:объявление максимального размера сегмента

app_limited:ограничение TCP-потоков с приложением -ограничение в запросах или ответах

busy:TCP-соединение занято??

retrans:и -таймер передачи. Если отправитель пакета данных не получит подтверждение до истечения времени таймера, он попытается повторно передать пакет

.

dsack_dups:Дублированное выборочное подтверждение

minrtt:минимальное время прохождения туда и обратно, минимальное время прохождения пакета от источника до получателя

Дайте мне знать, если что-то из этого не так, и я исправлю.

1
27.01.2020, 20:53

Теги

Похожие вопросы