Bug 259263 - ixgbe flag changing performance problem
Summary: ixgbe flag changing performance problem
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 12.2-STABLE
Hardware: Any Any
: --- Affects Some People
Assignee: freebsd-net (Nobody)
URL:
Keywords: IntelNetworking
Depends on:
Blocks:
 
Reported: 2021-10-19 07:51 UTC by Ozkan KIRIK
Modified: 2021-10-20 02:17 UTC (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ozkan KIRIK 2021-10-19 07:51:07 UTC
Hi, 

I'm using FreeBSD stable/12-n234161-c60b5d477cb4 compiled at Oct 13 12:18:51 +03 2021. Changing flags of ix0 takes too long (~15 seconds).
Opening the hardware rings using netmap takes too long also.

Is it possible to optimize the time to finish job?


How to reproduce:
/usr/bin/time ifconfig ix0 promisc -tso -lro -rxcsum -txcsum -tso6 -rxcsum -txcsum -tso6 -rxcsum6 -txcsum6 -vlanhwtag -vlanhwcsum -vlanhwtso
       14.71 real         0.00 user        14.71 sys

ix0@pci0:3:0:0:	class=0x020000 card=0x15ad15d9 chip=0x15ad8086 rev=0x00 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = 'Ethernet Connection X552/X557-AT 10GBASE-T'
    class      = network
    subclass   = ethernet


# sysctl dev.ix.0.
dev.ix.0.phy.overtemp_occurred: 0
dev.ix.0.phy.temp: 60
dev.ix.0.wufc: 2
dev.ix.0.wol_enable: 1
dev.ix.0.dmac: 0
dev.ix.0.fw_version: eTrack 0x800003e7 PHY FW V512
dev.ix.0.advertise_speed: 6
dev.ix.0.fc: 3
dev.ix.0.mac_stats.tx_frames_1024_1522: 0
dev.ix.0.mac_stats.tx_frames_512_1023: 0
dev.ix.0.mac_stats.tx_frames_256_511: 0
dev.ix.0.mac_stats.tx_frames_128_255: 0
dev.ix.0.mac_stats.tx_frames_65_127: 0
dev.ix.0.mac_stats.tx_frames_64: 0
dev.ix.0.mac_stats.management_pkts_txd: 0
dev.ix.0.mac_stats.mcast_pkts_txd: 0
dev.ix.0.mac_stats.bcast_pkts_txd: 0
dev.ix.0.mac_stats.good_pkts_txd: 0
dev.ix.0.mac_stats.total_pkts_txd: 0
dev.ix.0.mac_stats.good_octets_txd: 0
dev.ix.0.mac_stats.checksum_errs: 0
dev.ix.0.mac_stats.management_pkts_drpd: 0
dev.ix.0.mac_stats.management_pkts_rcvd: 0
dev.ix.0.mac_stats.recv_jabberd: 0
dev.ix.0.mac_stats.recv_oversized: 0
dev.ix.0.mac_stats.recv_fragmented: 0
dev.ix.0.mac_stats.recv_undersized: 0
dev.ix.0.mac_stats.rx_frames_1024_1522: 0
dev.ix.0.mac_stats.rx_frames_512_1023: 0
dev.ix.0.mac_stats.rx_frames_256_511: 35
dev.ix.0.mac_stats.rx_frames_128_255: 2
dev.ix.0.mac_stats.rx_frames_65_127: 36
dev.ix.0.mac_stats.rx_frames_64: 3
dev.ix.0.mac_stats.bcast_pkts_rcvd: 76
dev.ix.0.mac_stats.mcast_pkts_rcvd: 0
dev.ix.0.mac_stats.good_pkts_rcvd: 76
dev.ix.0.mac_stats.total_pkts_rcvd: 392
dev.ix.0.mac_stats.good_octets_rcvd: 16468
dev.ix.0.mac_stats.total_octets_rcvd: 226473
dev.ix.0.mac_stats.xoff_recvd: 0
dev.ix.0.mac_stats.xoff_txd: 0
dev.ix.0.mac_stats.xon_recvd: 0
dev.ix.0.mac_stats.xon_txd: 0
dev.ix.0.mac_stats.rx_missed_packets: 0
dev.ix.0.mac_stats.rec_len_errs: 0
dev.ix.0.mac_stats.remote_faults: 0
dev.ix.0.mac_stats.local_faults: 68
dev.ix.0.mac_stats.short_discards: 0
dev.ix.0.mac_stats.byte_errs: 0
dev.ix.0.mac_stats.ill_errs: 0
dev.ix.0.mac_stats.crc_errs: 0
dev.ix.0.mac_stats.rx_errs: 0
dev.ix.0.queue3.rx_discarded: 0
dev.ix.0.queue3.rx_copies: 0
dev.ix.0.queue3.rx_bytes: 11970
dev.ix.0.queue3.rx_packets: 35
dev.ix.0.queue3.rxd_tail: 128
dev.ix.0.queue3.rxd_head: 0
dev.ix.0.queue3.irqs: 35
dev.ix.0.queue3.interrupt_rate: 31250
dev.ix.0.queue3.tx_packets: 0
dev.ix.0.queue3.tso_tx: 0
dev.ix.0.queue3.txd_tail: 0
dev.ix.0.queue3.txd_head: 0
dev.ix.0.queue2.rx_discarded: 0
dev.ix.0.queue2.rx_copies: 0
dev.ix.0.queue2.rx_bytes: 0
dev.ix.0.queue2.rx_packets: 0
dev.ix.0.queue2.rxd_tail: 128
dev.ix.0.queue2.rxd_head: 0
dev.ix.0.queue2.irqs: 0
dev.ix.0.queue2.interrupt_rate: 31250
dev.ix.0.queue2.tx_packets: 0
dev.ix.0.queue2.tso_tx: 0
dev.ix.0.queue2.txd_tail: 0
dev.ix.0.queue2.txd_head: 0
dev.ix.0.queue1.rx_discarded: 0
dev.ix.0.queue1.rx_copies: 0
dev.ix.0.queue1.rx_bytes: 0
dev.ix.0.queue1.rx_packets: 0
dev.ix.0.queue1.rxd_tail: 128
dev.ix.0.queue1.rxd_head: 0
dev.ix.0.queue1.irqs: 0
dev.ix.0.queue1.interrupt_rate: 31250
dev.ix.0.queue1.tx_packets: 0
dev.ix.0.queue1.tso_tx: 0
dev.ix.0.queue1.txd_tail: 0
dev.ix.0.queue1.txd_head: 0
dev.ix.0.queue0.rx_discarded: 0
dev.ix.0.queue0.rx_copies: 0
dev.ix.0.queue0.rx_bytes: 4194
dev.ix.0.queue0.rx_packets: 41
dev.ix.0.queue0.rxd_tail: 128
dev.ix.0.queue0.rxd_head: 0
dev.ix.0.queue0.irqs: 41
dev.ix.0.queue0.interrupt_rate: 31250
dev.ix.0.queue0.tx_packets: 0
dev.ix.0.queue0.tso_tx: 0
dev.ix.0.queue0.txd_tail: 0
dev.ix.0.queue0.txd_head: 0
dev.ix.0.link_irq: 5
dev.ix.0.watchdog_events: 0
dev.ix.0.dropped: 0
dev.ix.0.iflib.rxq3.rxq_fl0.buf_size: 2048
dev.ix.0.iflib.rxq3.rxq_fl0.credits: 128
dev.ix.0.iflib.rxq3.rxq_fl0.cidx: 0
dev.ix.0.iflib.rxq3.rxq_fl0.pidx: 128
dev.ix.0.iflib.rxq3.cpu: 6
dev.ix.0.iflib.rxq2.rxq_fl0.buf_size: 2048
dev.ix.0.iflib.rxq2.rxq_fl0.credits: 128
dev.ix.0.iflib.rxq2.rxq_fl0.cidx: 0
dev.ix.0.iflib.rxq2.rxq_fl0.pidx: 128
dev.ix.0.iflib.rxq2.cpu: 4
dev.ix.0.iflib.rxq1.rxq_fl0.buf_size: 2048
dev.ix.0.iflib.rxq1.rxq_fl0.credits: 128
dev.ix.0.iflib.rxq1.rxq_fl0.cidx: 0
dev.ix.0.iflib.rxq1.rxq_fl0.pidx: 128
dev.ix.0.iflib.rxq1.cpu: 2
dev.ix.0.iflib.rxq0.rxq_fl0.buf_size: 2048
dev.ix.0.iflib.rxq0.rxq_fl0.credits: 128
dev.ix.0.iflib.rxq0.rxq_fl0.cidx: 0
dev.ix.0.iflib.rxq0.rxq_fl0.pidx: 128
dev.ix.0.iflib.rxq0.cpu: 0
dev.ix.0.iflib.txq3.r_abdications: 0
dev.ix.0.iflib.txq3.r_restarts: 0
dev.ix.0.iflib.txq3.r_stalls: 0
dev.ix.0.iflib.txq3.r_starts: 0
dev.ix.0.iflib.txq3.r_drops: 0
dev.ix.0.iflib.txq3.r_enqueues: 0
dev.ix.0.iflib.txq3.ring_state: pidx_head: 0000 pidx_tail: 0000 cidx: 0000 state: IDLE
dev.ix.0.iflib.txq3.txq_cleaned: 0
dev.ix.0.iflib.txq3.txq_processed: 0
dev.ix.0.iflib.txq3.txq_in_use: 0
dev.ix.0.iflib.txq3.txq_cidx_processed: 0
dev.ix.0.iflib.txq3.txq_cidx: 0
dev.ix.0.iflib.txq3.txq_pidx: 0
dev.ix.0.iflib.txq3.no_tx_dma_setup: 0
dev.ix.0.iflib.txq3.txd_encap_efbig: 0
dev.ix.0.iflib.txq3.tx_map_failed: 0
dev.ix.0.iflib.txq3.no_desc_avail: 0
dev.ix.0.iflib.txq3.mbuf_defrag_failed: 0
dev.ix.0.iflib.txq3.m_pullups: 0
dev.ix.0.iflib.txq3.mbuf_defrag: 0
dev.ix.0.iflib.txq3.cpu: 6
dev.ix.0.iflib.txq2.r_abdications: 0
dev.ix.0.iflib.txq2.r_restarts: 0
dev.ix.0.iflib.txq2.r_stalls: 0
dev.ix.0.iflib.txq2.r_starts: 0
dev.ix.0.iflib.txq2.r_drops: 0
dev.ix.0.iflib.txq2.r_enqueues: 0
dev.ix.0.iflib.txq2.ring_state: pidx_head: 0000 pidx_tail: 0000 cidx: 0000 state: IDLE
dev.ix.0.iflib.txq2.txq_cleaned: 0
dev.ix.0.iflib.txq2.txq_processed: 0
dev.ix.0.iflib.txq2.txq_in_use: 0
dev.ix.0.iflib.txq2.txq_cidx_processed: 0
dev.ix.0.iflib.txq2.txq_cidx: 0
dev.ix.0.iflib.txq2.txq_pidx: 0
dev.ix.0.iflib.txq2.no_tx_dma_setup: 0
dev.ix.0.iflib.txq2.txd_encap_efbig: 0
dev.ix.0.iflib.txq2.tx_map_failed: 0
dev.ix.0.iflib.txq2.no_desc_avail: 0
dev.ix.0.iflib.txq2.mbuf_defrag_failed: 0
dev.ix.0.iflib.txq2.m_pullups: 0
dev.ix.0.iflib.txq2.mbuf_defrag: 0
dev.ix.0.iflib.txq2.cpu: 4
dev.ix.0.iflib.txq1.r_abdications: 0
dev.ix.0.iflib.txq1.r_restarts: 0
dev.ix.0.iflib.txq1.r_stalls: 0
dev.ix.0.iflib.txq1.r_starts: 0
dev.ix.0.iflib.txq1.r_drops: 0
dev.ix.0.iflib.txq1.r_enqueues: 0
dev.ix.0.iflib.txq1.ring_state: pidx_head: 0000 pidx_tail: 0000 cidx: 0000 state: IDLE
dev.ix.0.iflib.txq1.txq_cleaned: 0
dev.ix.0.iflib.txq1.txq_processed: 0
dev.ix.0.iflib.txq1.txq_in_use: 0
dev.ix.0.iflib.txq1.txq_cidx_processed: 0
dev.ix.0.iflib.txq1.txq_cidx: 0
dev.ix.0.iflib.txq1.txq_pidx: 0
dev.ix.0.iflib.txq1.no_tx_dma_setup: 0
dev.ix.0.iflib.txq1.txd_encap_efbig: 0
dev.ix.0.iflib.txq1.tx_map_failed: 0
dev.ix.0.iflib.txq1.no_desc_avail: 0
dev.ix.0.iflib.txq1.mbuf_defrag_failed: 0
dev.ix.0.iflib.txq1.m_pullups: 0
dev.ix.0.iflib.txq1.mbuf_defrag: 0
dev.ix.0.iflib.txq1.cpu: 2
dev.ix.0.iflib.txq0.r_abdications: 0
dev.ix.0.iflib.txq0.r_restarts: 0
dev.ix.0.iflib.txq0.r_stalls: 0
dev.ix.0.iflib.txq0.r_starts: 0
dev.ix.0.iflib.txq0.r_drops: 0
dev.ix.0.iflib.txq0.r_enqueues: 0
dev.ix.0.iflib.txq0.ring_state: pidx_head: 0000 pidx_tail: 0000 cidx: 0000 state: IDLE
dev.ix.0.iflib.txq0.txq_cleaned: 0
dev.ix.0.iflib.txq0.txq_processed: 0
dev.ix.0.iflib.txq0.txq_in_use: 0
dev.ix.0.iflib.txq0.txq_cidx_processed: 0
dev.ix.0.iflib.txq0.txq_cidx: 0
dev.ix.0.iflib.txq0.txq_pidx: 0
dev.ix.0.iflib.txq0.no_tx_dma_setup: 0
dev.ix.0.iflib.txq0.txd_encap_efbig: 0
dev.ix.0.iflib.txq0.tx_map_failed: 0
dev.ix.0.iflib.txq0.no_desc_avail: 0
dev.ix.0.iflib.txq0.mbuf_defrag_failed: 0
dev.ix.0.iflib.txq0.m_pullups: 0
dev.ix.0.iflib.txq0.mbuf_defrag: 0
dev.ix.0.iflib.txq0.cpu: 0
dev.ix.0.iflib.override_nrxds: 0
dev.ix.0.iflib.override_ntxds: 0
dev.ix.0.iflib.use_logical_cores: 0
dev.ix.0.iflib.separate_txrx: 0
dev.ix.0.iflib.core_offset: 0
dev.ix.0.iflib.tx_abdicate: 0
dev.ix.0.iflib.rx_budget: 0
dev.ix.0.iflib.disable_msix: 0
dev.ix.0.iflib.override_qs_enable: 0
dev.ix.0.iflib.override_nrxqs: 4
dev.ix.0.iflib.override_ntxqs: 4
dev.ix.0.iflib.driver_version: 4.0.1-k
dev.ix.0.%parent: pci4
dev.ix.0.%pnpinfo: vendor=0x8086 device=0x15ad subvendor=0x15d9 subdevice=0x15ad class=0x020000
dev.ix.0.%location: slot=0 function=0 dbsf=pci0:3:0:0 handle=\_SB_.PCI0.BR2C.H000
dev.ix.0.%driver: ix
dev.ix.0.%desc: Intel(R) X552/X557-AT (10GBASE-T)

With Intel X540 ix0 it takes about 2.5 seconds (It's also long time)

# /usr/bin/time ifconfig ix0 promisc -tso -lro -rxcsum -txcsum -tso6
-rxcsum -txcsum -tso6 -rxcsum6 -txcsum6 -vlanhwtag -vlanhwcsum
-vlanhwtso
        2.32 real         0.00 user         2.32 sys

ix0@pci0:101:0:0: class=0x020000 card=0x001a8086 chip=0x15288086
rev=0x01 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = 'Ethernet Controller 10-Gigabit X540-AT2'
    class      = network
    subclass   = ethernet


But igb and ixl drivers are fast (<1 seconds). For comparision the output is below:
/usr/bin/time ifconfig igb0 promisc -tso -lro -rxcsum -txcsum -tso6 -rxcsum -txcsum -tso6 -rxcsum6 -txcsum6 -vlanhwtag -vlanhwcsum -vlanhwtso
        0.94 real         0.00 user         0.20 sys

igb0@pci0:5:0:0:	class=0x020000 card=0x152115d9 chip=0x15218086 rev=0x01 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = 'I350 Gigabit Network Connection'
    class      = network
    subclass   = ethernet

/usr/bin/time ifconfig ixl0 promisc -tso -lro -rxcsum -txcsum -tso6 -rxcsum -txcsum -tso6 -rxcsum6 -txcsum6 -vlanhwtag -vlanhwcsum -vlanhwtso
        0.68 real         0.00 user         0.68 sys

ixl0@pci0:183:0:0: class=0x020000 card=0x37d215d9 chip=0x37d28086
rev=0x04 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = 'Ethernet Connection X722 for 10GBASE-T'
    class      = network
    subclass   = ethernet


Regards