Documentation/sysctl/net.txt

출처: https://www.kernel.org/doc/Documentation/sysctl/net.txt
"busy poll timeout" 번역 표현이 참 어색합니다. 적당한 한글 표현을 못 찾겠습니다.

proc/sys/net/*에 대한 문서
(c) 1999 Terrehon Bowden terrehon@pacbell.net
보도 바우어 bb@ricochet.net
(c) 2000 Jorge Nerin comandante@zaralinux.com
(c) 2009 Shen Feng shen@cn.fujitsu.com

일반 정보 및 법적 고지사항은 README를 참조하세요.


이 파일에는 /proc/sys/net의 sysctl 파일에 대한 설명서가 포함되어 있습니다.

커널의 네트워킹 부분에 대한 인터페이스는 /proc/sys/net에 있습니다. 다음 표는 가능한 모든 하위 디렉터리를 보여줍니다. 커널의 구성에 따라 일부만 표시될 수도 있습니다.

표 : /proc/sys/net의 하위 디렉토리

..............................................................................
 Directory Content             Directory  Content
 core      General parameter   appletalk  Appletalk protocol
 unix      Unix domain sockets netrom     NET/ROM
 802       E802 protocol       ax25       AX25
 ethernet  Ethernet protocol   rose       X.25 PLP layer
 ipv4      IP version 4        x25        X.25 protocol
 ipx       IPX                 token-ring IBM token ring
 bridge    Bridging            decnet     DEC net
 ipv6      IP version 6        tipc       TIPC
..............................................................................

1. /proc/sys/net/core – 네트워크 코어 옵션

bpf_jit_enable

이 설정은 BPF Just in Time(JIT) 컴파일러를 활성화합니다. BPF는 다양한 훅 포인트에서 바이트코드를 실행할 수 있는 유연하고 효율적인 인프라입니다. 네트워킹(예: XDP, tc), 추적(예: kprobes, 업로브, 트레이스포인트) 및 보안(예: seccomp) 등 여러 Linux 커널 하위 시스템에서 사용됩니다. LLVM에는 제한된 C를 일련의 BPF 명령어로 컴파일할 수 있는 BPF 백엔드가 있습니다. bpf(2)를 통해 프로그램을 로드하고 커널에서 검증기를 통과한 후 JIT가 이러한 BPF 프로그릿(proglet)을 네이티브 CPU 명령어로 변환합니다. JIT에는 두 가지 버전이 있으며, 현재 지원되는 최신 eBPF JIT는 다음과 같습니다:

  • x86_64
  • x86_32
  • arm64
  • arm32
  • ppc64
  • sparc64
  • mips64
  • s390x
  • riscv

그리고 다음 아키텍처에서 지원되는 구형 cBPF JIT:

  • mips
  • ppc
  • sparc

eBPF JIT는 cBPF JIT의 상위 집합으로, 커널이 cBPF 명령어를 eBPF 명령어로 마이그레이션한 다음 투명하게 컴파일하는 JIT를 의미합니다. 이전 cBPF JIT는 tcpdump 필터, seccomp 규칙 등만 변환할 수 있으며, bpf(2)를 통해 로드된 eBPF 프로그램은 언급하지 않습니다.

값 :
0 – JIT 비활성화(기본값)
1 – JIT 활성화
2 – JIT를 활성화하고 컴파일러가 커널 로그에 추적을 생성하도록 요청합니다.

bpf_jit_harden

BPF JIT 컴파일러에 대한 하드닝을 활성화합니다. 지원되는 것은 eBPF JIT 백엔드입니다. 하드닝을 활성화하면 성능이 저하되지만 JIT 스프레이를 완화할 수 있습니다.
값 :
0 – JIT 하드닝 비활성화(기본값)
1 – 권한이 없는 사용자에 대해서만 JIT 하드닝 활성화
2 – 모든 사용자에 대해 JIT 하드닝 활성화

bpf_jit_kallsyms

BPF JIT 컴파일러가 활성화되면 컴파일된 이미지는 커널에서 알 수 없는 주소이므로 트레이스나 /proc/kallsyms에 표시되지 않습니다. 이 경우 디버깅/트레이스에 사용할 수 있는 이러한 주소를 내보낼 수 있습니다. bpf_jit_harden이 활성화되면 이 기능은 비활성화됩니다.
값 :
0 – JIT kallsyms 내보내기 비활성화(기본값)
1 – 권한 있는 사용자에 대해서만 JIT kallsyms 내보내기 활성화

bpf_jit_limit

이 값을 초과하면 권한이 없는 JIT 요청을 거부하기 위해 BPF JIT 컴파일러에 메모리 할당에 대한 전역 제한을 적용합니다. bpf_jit_limit은 전역 제한 값을 바이트 단위로 포함합니다.

dev_weight

커널이 NAPI 인터럽트에서 처리할 수 있는 최대 패킷 수로, CPU별 변수입니다. LRO 또는 GRO_HW를 지원하는 드라이버의 경우, 하드웨어적으로 집계된 패킷은 이 컨텍스트에서 하나의 패킷으로 계산됩니다.

기본값: 64

dev_weight_rx_bias

RPS(예: RFS, aRFS) 처리는 드라이버의 등록된 NAPI 폴링 기능과 softirq 주기당 netdev_budget에 대해 경쟁합니다. 이 파라미터는 RX softirq 주기 동안 RPS 기반 패킷 처리에 사용되는 구성된 netdev_budget의 비율에 영향을 줍니다. 또한 네트워크 스택의 RX/TX 측에서 비대칭 CPU 요구 사항에 맞게 현재 dev_weight를 조정할 수 있도록 하기 위한 것입니다. (dev_weight_tx_bias 참조) CPU별로 적용됩니다. 결정은 dev_weight를 기반으로 하며 곱셈(dev_weight * dev_weight_rx_bias)으로 계산됩니다.
기본값: 1

dev_weight_tx_bias

TX softirq 주기 동안 처리할 수 있는 최대 패킷 수를 조정합니다. CPU 단위로 유효합니다. 비대칭 넷 스택 처리 요구에 따라 현재 dev_weight의 스케일링을 허용합니다. TX softirq 처리가 CPU를 많이 사용하지 않도록 주의하세요. 계산은 dev_weight(dev_weight * dev_weight_tx_bias)를 기준으로 합니다.
기본값: 1

default_qdisc

네트워크 장치에 사용할 기본 대기열 규율입니다. 이를 통해 기본값인 pfifo_fast를 대체 항목으로 재정의할 수 있습니다. 기본 큐 규율은 추가 매개변수 없이 생성되므로 stochastic fair queue (sfq), CoDel(codel), fair queue CoDel(fq_codel)과 같이 구성 없이도 잘 작동하는 큐 규율에 가장 적합합니다. Hierarchical Token Bucket 또는 Deficit Round Robin과 같이 클래스와 대역폭을 설정해야 하는 큐 분야는 사용하지 마세요. 물리적 멀티큐 인터페이스는 여전히 mq를 루트 큐디스크로 사용하며, 이는 다시 이 기본값을 리프에 사용한다는 점에 유의하세요. 가상 장치(예: lo 또는 veth)는 이 설정을 무시하고 대신 기본값이 noqueue로 설정됩니다.
기본값: pfifo_fast

busy_read

소켓 읽기에 대한 짧은 대기 시간 바쁜 폴링 시간 초과. (CONFIG_NET_RX_BUSY_POLL 필요) 장치 대기열에서 패킷을 대기하는 바쁜 루프에 대한 대략적인 시간입니다. SO_BUSY_POLL 소켓 옵션의 기본값을 설정합니다. 소켓 옵션 SO_BUSY_POLL을 설정하여 소켓별로 설정하거나 재정의할 수 있습니다. 기능을 전역으로 활성화해야 하는 경우 값은 50을 권장합니다. 전력 사용량이 증가합니다.
기본값: 0(꺼짐)

busy_poll

폴링 및 선택을 위한 짧은 대기 시간 바쁜 폴링 타임아웃. (CONFIG_NET_RX_BUSY_POLL 필요) 이벤트를 기다리는 바쁜 루프까지의 대략적인 시간입니다. 권장 값은 폴링하는 소켓 수에 따라 다릅니다. 몇 개의 소켓의 경우 50, 수백 개의 경우 100. 그 이상이면 epoll을 사용하는 것이 좋습니다.
SO_BUSY_POLL이 설정된 소켓만 바쁘게 폴링되므로 해당 소켓에 선택적으로 SO_BUSY_POLL을 설정하거나 전역적으로 sysctl.net.busy_read를 설정하는 것이 좋습니다.
전력 사용량이 증가합니다.
기본값: 0(꺼짐)

rmem_default

소켓 수신 버퍼의 기본 설정(바이트 단위)입니다.

rmem_max

최대 수신 소켓 버퍼 크기(바이트)입니다.

tstamp_allow_data

프로세스가 원본 패킷 내용과 함께 루프된 tx 타임스탬프를 수신할 수 있도록 허용합니다. 비활성화하면 권한이 없는 프로세스의 타임스탬프 요청을 전송합니다.
프로세스의 전송 타임스탬프 요청은 소켓 옵션 SOF_TIMESTAMPING_OPT_TSONLY가 설정되지 않은 한 삭제됩니다.
기본값: 1(켜짐)

wmem_default

소켓 전송 버퍼의 기본 설정(바이트 단위)입니다.

wmem_max

최대 전송 소켓 버퍼 크기(바이트)입니다.

message_burst와 message_cost

이 매개변수는 네트워킹 코드에서 커널 로그에 기록되는 경고 메시지를 제한하는 데 사용됩니다. 이 매개변수는 속도 제한을 적용하여 서비스 거부 공격을 불가능하게 합니다. message_cost 계수가 높을수록 기록되는 메시지의 수가 줄어듭니다. 메시지_버스트는 메시지 삭제 시기를 삭제되는 시기를 제어합니다. 기본 설정은 경고 메시지를 5초마다 1개로 제한합니다.

warnings

이 sysctl은 이제 사용되지 않습니다.
중복 주소 또는 잘못된 체크섬과 같은 네트워크 문제로 인해 발생하는 네트워킹 스택의 콘솔 메시지를 제어하는 데 사용되었습니다.

이러한 메시지는 이제 KERN_DEBUG에서 방출되며 일반적으로 dynamic_debug 기능으로 활성화 및 제어할 수 있습니다.

netdev_budget

한 폴링 주기에서 모든 인터페이스에서 가져오는 최대 패킷 수(NAPI 폴링). 한 폴링 주기에서 폴링에 등록된 인터페이스는 라운드 로빈 방식으로 프로브됩니다. 또한, 폴링 주기는 netdev_budget이 소진되지 않은 경우에도 netdev_budget_usecs 마이크로초를 초과할 수 없습니다.

netdev_budget_usecs

한 번의 NAPI 폴링 주기에서 최대 마이크로초 수입니다. 폴링은 폴링 주기 동안 netdev_budget_usecs가 경과하거나
폴링 주기가 경과하거나 처리된 패킷 수가 netdev_budget에 도달하면 폴링이 종료됩니다.

netdev_max_backlog

인터페이스가 커널이 처리할 수 있는 속도보다 빠르게 패킷을 수신할 때 입력 측에 대기 중인 패킷의 최대 수입니다.

netdev_rss_key

RSS (Receive Side Scaling) 지원 드라이버는 무작위로 생성되는 40바이트 호스트 키를 사용합니다. 일부 사용자 공간은 드라이버가 아직 ethtool -x 지원을 제공하지 않더라도 해당 콘텐츠를 수집해야 할 수 있습니다.

myhost:~# cat /proc/sys/net/core/netdev_rss_key
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8: ... (총 52바이트)

드라이버가 netdev_rss_key_fill() 함수를 호출한 적이 없는 경우 파일에 nul 바이트가 포함됩니다.
참고:
/proc/sys/net/core/netdev_rss_key에는 52바이트의 키가 포함되어 있지만 대부분의 드라이버는 이 중 40바이트만 사용합니다.

myhost:~# ethtool -x eth0
RX flow hash indirection table for eth0 with 8 RX ring(s):
    0:    0     1     2     3     4     5     6     7
RSS hash key:
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8:43:e3:c9:0c:fd:17:55:c2:3a:4d:69:ed:f1:42:89

netdev_tstamp_prequeue

0으로 설정하면 타겟 CPU가 패킷을 처리할 때 RPS 처리 후 RX 패킷 타임스탬프를 샘플링할 수 있습니다. 타임스탬프에 약간의 지연이 발생할 수 있지만 여러 CPU에 부하를 분산할 수 있습니다.

1(기본값)로 설정하면, 큐에 대기하기 전에 가능한 한 빨리 타임스탬프가 샘플링됩니다.

optmem_max

소켓당 허용되는 최대 보조 버퍼 크기입니다. 보조 데이터는 데이터가 추가된 일련의 cmsghdr 구조체입니다.

fb_tunnels_only_for_init_net

새 네트워크 네임스페이스가 생성될 때 폴백 터널(예: tunl0, gre0, gretap0, erspan0, sit0, ip6tnl0, ip6gre0)이 자동으로 생성되는지 여부를 제어합니다.
네트워크 네임스페이스가 생성될 때 해당 터널이 초기 네트워크 네임스페이스에 있는 경우 자동으로 생성됩니다.
1로 설정하면 이러한 장치는 자동으로 생성되지 않으며 필요한 경우 사용자 공간에서 직접 생성해야 합니다.

기본값: 0(호환성을 위해)

devconf_inherit_init_net

새 네트워크 네임스페이스가 /proc/sys/net/{ipv4,ipv6}/conf/{all,default}/의 모든 현재 설정을 상속할지 여부를 제어합니다. 기본값은 현재 동작을 유지합니다. IPv4의 경우 init_net의 모든 현재 설정을 상속하고 IPv6의 경우 모든 설정을 기본값으로 재설정합니다.
1로 설정하면 IPv4 및 IPv6 설정이 모두 init_net의 현재 설정에서 강제로 상속됩니다. 2로 설정하면 IPv4 및 IPv6 설정이 모두 기본값으로 강제로 재설정됩니다.

기본값: 0(호환성을 위해)

2. /proc/sys/net/unix – 유닉스 도메인 소켓용 파라미터

이 디렉터리에는 파일이 하나만 있습니다.
unix_dgram_qlen은 유닉스 도메인 소켓의 버퍼에 대기 중인 데이터그램의 최대 개수를 제한합니다. PF_UNIX 플래그를 지정하지 않으면 적용되지 않습니다.

3. /proc/sys/net/ipv4 – IPV4 설정

참조하세요: Documentation/networking/ip-sysctl.txt 및 ipvs-sysctl.txt를 참조하세요.

4. Appletalk

proc/sys/net/appletalk 디렉터리에는 Appletalk가 로드될 때 Appletalk 구성 데이터가 저장됩니다. 구성 가능한 파라미터는 다음과 같습니다:

aarp-expiry-time

ARP 항목을 만료하기 전까지 보관하는 기간입니다. 오래된 호스트를 만료하는 데 사용됩니다.

aarp-resolve-time

Appletalk 주소를 확인하는 데 소요되는 시간입니다.

aarp-retransmit-limit

쿼리를 포기하기 전에 재전송할 횟수입니다.

aarp-tick-time

만료가 확인되는 속도를 제어합니다.
proc/net/appletalk 디렉터리에는 머신의 활성 Appletalk 소켓 목록이 저장됩니다.

필드에는 DDP 유형, 로컬 주소(네트워크:노드 형식) 원격 주소, 전송 대기열의 크기, 전송 대기열의 크기, 수신 대기열의 크기(애플리케이션이 읽기를 기다리는 바이트), 상태 및 소켓을 소유한 UID를 나타냅니다.

/proc/net/atalk_iface는 appletalk에 대해 구성된 모든 인터페이스를 나열합니다. 여기에는 인터페이스의 이름, 해당 Appletalk 주소, 해당 주소의 네트워크 범위가 표시됩니다.
해당 주소(1단계 네트워크의 경우 네트워크 번호), 인터페이스의 상태를 보여줍니다.

/proc/net/atalk_route는 알려진 각 네트워크 경로를 나열합니다. 여기에는 경로가 연결되는 대상(네트워크), 라우터(직접 연결될 수 있음), 라우터 플래그, 경로 플래그, 그리고 경로가 사용 중인 디바이스가 나열됩니다.

5. IPX

IPX 프로토콜은 proc/sys/net에서 조정할 수 있는 값이 없습니다. 그러나 IPX 프로토콜은 proc/net/ipx를 제공합니다. 여기에는 로컬 및 원격 주소를 제공하는 각 IPX 소켓이 Novell 형식(network:node:port). 이상한 Novell의 전통에 따라 포트를 제외한 모든 것이 16진수로 되어 있습니다. 특정 원격 주소에 연결되지 않은 소켓의 경우 특정 원격 주소에 연결되지 않은 소켓에 대해 표시됩니다. 송신 및 수신 대기열 크기는 송신 및 수신을 위해 대기 중인 바이트 수를 나타냅니다. 상태는 소켓이 현재 어떤 상태인지, uid는 소켓의 소유자 아이디를 나타냅니다.

proc/net/ipx_interface 파일은 모든 IPX 인터페이스를 나열합니다. 각 인터페이스에 대해 네트워크 번호, 노드 번호, 네트워크가 기본 네트워크인지, 기본 네트워크인지 표시합니다. 또한 어떤 장치에 바인딩되어 있는지(또는 내부 네트워크의 경우 내부)와 적절한 경우 프레임 유형도 표시합니다. Linux IPX용 802.3, 802.2, 802.2 SNAP 및 DIX(Blue Book) 이더넷 프레이밍을 지원합니다.

proc/net/ipx_route 테이블에는 IPX 경로 목록이 있습니다. 각 경로에 대해 대상 네트워크, 라우터 노드(또는 직접) 및 라우터의 네트워크 라우터 주소(또는 내부 네트워크의 경우 연결됨)를 제공합니다.

6. TIPC

tipc_rmem

이제 TIPC 프로토콜에는 tcp_rmem과 유사한 수신 메모리 튜너가 있습니다. 즉, (최소, 기본값, 최대) 3개의 INTEGER 벡터.

# cat /proc/sys/net/tipc/tipc_rmem
4252725 34021800 68043600
#

최대 값은 CONN_OVERLOAD_LIMIT로 설정되며 기본값과 최소값은 동일한 값의 스케일(시프트) 버전입니다. 최소값
은 현재로서는 의미 있는 방식으로 사용되지 않지만, tcp_rmem 등과 일관성을 유지하기 위해 삼중항은 보존됩니다.

named_timeout

TIPC 네임 테이블 업데이트는 어떤 형태의 트랜잭션 처리 없이 클러스터에서 비동기적으로 배포됩니다. 즉, 다양한 경쟁 시나리오가 가능하다는 뜻입니다. 예를 들어, 한 노드에서 보낸 이름 철회가 다른 노드에서 수신된 후 세 번째 노드에서 이미 중복된 두 번째 이름 게시가 수락된 후에 도착할 수 있지만, 원래는 올바른 순서로 업데이트가 발행되었더라도 충돌하는 업데이트가 발생할 수 있습니다.
named_timeout이 0이 아닌 경우 실패한 토폴로지 업데이트는 오류를 지우는 다른 이벤트가 도착할 때까지 또는 시간 제한이 만료될 때까지. 값은 밀리초 단위입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like
Read More

Zram 성능 분석

Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.출처: https://notes.xeome.dev/notes/Zram 소개 Zram은 압축된 가상 메모리 블록 장치를 활용하여…
Read More

/sysctl/README

RHCA 달리던 중에 "RH442 Performance Tuning Linux in Physical Virtual and Cloud"라는 과목이 있습니다. 보던 중 sysctl을 이용해서…
Read More

/vm/numa.rst: What is NUMA

Linux 설명서의 본진이라 생각되는 kernel.org/doc/Documentation 의 문서들을 시간날 때 조금씩 보려고 합니다. 영어를 잘 못하지만 DeepL을 이용해서 기계번역하고,…
Read More

/sysctl/fs.txt

/proc/sys/fs/*에 대한 문서 커널 버전 2.2.10(c) 1998, 1999, Rik van Riel riel@nl.linux.org(c) 2009, Shen Fengshen@cn.fujitsu.com 일반 정보 및…
Read More

/sysctl/vm.txt

RHCA 달리던 중에 "RH442 Performance Tuning Linux in Physical Virtual and Cloud"라는 과목이 있습니다. 보던 중 sysctl을 이용해서…