[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-id: <00eb01d12cec$a32aa500$e97fef00$@samsung.com>
Date: Wed, 02 Dec 2015 13:31:42 +0300
From: Pavel Fedin <p.fedin@...sung.com>
To: 'Sunil Kovvuri' <sunil.kovvuri@...il.com>,
'Eric Dumazet' <eric.dumazet@...il.com>
Cc: 'Linux Netdev List' <netdev@...r.kernel.org>,
'LKML' <linux-kernel@...r.kernel.org>,
'LAKML' <linux-arm-kernel@...ts.infradead.org>,
'Sunil Goutham' <Sunil.Goutham@...iumnetworks.com>,
'Sunil Goutham' <sgoutham@...ium.com>
Subject: RE: [PATCH 3/6] net: thunderx: Increase transmit queue length
Hello!
> > Probably you might have to set "coherent_pool" size in bootargs to a
> > higher value.
> > Can you please check.
>
> I have tried to do this. I was able to enlarge the pool up to 4MB, and still got allocation
> failures. At 8MB pool preallocation stops working:
> --- cut ---
> Call trace:
> [<ffffffc00012ddb8>] __alloc_pages_nodemask+0x4f4/0x7d4
> [<ffffffc0007be370>] atomic_pool_init+0x60/0x1a4
> [<ffffffc0007be4d4>] arm64_dma_init+0x20/0x28
> [<ffffffc000082848>] do_one_initcall+0x8c/0x1a4
> [<ffffffc0007baac0>] kernel_init_freeable+0x154/0x1f4
> [<ffffffc0005c2b14>] kernel_init+0x10/0xd8
> DMA: failed to allocate 8192 KiB pool for atomic coherent allocation
> --- cut ---
> and i get even worse faults in the driver.
>
> I know that it is possible to allocate larger pools by setting CONFIG_FORCE_MAX_ZONEORDER,
> but:
> a) This is done on per-platform basis. For ThunderX we used to have a patch
> (http://www.spinics.net/lists/arm-kernel/msg415457.html), which never made it upstream,
> because vGIC fixes stopped requiring it at some point. And also we may want to use the nicvf
> driver not only on actual hardware, but also inside virtual machine in KVM. So do we need to
> set CONFIG_FORCE_MAX_ZONEORDER for virt too? And what if at some point qemu emulates not only
> "virt", but some other machine (let's say AMD X-Gene), and we run it on ThunderX and want to
> use nicvf with this model?
> b) IMHO it's not good to have a driver which simply does not work without some obscure option
> in boot arguments.
>
> So, i see several possible ways to solve this:
>
> 1. Introduce some mechanism which would allow the driver to tell the kernel that it needs
> coherent pool of large size. Can be problematic because the driver can be a module, and pool
> allocation happens early.
> 2. Can we use some other method for allocating queues, which would not require such a huge
> coherent pool?
> 3. The driver could check value of atomic_pool_size and adjust own memory requirements
> accordingly. This indeed looks like a quick hack, but would at least make things running
> quickly.
I have also noticed that CONFIG_DMA_CMA is turned off in my kernel. I guess it was a leftover from old defconfig, because i carry over my .config from version to version. I enabled it and rebuilt the kernel, but in order to get the driver working with this patch i had to also add cma=32M option to kernel arguments. With default of 16M the allocation still fails.
Should we add Kconfig dependencies?
Kind regards,
Pavel Fedin
Expert Engineer
Samsung Electronics Research center Russia
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists