lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 30 Jun 2021 16:42:21 +0800
From:   mingkun bian <bianmingkun@...il.com>
To:     netdev@...r.kernel.org
Subject: [ISSUE] EDT will lead ca_rtt to 0 when different tx queue have
 different qdisc

Hi,

I found a problem that ca_rtt have a small chance to become 0 when
using EDT, then find that it is caused by different tx queue which
have different qdisc as following:

The case may be caused by my operation of the network card(ethtool -L
ethx combined 48)

    1. Network card original num_tx_queues is 64, real_num_tx_queues
is 24, so in "mq_init" and "mq_attach", only the first 24 queues are
set by default qdisc(fq),
and the last 40 queues are set to  pfifo_fast_ops.

    2. After the system starts, I exec "ethtool -L ethx combined 48"
to make the tx/rx queue to 48, but it does not modify qdisc's
configuration,
at this time for bbr, bbr will use fq when "
__dev_queue_xmit->netdev_pick_tx" select  the first 24 queues, and bbr
will use tcp stack's timer(qdisc is  pfifo_fast_ops) when   "
__dev_queue_xmit->netdev_pick_tx" select  the last24 queues,
and in this case, bbr works normally.

    3. The wrong scenario is:
    a. tcp select one of  the first 24 tx queues to send, then sch_fq
change sk->sk_pacing_status from SK_PACING_NEEDED to SK_PACING_FQ,
then tcp will use fq to send.
    b. after a while,  not sure for some reason, __dev_queue_xmit->
netdev_pick_tx select the last  24 queues which qdisc is
pfifo_fast_ops, then qdisc send this skb immediately(no pacing), then
ca_rtt = curtime - skb->timestamp_ns, skb->timestamp_ns may be bigger
than curtime.


Why does not get_default_qdisc_ops return all queues to the default qdisc?

get_default_qdisc_ops(const struct net_device *dev, int ntx)
{
return ntx < dev->real_num_tx_queues ?
default_qdisc_ops : &pfifo_fast_ops;
}

Thanks.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ