짧은 대답 -이 카운트 바이트. 서로 다른 크기의 netperf TCP_RR을 실행하면 정확한 값인 1 카운트 (주어진 시간에 공중에서 단 하나의 패킷)를 볼 수 있습니다. 이 값은 항상 패킷 크기를 표시합니다. post 이에 따라
: 더 많은 정보
tx_queue : rx_queue
전송의 크기와 수신 큐.
이것은 소켓 당입니다. TCP의 경우 get_tcp4_sock() 함수에서 값이 업데이트됩니다. 2.6.32와 4.14에서 조금 다릅니다. 그러나 아이디어는 같습니다. 소켓 상태에 따라 rx_queue 값은 sk-> sk_ack_backlog 또는 tp-> rcv_nxt-tp-> copied_seq로 업데이트됩니다. 두 번째 값은 음수 일 수 있으며 나중에있는 커널에서는 0으로 고정됩니다. sk_ack_backlog는 채워지지 않은 세그먼트를 계산합니다. 이것은 바이트로 보이지 않기 때문에 약간 이상합니다. 아마도 뭔가를 여기에 놓친 것 같습니다. tcp.h 가입일
:
struct tcp_sock {
...
u32 rcv_nxt; /* What we want to receive next */
u32 copied_seq; /* Head of yet unread data */
두 바이트 카운트하므로 tp-> rcv_nxt - tp-> copied_seq 수신 패킷에 대한 수신 버퍼에 보류 바이트를 카운팅한다. tx_queue는 tp-> write_seq-tp-> snd_una로 설정됩니다. 다시 tcp.h에서 :
struct tcp_sock {
...
u32 snd_una; /* First byte we want an ack for */
u32 write_seq; /* Tail(+1) of data held in tcp send buffer */
여기에 더한 것이 바이트 단위로 표시됩니다. UDP의 경우 더 간단합니다. 값()이 udp4_format_sock 갱신된다
static void udp4_format_sock(struct sock *sp, struct seq_file *f,
int bucket)
{
...
seq_printf(f, "%5d: %08X:%04X %08X:%04X"
" %02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %d",
bucket, src, srcp, dest, destp, sp->sk_state,
sk_wmem_alloc_get(sp),
sk_rmem_alloc_get(sp),
sk_wmem_alloca_get을 각각 sk_wmem_alloc 및 sk_rmem_alloc를 반환 sk_rmem_alloc_get 모두는 바이트이다.
희망이 도움이됩니다.