From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ea0-x229.google.com (mail-ea0-x229.google.com [IPv6:2a00:1450:4013:c01::229]) by dpdk.org (Postfix) with ESMTP id 9D292DE0 for ; Tue, 26 Nov 2013 14:06:17 +0100 (CET) Received: by mail-ea0-f169.google.com with SMTP id l9so3619754eaj.28 for ; Tue, 26 Nov 2013 05:07:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=O7nILUG7nUhl5mvRfip2p3dKszXq0XnnvT1wX49CiRg=; b=L9iqHFlvUryqhc2+7kZkgj9uv9WdAXXkYBdn9GFd6wrxoGtOsJPqXvopqgl0oTYl8u 55cBCxBeAXcaGsxkbj0RYPRgb259g27uc6lj9x5afPmYwGDyGhqa8z+FMyY9jadqiWYF 8fDa3N6+sr1st1TPzdTjooxkOvykzvNdoh8qMwX3MkGuVMuYg4equaCfTjnIsZbEtjOb tbUIxWdYGsMbgGMtC5zRpMoR/xLdhheph2Z8+evRbplfRpWF25aQKMfDKm0Z+XvyYgiV GM30hHCxL5bAW3Fr1yPqm1vhfwynrcIj0J0PEFlGICZ2kU1/fYp4tsArTO0o2VaM2Bmj dcCg== MIME-Version: 1.0 X-Received: by 10.14.87.2 with SMTP id x2mr1655100eee.79.1385471237429; Tue, 26 Nov 2013 05:07:17 -0800 (PST) Received: by 10.15.94.5 with HTTP; Tue, 26 Nov 2013 05:07:17 -0800 (PST) Date: Tue, 26 Nov 2013 14:07:17 +0100 Message-ID: From: Mats Liljegren To: dev@dpdk.org Content-Type: text/plain; charset=UTF-8 Subject: [dpdk-dev] Question: Can't make pcap and refcnt to match X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Nov 2013 13:06:17 -0000 I have had stability problems when using pcap in my little application. My application is a simple benchmark applications that is trying to see how much data I can send and receive. It has one lcore per NIC, where each lcore handles transmit and receive. On the hardware, I make a loopback between two NICs, so the NICs are in practice paired. I currently use 4 NICs and therefore 4 lcores. Port 0 sends to port 1 and vice versa. Port 2 send to port 3 and vice versa. One pair is using DPDK hardware driver against a dual i350 NIC. The other pair is using pcap against two of the four on-board NICs. When enabling everything saying "DEBUG" in its name in the .config file, I get the following error: PMD: rte_eth_dev_config_restore: port 1: MAC address array not supported PMD: rte_eth_promiscuous_disable: Function not supported PMD: rte_eth_allmulticast_disable: Function not supported Speed: 10000 Mbps, full duplex Port 1 up and running. PMD: e1000_put_hw_semaphore_generic(): e1000_put_hw_semaphore_generic PANIC in rte_mbuf_sanity_check(): bad ref cnt PANIC in rte_mbuf_sanity_check(): bad ref cnt PMD: e1000_release_phy_82575(): e1000_release_phy_82575 PMD: e1000_release_swfw_sync_82575(): e1000_release_swfw_sync_82575 PMD: e1000_get_hw_semaphore_generic(): e1000_get_hw_semaphore_generic PMD: eth_igb_rx_queue_setup(): sw_ring=0x7fff776eefc0 hw_ring=0x7fff76830480 dma_addr=0x464630480 PMD: e1000_put_hw_semaphore_generic(): e1000_put_hw_semaphore_generic PMD: To improve 1G driver performance, consider setting the TX WTHRESH value to 4, 8, or 16. PMD: eth_igb_tx_queue_setup(): sw_ring=0x7fff776ece40 hw_ring=0x7fff76840500 dma_addr=0x464640500 PMD: eth_igb_start(): >> PMD: e1000_read_phy_reg_82580(): e1000_read_phy_reg_82580 PMD: e1000_acquire_phy_82575(): e1000_acquire_phy_82575 PMD: e1000_acquire_swfw_sync_82575(): e1000_acquire_swfw_sync_82575 PMD: e1000_get_hw_semaphore_generic(): e1000_get_hw_semaphore_generic PMD: e1000_get_cfg_done_82575(): e1000_get_cfg_done_82575 PMD: e1000_put_hw_semaphore_generic(): e1000_put_hw_semaphore_generic PMD: e1000_read_phy_reg_mdic(): e1000_read_phy_reg_mdic 9: [/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7ffff72a89cd]] 8: [/lib/x86_64-linux-gnu/libpthread.so.0(+0x7f6e) [0x7ffff757df6e]] 7: [/home/mlil/dpdk-demo/build/enea-demo(eal_thread_loop+0x1b9) [0x492669]] 6: [/home/mlil/dpdk-demo/build/enea-demo() [0x4150bc]] 5: [/home/mlil/dpdk-demo/build/enea-demo() [0x414d0b]] 4: [/home/mlil/dpdk-demo/build/enea-demo() [0x4116ef]] 3: [/home/mlil/dpdk-demo/build/enea-demo(rte_mbuf_sanity_check+0xa7) [0x484707]] 2: [/home/mlil/dpdk-demo/build/enea-demo(__rte_panic+0xc1) [0x40f788]] 1: [/home/mlil/dpdk-demo/build/enea-demo(rte_dump_stack+0x18) [0x493f68]] PMD: e1000_release_phy_82575(): e1000_release_phy_82575 PMD: e1000_release_swfw_sync_82575(): e1000_release_swfw_sync_82575 PMD: e1000_get_hw_semaphore_generic(): e1000_get_hw_semaphore_generic I checked the source code for pcap, and in the file rte_eth_pcap.c, function eth_pcap_rx(), I make the following observation: It pre-allocates a number of mbufs (64 to be exact). It then fills these mbufs with data and returns them. The pre-allocation seems to only be done once, and then they are re-used. This confuses me. How does this work when more than 64 packets are requested? I see no safety checks for this. Aren't application supposed to call rte_pktmbuf_free() on the returned mbufs? If so, the pre-allocated mbufs will have been free'd as far as I can see and can therefore not be re-used. What am I missing here? Regards Mats