2017-11-03 11 views
1

리눅스 2.6.32에서 /proc/net/tcp을 찾고 있으며 tx_queuerx_queue의 단위가 무엇인지 궁금합니다./proc/net/tcp의 tx_queue 및 rx_queue 단위

내가이 정보를 찾을 수없는

receive-queue

아니다 man 5 proc에서 https://www.kernel.org/doc/Documentation/networking/proc_net_tcp.txt에서 transmit-queue하는 만 보여줍니다

은 "tx_queue"와 "rx_queue"는 발신 및 수신 데이터 큐입니다 커널 메모리 사용 측면에서.

바이트입니까? 또는 버퍼 수? 아니면 이것에 대한 훌륭한 문서를 놓친 것일까 요?

감사

답변

0

짧은 대답 -이 카운트 바이트. 서로 다른 크기의 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 모두는 바이트이다.

희망이 도움이됩니다.