From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Bhupesh Sharma <bhsharma@redhat.com>,
kexec@lists.infradead.org, Ariel Elior <aelior@marvell.com>,
GR-everest-linux-l2@marvell.com,
Manish Chopra <manishc@marvell.com>,
"David S . Miller" <davem@davemloft.net>,
Sasha Levin <sashal@kernel.org>,
netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 4.14 50/72] net: qed*: Reduce RX and TX default ring count when running inside kdump kernel
Date: Mon, 8 Jun 2020 19:24:38 -0400 [thread overview]
Message-ID: <20200608232500.3369581-50-sashal@kernel.org> (raw)
In-Reply-To: <20200608232500.3369581-1-sashal@kernel.org>
From: Bhupesh Sharma <bhsharma@redhat.com>
[ Upstream commit 73e030977f7884dbe1be0018bab517e8d02760f8 ]
Normally kdump kernel(s) run under severe memory constraint with the
basic idea being to save the crashdump vmcore reliably when the primary
kernel panics/hangs.
Currently the qed* ethernet driver ends up consuming a lot of memory in
the kdump kernel, leading to kdump kernel panic when one tries to save
the vmcore via ssh/nfs (thus utilizing the services of the underlying
qed* network interfaces).
An example OOM message log seen in the kdump kernel can be seen here
[1], with crashkernel size reservation of 512M.
Using tools like memstrack (see [2]), we can track the modules taking up
the bulk of memory in the kdump kernel and organize the memory usage
output as per 'highest allocator first'. An example log for the OOM case
indicates that the qed* modules end up allocating approximately 216M
memory, which is a large part of the total crashkernel size:
dracut-pre-pivot[676]: ======== Report format module_summary: ========
dracut-pre-pivot[676]: Module qed using 149.6MB (2394 pages), peak allocation 149.6MB (2394 pages)
dracut-pre-pivot[676]: Module qede using 65.3MB (1045 pages), peak allocation 65.3MB (1045 pages)
This patch reduces the default RX and TX ring count from 1024 to 64
when running inside kdump kernel, which leads to a significant memory
saving.
An example log with the patch applied shows the reduced memory
allocation in the kdump kernel:
dracut-pre-pivot[674]: ======== Report format module_summary: ========
dracut-pre-pivot[674]: Module qed using 141.8MB (2268 pages), peak allocation 141.8MB (2268 pages)
<..snip..>
[dracut-pre-pivot[674]: Module qede using 4.8MB (76 pages), peak allocation 4.9MB (78 pages)
Tested crashdump vmcore save via ssh/nfs protocol using underlying qed*
network interface after applying this patch.
[1] OOM log:
------------
kworker/0:6: page allocation failure: order:6,
mode:0x60c0c0(GFP_KERNEL|__GFP_COMP|__GFP_ZERO), nodemask=(null)
kworker/0:6 cpuset=/ mems_allowed=0
CPU: 0 PID: 145 Comm: kworker/0:6 Not tainted 4.18.0-109.el8.aarch64 #1
Hardware name: To be filled by O.E.M. Saber/Saber, BIOS 0ACKL025
01/18/2019
Workqueue: events work_for_cpu_fn
Call trace:
dump_backtrace+0x0/0x188
show_stack+0x24/0x30
dump_stack+0x90/0xb4
warn_alloc+0xf4/0x178
__alloc_pages_nodemask+0xcac/0xd58
alloc_pages_current+0x8c/0xf8
kmalloc_order_trace+0x38/0x108
qed_iov_alloc+0x40/0x248 [qed]
qed_resc_alloc+0x224/0x518 [qed]
qed_slowpath_start+0x254/0x928 [qed]
__qede_probe+0xf8/0x5e0 [qede]
qede_probe+0x68/0xd8 [qede]
local_pci_probe+0x44/0xa8
work_for_cpu_fn+0x20/0x30
process_one_work+0x1ac/0x3e8
worker_thread+0x44/0x448
kthread+0x130/0x138
ret_from_fork+0x10/0x18
Cannot start slowpath
qede: probe of 0000:05:00.1 failed with error -12
[2]. Memstrack tool: https://github.com/ryncsn/memstrack
Cc: kexec@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Cc: Ariel Elior <aelior@marvell.com>
Cc: GR-everest-linux-l2@marvell.com
Cc: Manish Chopra <manishc@marvell.com>
Cc: David S. Miller <davem@davemloft.net>
Signed-off-by: Bhupesh Sharma <bhsharma@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/qlogic/qede/qede.h | 2 ++
drivers/net/ethernet/qlogic/qede/qede_main.c | 11 +++++++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qede/qede.h b/drivers/net/ethernet/qlogic/qede/qede.h
index a80531b5aecc..c132b08cefde 100644
--- a/drivers/net/ethernet/qlogic/qede/qede.h
+++ b/drivers/net/ethernet/qlogic/qede/qede.h
@@ -528,12 +528,14 @@ void qede_update_rx_prod(struct qede_dev *edev, struct qede_rx_queue *rxq);
#define RX_RING_SIZE ((u16)BIT(RX_RING_SIZE_POW))
#define NUM_RX_BDS_MAX (RX_RING_SIZE - 1)
#define NUM_RX_BDS_MIN 128
+#define NUM_RX_BDS_KDUMP_MIN 63
#define NUM_RX_BDS_DEF ((u16)BIT(10) - 1)
#define TX_RING_SIZE_POW 13
#define TX_RING_SIZE ((u16)BIT(TX_RING_SIZE_POW))
#define NUM_TX_BDS_MAX (TX_RING_SIZE - 1)
#define NUM_TX_BDS_MIN 128
+#define NUM_TX_BDS_KDUMP_MIN 63
#define NUM_TX_BDS_DEF NUM_TX_BDS_MAX
#define QEDE_MIN_PKT_LEN 64
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
index dab202f343c6..8bb734486bf3 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -29,6 +29,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
+#include <linux/crash_dump.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/version.h>
@@ -624,8 +625,14 @@ static struct qede_dev *qede_alloc_etherdev(struct qed_dev *cdev,
edev->dp_module = dp_module;
edev->dp_level = dp_level;
edev->ops = qed_ops;
- edev->q_num_rx_buffers = NUM_RX_BDS_DEF;
- edev->q_num_tx_buffers = NUM_TX_BDS_DEF;
+
+ if (is_kdump_kernel()) {
+ edev->q_num_rx_buffers = NUM_RX_BDS_KDUMP_MIN;
+ edev->q_num_tx_buffers = NUM_TX_BDS_KDUMP_MIN;
+ } else {
+ edev->q_num_rx_buffers = NUM_RX_BDS_DEF;
+ edev->q_num_tx_buffers = NUM_TX_BDS_DEF;
+ }
DP_INFO(edev, "Allocated netdev with %d tx queues and %d rx queues\n",
info->num_queues, info->num_queues);
--
2.25.1
next prev parent reply other threads:[~2020-06-08 23:47 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-08 23:23 [PATCH AUTOSEL 4.14 01/72] ath9x: Fix stack-out-of-bounds Write in ath9k_hif_usb_rx_cb Sasha Levin
2020-06-08 23:23 ` [PATCH AUTOSEL 4.14 02/72] ath9k: Fix use-after-free Write in ath9k_htc_rx_msg Sasha Levin
2020-06-08 23:23 ` [PATCH AUTOSEL 4.14 03/72] drm: bridge: adv7511: Extend list of audio sample rates Sasha Levin
2020-06-08 23:23 ` [PATCH AUTOSEL 4.14 04/72] crypto: ccp -- don't "select" CONFIG_DMADEVICES Sasha Levin
2020-06-08 23:23 ` [PATCH AUTOSEL 4.14 05/72] media: si2157: Better check for running tuner in init Sasha Levin
2020-06-08 23:23 ` [PATCH AUTOSEL 4.14 06/72] objtool: Ignore empty alternatives Sasha Levin
2020-06-08 23:23 ` [PATCH AUTOSEL 4.14 07/72] spi: pxa2xx: Apply CS clk quirk to BXT Sasha Levin
2020-06-08 23:23 ` [PATCH AUTOSEL 4.14 08/72] net: ena: fix error returning in ena_com_get_hash_function() Sasha Levin
2020-06-08 23:23 ` [PATCH AUTOSEL 4.14 09/72] spi: dw: Zero DMA Tx and Rx configurations on stack Sasha Levin
2020-06-08 23:23 ` [PATCH AUTOSEL 4.14 10/72] ixgbe: Fix XDP redirect on archs with PAGE_SIZE above 4K Sasha Levin
2020-06-08 23:23 ` [PATCH AUTOSEL 4.14 11/72] MIPS: Loongson: Build ATI Radeon GPU driver as module Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 12/72] Bluetooth: Add SCO fallback for invalid LMP parameters error Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 13/72] kgdb: Prevent infinite recursive entries to the debugger Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 14/72] spi: dw: Enable interrupts in accordance with DMA xfer mode Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 15/72] clocksource: dw_apb_timer: Make CPU-affiliation being optional Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 16/72] clocksource: dw_apb_timer_of: Fix missing clockevent timers Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 17/72] btrfs: do not ignore error from btrfs_next_leaf() when inserting checksums Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 18/72] ARM: 8978/1: mm: make act_mm() respect THREAD_SIZE Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 19/72] spi: dw: Fix Rx-only DMA transfers Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 20/72] x86/kvm/hyper-v: Explicitly align hcall param for kvm_hyperv_exit Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 21/72] net: vmxnet3: fix possible buffer overflow caused by bad DMA value in vmxnet3_get_rss() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 22/72] staging: android: ion: use vmap instead of vm_map_ram Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 23/72] ath9k: Fix use-after-free Read in ath9k_wmi_ctrl_rx Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 24/72] ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 25/72] brcmfmac: fix wrong location to get firmware feature Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 26/72] tools api fs: Make xxx__mountpoint() more scalable Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 27/72] e1000: Distribute switch variables for initialization Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 28/72] dt-bindings: display: mediatek: control dpi pins mode to avoid leakage Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 29/72] audit: fix a net reference leak in audit_send_reply() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 30/72] media: dvb: return -EREMOTEIO on i2c transfer failure Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 31/72] media: platform: fcp: Set appropriate DMA parameters Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 32/72] MIPS: Make sparse_init() using top-down allocation Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 33/72] audit: fix a net reference leak in audit_list_rules_send() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 34/72] netfilter: nft_nat: return EOPNOTSUPP if type or flags are not supported Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 35/72] net: bcmgenet: set Rx mode before starting netif Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 36/72] lib/mpi: Fix 64-bit MIPS build with Clang Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 37/72] perf: Add cond_resched() to task_function_call() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 38/72] exit: Move preemption fixup up, move blocking operations down Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 39/72] net: lpc-enet: fix error return code in lpc_mii_init() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 40/72] media: cec: silence shift wrapping warning in __cec_s_log_addrs() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 41/72] net: allwinner: Fix use correct return type for ndo_start_xmit() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 42/72] powerpc/spufs: fix copy_to_user while atomic Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 43/72] ath9k_htc: Silence undersized packet warnings Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 44/72] Crypto/chcr: fix for ccm(aes) failed test Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 45/72] MIPS: Truncate link address into 32bit for 32bit kernel Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 46/72] mips: cm: Fix an invalid error code of INTVN_*_ERR Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 47/72] kgdb: Fix spurious true from in_dbg_master() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 48/72] nvme: refine the Qemu Identify CNS quirk Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 49/72] wcn36xx: Fix error handling path in 'wcn36xx_probe()' Sasha Levin
2020-06-08 23:24 ` Sasha Levin [this message]
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 51/72] md: don't flush workqueue unconditionally in md_open Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 52/72] rtlwifi: Fix a double free in _rtl_usb_tx_urb_setup() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 53/72] mwifiex: Fix memory corruption in dump_station Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 54/72] x86/boot: Correct relocation destination on old linkers Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 55/72] mips: MAAR: Use more precise address mask Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 56/72] mips: Add udelay lpj numbers adjustment Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 57/72] x86/mm: Stop printing BRK addresses Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 58/72] m68k: mac: Don't call via_flush_cache() on Mac IIfx Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 59/72] macvlan: Skip loopback packets in RX handler Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 60/72] PCI: Don't disable decoding when mmio_always_on is set Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 61/72] MIPS: Fix IRQ tracing when call handle_fpe() and handle_msa_fpe() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 62/72] xfs: gut error handling in xfs_trans_unreserve_and_mod_sb() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 63/72] mmc: sdhci-msm: Set SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 quirk Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 64/72] staging: greybus: sdio: Respect the cmd->busy_timeout from the mmc core Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 65/72] mmc: via-sdmmc: " Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 66/72] ixgbe: fix signed-integer-overflow warning Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 67/72] mmc: sdhci-esdhc-imx: fix the mask for tuning start point Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 68/72] spi: dw: Return any value retrieved from the dma_transfer callback Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 69/72] cpuidle: Fix three reference count leaks Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 70/72] platform/x86: hp-wmi: Convert simple_strtoul() to kstrtou32() Sasha Levin
2020-06-08 23:24 ` [PATCH AUTOSEL 4.14 71/72] vxlan: Avoid infinite loop when suppressing NS messages with invalid options Sasha Levin
2020-06-08 23:25 ` [PATCH AUTOSEL 4.14 72/72] string.h: fix incompatibility between FORTIFY_SOURCE and KASAN Sasha Levin
2020-06-08 23:46 ` Daniel Axtens
2020-06-09 11:20 ` Pavel Machek
2020-06-09 11:54 ` Greg KH
2020-06-09 13:55 ` Pavel Machek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200608232500.3369581-50-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=GR-everest-linux-l2@marvell.com \
--cc=aelior@marvell.com \
--cc=bhsharma@redhat.com \
--cc=davem@davemloft.net \
--cc=kexec@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manishc@marvell.com \
--cc=netdev@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).