Small devices can run out of memory from queueing too many packets. If
VHT is not supported by the PHY, having more than 4 MBytes of total
queue in the TXQ intermediate queues is not needed, and so we can safely
limit the memory usage in these cases and avoid OOM.
Signed-off-by: Toke Høiland-Jørgensen <redacted>
---
net/mac80211/tx.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
From: Johannes Berg <johannes@sipsolutions.net> Date: 2016-09-30 11:33:55
On Fri, 2016-09-23 at 21:59 +0200, Toke Høiland-Jørgensen wrote:
Small devices can run out of memory from queueing too many packets.
If VHT is not supported by the PHY, having more than 4 MBytes of
total queue in the TXQ intermediate queues is not needed, and so we
can safely limit the memory usage in these cases and avoid OOM.
I kinda see the logic here - we really don't need to queue as much if
we can't possibly transmit it out quickly - but it seems to me we
should also throw in some kind of limit that's relative to the amount
of memory you have on the system?
I've applied these anyway though. I just don't like your assumption (b)
much as the rationale for it.
johannes
On Fri, 2016-09-23 at 21:59 +0200, Toke Høiland-Jørgensen wrote:
quoted
Small devices can run out of memory from queueing too many packets.
If VHT is not supported by the PHY, having more than 4 MBytes of
total queue in the TXQ intermediate queues is not needed, and so we
can safely limit the memory usage in these cases and avoid OOM.
I kinda see the logic here - we really don't need to queue as much if
we can't possibly transmit it out quickly - but it seems to me we
should also throw in some kind of limit that's relative to the amount
of memory you have on the system?
Yes, ideally. That goes for FQ-CoDel as well, BTW. LEDE currently
carries a patch for that which just changes the hard-coded default to
another hard-coded default. Not sure how to get a good value to use,
though; and deciding on how large a fraction of memory to use for
packets starts smelling an awful lot like setting policy in the kernel,
doesn't it?
I've applied these anyway though. I just don't like your assumption (b)
much as the rationale for it.
Right, thanks. I'll come up with a better rationale next time ;)
-Toke
From: Johannes Berg <johannes@sipsolutions.net> Date: 2016-09-30 12:51:59
quoted
I kinda see the logic here - we really don't need to queue as much
if we can't possibly transmit it out quickly - but it seems to me
we should also throw in some kind of limit that's relative to the
amount of memory you have on the system?
Yes, ideally. That goes for FQ-CoDel as well, BTW. LEDE currently
carries a patch for that which just changes the hard-coded default to
another hard-coded default. Not sure how to get a good value to use,
though; and deciding on how large a fraction of memory to use for
packets starts smelling an awful lot like setting policy in the
kernel, doesn't it?
Yeah, I agree it does seem awkward.
Perhaps we should instead pick a low limit and let users change it more
easily (i.e. not debugfs)? I don't know a good answer to this either.
johannes
I kinda see the logic here - we really don't need to queue as much
if we can't possibly transmit it out quickly - but it seems to me
we should also throw in some kind of limit that's relative to the
amount of memory you have on the system?
Yes, ideally. That goes for FQ-CoDel as well, BTW. LEDE currently
carries a patch for that which just changes the hard-coded default to
another hard-coded default. Not sure how to get a good value to use,
though; and deciding on how large a fraction of memory to use for
packets starts smelling an awful lot like setting policy in the
kernel, doesn't it?
Yeah, I agree it does seem awkward.
Perhaps we should instead pick a low limit and let users change it
more easily (i.e. not debugfs)? I don't know a good answer to this
either.
Hmm, I'll talk it over with some of the LEDE people who are more used to
dealing with these sorts of memory-constrained devices than I am. Will
send a patch if we come up with a good solution :)
-Toke