왜 일부 다중 대기열(qdisc mq)에는 n tx/1 rx가 있고 다른 다중 대기열에는 1 tx/n rx가 있습니까?

왜 일부 다중 대기열(qdisc mq)에는 n tx/1 rx가 있고 다른 다중 대기열에는 1 tx/n rx가 있습니까?

다중 대기열 대기열 규칙(mq qdisc)을 이해하려고 노력하는 동안 나는 다음 구성을 우연히 발견했습니다.

내 노트북에서 내 WiFi 인터페이스는 1 rx 및 4 tx로 mq qdisc를 구현합니다.

$ sudo tc qdisc list dev wlp2s0
    qdisc mq 0: root 
    qdisc pfifo_fast 0: parent :4 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
    qdisc pfifo_fast 0: parent :3 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
    qdisc pfifo_fast 0: parent :2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
    qdisc pfifo_fast 0: parent :1 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

$ sudo ll /sys/class/net/wlp2s0/queues/
    total 0
    33458 0 drwxr-xr-x 2 root root 0 août  18 05:54 rx-0/
    33461 0 drwxr-xr-x 3 root root 0 août  18 05:54 tx-0/
    33472 0 drwxr-xr-x 3 root root 0 août  18 05:54 tx-1/
    33483 0 drwxr-xr-x 3 root root 0 août  18 05:54 tx-2/
    33494 0 drwxr-xr-x 3 root root 0 août  18 05:54 tx-3/

반면, HP ProLiant 서버에서는 각 NIC가 4 rx 및 1 tx의 mq qdisc를 구현합니다.

$ sudo tc qdisc show dev eno3
qdisc mq 0: root 
qdisc pfifo_fast 0: parent :1 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

$ sudo ll /sys/class/net/eno3/queues/
total 0
41241 0 drwxr-xr-x 2 root root 0 août  12 23:17 rx-0/
41244 0 drwxr-xr-x 2 root root 0 août  12 23:17 rx-1/
41247 0 drwxr-xr-x 2 root root 0 août  12 23:17 rx-2/
41250 0 drwxr-xr-x 2 root root 0 août  12 23:17 rx-3/
41256 0 drwxr-xr-x 3 root root 0 août  12 23:17 tx-0/

멀티큐의 핵심은 성능인 것 같은데, 그 이유는 무엇인가요? WiFi 카드는 "tx 다중 대기열"을 구현하고 NIC는 "rx 다중 대기열"을 구현하는 이유는 무엇입니까?

답변1

귀하의 질문에 제가 단호하게 대답할 수 있을지 모르겠습니다. 이를 위해서는 하드웨어 엔지니어와 NIC 드라이버 작성자가 내린 설계 결정을 이해해야 합니다. 다중 대기열에 사용되는 대기열 수의 차이를 올바르게 기록했지만 설명과 다르게 적용됩니다.

제공된 출력에는 tcTx 대기열만 표시됩니다. mq아래에 있는 다른 큐잉 분야의 연결을 허용하는 논리적 qdisc입니다. mq이것이 자체적으로 어떤 영향을 미치는지 모르겠습니다 . 무선 NIC가 mq4개의 Tx 대기열이 있는 루트 수준에서 설정된 경우 pfifo_fastLinux 기본값을 사용합니다.

ProLiant 서버의 출력이 완전히 다르다는 것을 알 수 있습니다.

$ sudo tc qdisc show dev eno3
qdisc mq 0: root 
qdisc pfifo_fast 0: parent :1 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

$ sudo ll /sys/class/net/eno3/queues/
total 0
41241 0 drwxr-xr-x 2 root root 0 août  12 23:17 rx-0/
41244 0 drwxr-xr-x 2 root root 0 août  12 23:17 rx-1/
41247 0 drwxr-xr-x 2 root root 0 août  12 23:17 rx-2/
41250 0 drwxr-xr-x 2 root root 0 août  12 23:17 rx-3/
41256 0 drwxr-xr-x 3 root root 0 août  12 23:17 tx-0/

루트 수준의 사용량을 표시 mq하지만 실제로는 단일 대기열입니다. 이는 pfifo_fast출력에 표시된 단일 Tx 대기열과 연결된 인스턴스가 하나만 있기 때문입니다 sysfs.

왜? 서버를 존중하십시오. 이것은 의미가 있습니다. 제공되는 서비스에 따라 전송되는 데이터보다 수신되는 데이터가 훨씬 더 많을 수 있습니다. WiFi에 관해서는...정말 모르겠어요. 랩탑이 전송하는 것보다 더 많은 데이터를 수신할 것으로 예상할 수 있습니다.

어쨌든 다중 대기열을 지원하는 하드웨어를 사용하는 경우(현재) NIC 드라이버가 사용하는 대기열 수를 다음과 같이 조정할 수 있습니다 ethtool. 읽다ethtool의 매뉴얼 페이지더 나은 이해를 위해.

관련 정보