# 리눅스 네트워크 성능 궁극 가이드

> Clean Markdown view of GeekNews topic #16065. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16065](https://news.hada.io/topic?id=16065)
- GeekNews Markdown: [https://news.hada.io/topic/16065.md](https://news.hada.io/topic/16065.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-07-29T09:56:15+09:00
- Updated: 2024-07-29T09:56:15+09:00
- Original source: [ntk148v.github.io](https://ntk148v.github.io/posts/linux-network-performance-ultimate-guide/)
- Points: 5
- Comments: 0

## Topic Body

#### Linux 네트워킹 스택  
  
##### Linux 네트워크 패킷 수신  
  
- 네트워크 장치에서 NIC(Network Interface Card)는 패킷이 도착했음을 알리기 위해 IRQ(Interrupt Request)를 발생시킴  
- IRQ 핸들러는 매우 높은 우선순위로 실행되며, 추가 IRQ 생성을 차단함  
- softIRQ 시스템은 장치 드라이버 IRQ 컨텍스트 외부에서 작업을 처리하기 위해 사용됨  
- softIRQ 커널 스레드가 생성되고, `softnet_data` 구조체가 생성됨  
- NIC는 네트워크 데이터가 RAM의 링 버퍼에 기록되도록 DMA(Direct Memory Access)를 사용함  
- NAPI softIRQ 폴링 루프가 시작됨  
- `net_rx_action` 루프가 NAPI 구조체를 확인하고, 패킷을 `napi_gro_receive`로 전달함  
- 패킷은 `netif_receive_skb`를 통해 프로토콜 스택으로 전달됨  
  
##### Linux 커널 네트워크 전송  
  
- 애플리케이션이 메시지를 전송하면 TCP 헤더가 작성되고, L3 핸들러가 호출됨  
- 패킷이 조각화되고, L2 전송 함수가 호출됨  
- 드라이버가 패킷을 `tx` 링 버퍼에 큐잉함  
- NIC가 RAM에서 패킷을 가져와 전송함  
- 전송이 완료되면 NIC가 하드 IRQ를 발생시킴  
- 드라이버가 이 IRQ를 처리하고, NAPI 폴 시스템을 스케줄링함  
  
#### 네트워크 성능 튜닝  
  
##### 빠른 HOWTO  
  
###### `/proc/net/softnet_stat` & `/proc/net/sockstat`  
  
- `/proc/net/softnet_stat` 파일은 각 CPU 코어의 통계를 제공함  
- `/proc/net/sockstat` 파일은 소켓 사용 통계를 제공함  
  
###### `ss`  
  
- `ss`는 소켓 통계를 조사하는 유틸리티로, 메모리 사용량을 확인할 수 있음  
  
###### `netstat`  
  
- `netstat`는 네트워크 연결 및 프로토콜 스택 통계를 제공하는 명령줄 유틸리티임  
  
###### `sysctl`  
  
- `sysctl` 명령을 사용하여 시스템/네트워크 설정을 변경할 수 있음  
- `/etc/sysctl.conf` 파일을 편집하여 영구적으로 값을 변경할 수 있음  
  
##### NIC 링 버퍼  
  
- NIC 링 버퍼는 고정 크기의 FIFO 버퍼로, RAM에 위치함  
- 버스트 연결을 원활하게 수용하기 위해 이 큐를 증가시킬 필요가 있음  
  
### GN⁺의 정리  
  
- 이 가이드는 Linux 네트워크 스택의 작동 방식을 상세히 설명하며, 네트워크 성능을 최적화하기 위한 다양한 방법을 제시함  
- 네트워크 패킷의 수신 및 전송 과정에서 발생하는 IRQ와 softIRQ의 역할을 이해하는 것이 중요함  
- `sysctl` 명령을 사용하여 시스템 설정을 조정하고, NIC 링 버퍼의 크기를 조정하여 성능을 향상시킬 수 있음  
- 네트워크 성능 튜닝은 시스템의 특정 요구 사항에 따라 달라질 수 있으며, 다양한 설정을 실험해보는 것이 필요함

## Comments



_No public comments on this page._
