nuttx/mm/iob/Kconfig
zhanghongyu 13f59128fd iob: limit the iob bufsize is sufficient to fill all L2/L3/L4 headers
rndis header length is 36, L2 header is 14, IPv6 header is 40, tcp header is 56 when sack option count is 4(default max_ofosegs is 4). so the iob bufsize should greater than we need.

Signed-off-by: zhanghongyu <zhanghongyu@xiaomi.com>
2023-09-20 14:35:22 +08:00

121 lines
4.0 KiB
Plaintext

#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#
menu "Common I/O Buffer Support"
config MM_IOB
bool "Enable generic I/O buffer support"
default n
---help---
This setting will build the common I/O buffer (IOB) support
library.
if MM_IOB
config IOB_NBUFFERS
int "Number of pre-allocated I/O buffers"
default 36 if NET_WRITE_BUFFERS
default 24 if !NET_WRITE_BUFFERS && NET_READAHEAD
default 8 if !NET_WRITE_BUFFERS && !NET_READAHEAD
---help---
Each packet is represented by a series of small I/O buffers in a
chain. This setting determines the number of preallocated I/O
buffers available for packet data.
config IOB_BUFSIZE
int "Payload size of one I/O buffer"
range 196 65535 if NET_TCP_SELECTIVE_ACK && NET_IPv6 && RNDIS
range 128 65535 if NET_TCP_SELECTIVE_ACK && (NET_IPv4 || NET_IPv6)
default 196
---help---
Each packet is represented by a series of small I/O buffers in a
chain. This setting determines the data payload each preallocated
I/O buffer.
config IOB_ALIGNMENT
int "Alignment size of each I/O buffer"
default 4
---help---
The member io_data of all I/O buffers is aligned to the value
specified by this configuration.
config IOB_SECTION
string "The section where iob buffer is located"
---help---
The section where iob buffer is located.
The section must be zero-initialized on system boot.
config IOB_NCHAINS
int "Number of pre-allocated I/O buffer chain heads"
default 0 if !NET_READAHEAD
default IOB_NBUFFERS if NET_READAHEAD
---help---
These tiny nodes are used as "containers" to support queueing of
I/O buffer chains. This will limit the number of I/O transactions
that can be "in-flight" at any give time. The default value of
zero disables this features.
These generic I/O buffer chain containers are not currently used
by any logic in NuttX. That is because their other specialized
I/O buffer chain containers that also carry a payload of usage
specific information.
Note: TCP doesn't use this.
Note: UDP and CAN use this.
config IOB_THROTTLE
int "I/O buffer throttle value"
default 0 if !NET_WRITE_BUFFERS || !NET_READAHEAD
default 8 if NET_WRITE_BUFFERS && NET_READAHEAD
---help---
TCP write buffering and read-ahead buffer use the same pool of free
I/O buffers. In order to prevent uncontrolled incoming TCP packets
from hogging all of the available, pre-allocated I/O buffers, a
throttling value is required. This throttle value assures that
I/O buffers will be denied to the read-ahead logic before TCP writes
are halted.
config IOB_NOTIFIER
bool "Support IOB notifications"
default n
depends on SCHED_WORKQUEUE
select WQUEUE_NOTIFIER
---help---
Enable building of IOB notifier logic that will execute a worker
function on the high priority work queue when an IOB is available.
This is is a general purpose notifier, but was developed specifically to
support poll() logic where the poll must wait for an IOB to become
available.
config IOB_NOTIFIER_DIV
int "Notification divider"
default 4
range 1 64
depends on IOB_NOTIFIER
---help---
IOBs may become available at very high rates and the resulting
notification processing can be substantial even if there is nothing
waiting for a free IOB. This divider will reduce that rate of
notification. This must be an even power of two. Supported values
include: 1, 2, 4, 8, 16, 32, 64. The default value of 4 means that
a notification will be sent only when there are a multiple of 4 IOBs
available.
config IOB_DEBUG
bool "Force I/O buffer debug"
default n
depends on DEBUG_FEATURES && !SYSLOG_BUFFER
---help---
This option will force debug output from I/O buffer logic. This
is not normally something that would want to do but is convenient
if you are debugging the I/O buffer logic and do not want to get
overloaded with other un-related debug output.
NOTE that this selection is not available if IOBs are being used
to syslog buffering logic (CONFIG_SYSLOG_BUFFER=y)!
endif # MM_IOB
endmenu # Common I/O buffer support