← Documents Documentation/bpf/redirect.rst GitHub 원문 ↗

Linux 6.18.37 · BPF

Redirect

XDP_REDIRECT가 지원하는 맵, 드라이버의 프레임 송신 제약, bpftrace와 perf를 이용한 조용한 패킷 드롭 및 오류 코드 추적 방법을 설명합니다.

Source pathDocumentation/bpf/redirect.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

redirect.rst:1-81

`XDP_REDIRECT`는 DEVMAP, DEVMAP_HASH, CPUMAP, XSKMAP을 대상으로 패킷을 다른 장치, CPU 또는 AF_XDP 소켓으로 보냅니다. 실제 송신 및 비선형 프레임 지원 여부는 드라이버에 따라 다릅니다.

조용한 드롭은 XDP tracepoint를 관찰해 진단합니다. `bpftrace`로 전체 이벤트와 음수 `err` 값을 집계하거나 `perf record`로 주요 오류 및 송신 tracepoint를 기록할 수 있습니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0-only
2 .. Copyright (C) 2022 Red Hat, Inc.
3
4 ========
5 Redirect
6 ========
7 XDP_REDIRECT
8 ############
9 Supported maps
10 --------------
11
12 XDP_REDIRECT works with the following map types:
13
14 - ``BPF_MAP_TYPE_DEVMAP``
15 - ``BPF_MAP_TYPE_DEVMAP_HASH``
16 - ``BPF_MAP_TYPE_CPUMAP``
17 - ``BPF_MAP_TYPE_XSKMAP``
18
19 For more information on these maps, please see the specific map documentation.
20
21 Process
22 -------
23
24 .. kernel-doc:: net/core/filter.c
25 :doc: xdp redirect
26
27 .. note::
28 Not all drivers support transmitting frames after a redirect, and for
29 those that do, not all of them support non-linear frames. Non-linear xdp
30 bufs/frames are bufs/frames that contain more than one fragment.
31
32 Debugging packet drops
33 ----------------------
34 Silent packet drops for XDP_REDIRECT can be debugged using:
35
36 - bpf_trace
37 - perf_record
38
39 bpf_trace
40 ^^^^^^^^^
41 The following bpftrace command can be used to capture and count all XDP tracepoints:
42
43 .. code-block:: none
44
45 sudo bpftrace -e 'tracepoint:xdp:* { @cnt[probe] = count(); }'
46 Attaching 12 probes...
47 ^C
48
49 @cnt[tracepoint:xdp:mem_connect]: 18
50 @cnt[tracepoint:xdp:mem_disconnect]: 18
51 @cnt[tracepoint:xdp:xdp_exception]: 19605
52 @cnt[tracepoint:xdp:xdp_devmap_xmit]: 1393604
53 @cnt[tracepoint:xdp:xdp_redirect]: 22292200
54
55 .. note::
56 The various xdp tracepoints can be found in ``source/include/trace/events/xdp.h``
57
58 The following bpftrace command can be used to extract the ``ERRNO`` being returned as
59 part of the err parameter:
60
61 .. code-block:: none
62
63 sudo bpftrace -e \
64 'tracepoint:xdp:xdp_redirect*_err {@redir_errno[-args->err] = count();}
65 tracepoint:xdp:xdp_devmap_xmit {@devmap_errno[-args->err] = count();}'
66
67 perf record
68 ^^^^^^^^^^^
69 The perf tool also supports recording tracepoints:
70
71 .. code-block:: none
72
73 perf record -a -e xdp:xdp_redirect_err \
74 -e xdp:xdp_redirect_map_err \
75 -e xdp:xdp_exception \
76 -e xdp:xdp_devmap_xmit
77
78 References
79 ===========
80
81 - https://github.com/xdp-project/xdp-tutorial/tree/master/tracing02-xdp-monitor
82

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

XDP_REDIRECT 지원 맵

1-20

`Redirect` 문서는 `GPL-2.0-only` 라이선스를 따르며, 저작권은 2022 Red Hat, Inc.에 있습니다.

`XDP_REDIRECT`는 다음 맵 형식과 함께 동작합니다.

  • `BPF_MAP_TYPE_DEVMAP`
  • `BPF_MAP_TYPE_DEVMAP_HASH`
  • `BPF_MAP_TYPE_CPUMAP`
  • `BPF_MAP_TYPE_XSKMAP`

각 맵에 관한 자세한 내용은 해당 맵의 전용 문서를 참조하십시오.

리다이렉트 처리와 드라이버 제약

21-31

XDP 리다이렉트 처리 과정은 `net/core/filter.c`의 `xdp redirect` kernel-doc에 정의되어 있습니다.

.. kernel-doc:: net/core/filter.c
   :doc: xdp redirect

모든 드라이버가 리다이렉트 뒤의 프레임 송신을 지원하는 것은 아니며, 이를 지원하는 드라이버도 모두 non-linear frames를 지원하지는 않습니다. non-linear xdp bufs/frames는 둘 이상의 fragment를 포함하는 버퍼 또는 프레임입니다.

bpf_trace로 조용한 패킷 드롭 추적

32-57

`XDP_REDIRECT`에서 아무 메시지 없이 발생하는 패킷 드롭은 다음 도구로 디버깅할 수 있습니다.

  • `bpf_trace`
  • `perf_record`

다음 `bpftrace` 명령은 모든 XDP tracepoints를 캡처하고 발생 횟수를 셉니다.

sudo bpftrace -e 'tracepoint:xdp:* { @cnt[probe] = count(); }'
Attaching 12 probes...
^C

@cnt[tracepoint:xdp:mem_connect]: 18
@cnt[tracepoint:xdp:mem_disconnect]: 18
@cnt[tracepoint:xdp:xdp_exception]: 19605
@cnt[tracepoint:xdp:xdp_devmap_xmit]: 1393604
@cnt[tracepoint:xdp:xdp_redirect]: 22292200

여러 XDP tracepoint의 정의는 `source/include/trace/events/xdp.h`에서 찾을 수 있습니다.

리다이렉트 ERRNO 집계

58-66

다음 `bpftrace` 명령은 `err` 매개변수의 일부로 반환된 `ERRNO`를 추출하여 `xdp_redirect*_err`와 `xdp_devmap_xmit`별로 집계합니다.

sudo bpftrace -e \
'tracepoint:xdp:xdp_redirect*_err {@redir_errno[-args->err] = count();}
tracepoint:xdp:xdp_devmap_xmit {@devmap_errno[-args->err] = count();}'

perf record와 참고 자료

67-81

`perf record` 도구도 XDP tracepoint 기록을 지원합니다. 다음 명령은 리다이렉트 오류, 맵 오류, 예외와 devmap 송신 이벤트를 시스템 전체에서 기록합니다.

perf record -a -e xdp:xdp_redirect_err \
    -e xdp:xdp_redirect_map_err \
    -e xdp:xdp_exception \
    -e xdp:xdp_devmap_xmit

추가 예제는 다음 XDP 튜토리얼을 참조하십시오.

  • https://github.com/xdp-project/xdp-tutorial/tree/master/tracing02-xdp-monitor