여섯 장의 그림은 Linux 제로 카피 기술을 명확하게 설명합니다.
안녕하세요 여러분, 오늘은 Linux 제로 카피 기술에 대해 이야기하겠습니다. 우리는 zero-copy 기술의 기본 원리를 깊이 탐구하기 위한 진입점으로 sendfile 시스템 호출을 사용할 것입니다. 제로카피 기술의 핵심 아이디어는 메모리 간 데이터 복사를 최소화하고, 데이터 전송 경로를 최적화해 데이터 전송의 효율성과 성능을 향상시키는 것이다.
1. 제로카피 기술 소개
Linux 제로 복사 기술은 데이터 전송을 최적화하는 데 사용되는 기술로, 커널 모드와 사용자 모드 간의 데이터 복사 수를 줄여 데이터 전송 효율성을 향상시킵니다.
데이터 전송 과정에서 일반적으로 전송이 완료되기 전에 커널 버퍼에서 애플리케이션 버퍼로 데이터를 복사한 다음 애플리케이션 버퍼에서 네트워크 장치의 버퍼로 데이터를 복사해야 합니다.
제로 복사 기술의 장점은 중간 복사 단계 없이 데이터를 직접 전송할 수 있어 데이터 전송 효율성을 높이는 데 도움이 됩니다.
Linux 제로 복사 기술 구현:
- sendfile 시스템 호출: sendfile 시스템 호출은 사용자 상태와 커널 상태 사이의 데이터 복사를 방지하면서 커널 상태에서 네트워크 장치의 버퍼에 파일 내용을 직접 보낼 수 있습니다.
- splice 시스템 호출: splice 시스템 호출은 중간 복사 프로세스를 피하면서 한 파일 설명자에서 다른 파일 설명자로 데이터를 직접 전송하거나 한 파일 설명자에서 네트워크 장치의 버퍼로 데이터를 전송할 수 있습니다.
- mmap 및 쓰기 시스템 호출: mmap 시스템 호출은 파일을 메모리에 매핑한 다음 쓰기 시스템 호출을 사용하여 메모리의 데이터를 네트워크 장치의 버퍼로 직접 보내 사용자 모드와 커널 간의 데이터 복사를 방지할 수 있습니다. 모드.
- DMA(직접 메모리 액세스): DMA는 메모리에서 네트워크 장치의 버퍼로 데이터를 직접 전송할 수 있는 하드웨어 기술로, CPU 개입을 피하고 데이터 전송 효율성을 향상시킵니다.
2.sendfile 시스템 호출
sendfile 시스템 호출은 한 파일 설명자의 데이터를 다른 파일 설명자의 전송 버퍼로 복사하여 커널 공간 내에서 직접 파일 데이터를 전송할 수 있습니다. 이러한 방식으로 데이터는 네트워크 프로토콜 스택을 통해 직접 전송될 수 있으므로 사용자 공간과 커널 공간 간의 빈번한 데이터 복사 작업을 피할 수 있습니다.
이것은 커널과 사용자 공간 간의 데이터 복사를 방지하고 전송 효율성을 향상시킵니다.
sendfile 시스템 호출 함수 프로토타입:
으아악3.sendfile 구현 원칙
3.1 전통적인 방법으로 파일 보내기
기존 방식으로 소켓을 통해 파일을 전송하려면 상대적으로 긴 경로를 실행해야 합니다.
경로: 디스크->파일 페이지 캐시->사용자 버퍼->소켓 버퍼->네트워크 카드.
컨텍스트 전환 및 메모리 복사 상황은 다음과 같습니다.
- 컨텍스트 전환: 4회(읽기 호출, 읽기 반환, 쓰기 호출, 쓰기 반환)
- DMA 복사: 2회
- CPU 복사: 2회(파일 페이지 캐시->사용자 버퍼, 사용자 버퍼->소켓 버퍼)
사진
3.2 sendfile이 파일을 보냅니다
sendfile을 사용하여 파일을 보내면 전체 경로가 상대적으로 짧아집니다.
경로: 디스크->파일 페이지 캐시->소켓 버퍼->네트워크 카드.
컨텍스트 전환 및 메모리 복사 상황은 다음과 같습니다.
컨텍스트 전환: 2회(sendfile 호출, sendfile 반환)
DMA 복사: 2회
CPU 복사: 1회(파일 페이지 캐시 -> 소켓 버퍼)
사진
3.3 Sendfile 구현 원칙
sendfile 구현의 핵심은 파이프인데, 파이프를 통한 프로세스 간 통신 등 Linux 시스템에서 널리 사용됩니다.
파일 데이터를 소켓 버퍼에 복사해야 하는 경우 파이프(링 버퍼)가 임시로 생성되고 파일 데이터가 먼저 파이프에 복사된 다음 파이프 데이터가 소켓 버퍼로 마이그레이션됩니다. 데이터 복사가 아니라 메모리 주소에 대한 포인터를 가리킵니다.
사진
3.4 섹션
sendfile을 사용하여 파일을 보내면 두 개의 컨텍스트 전환과 하나의 CPU 복사본을 줄일 수 있습니다. 실제 응용 프로그램 시나리오에서 많은 수의 파일을 보내야 하는 경우 sendfile을 사용하면 시스템 성능이 크게 향상될 수 있습니다.
4. 파이프라인
4.1 파이프라인 소개
파이프는 Linux 시스템에서 널리 사용됩니다. 파이프를 사용한 제로 복사 기술 외에도 프로세스 간 통신에도 파이프가 사용됩니다.
사진
파이프라인이란 무엇인가요?
파이프는 실제로 한 파일에서 다른 파일로 데이터를 복사할 수 있는 링 버퍼입니다.
파이프는 structpipe_inode_info 구조로 정의됩니다. 이 데이터 구조에는 4개의 중요한 멤버가 있습니다.
- pipe_buffer: 파이프 버퍼 배열, 고정 길이 배열, 각 배열 구성원은 구조체 Pipe_buffer 구조에 해당하는 버퍼입니다.
- head: 마스크와 함께 사용해야 하는 현재 쓰기 가능한 버퍼의 위치를 나타내는 헤드 일련 번호입니다.
- tail: 마스크와 함께 사용해야 하는 현재 읽을 수 있는 버퍼의 위치를 나타내는 테일 일련 번호입니다.
- ring_size: 파이프 버퍼 배열 길이, ring_size - 1은 마스크를 계산하고, head & 마스크는 현재 쓰기 가능한 버퍼 배열 첨자를 얻고, tail & 마스크는 현재 읽을 수 있는 버퍼 배열 첨자를 얻습니다.
파이프 버퍼는 3개의 중요한 멤버가 있는 structpipe_buffer에 의해 정의됩니다:
- 페이지: 페이지 포인터
- 오프셋: 페이지의 데이터 오프셋
- len: 데이터 길이
파이프가 가득 차 있는지 비어 있는지 판단해 보세요.
파이프라인이 가득 찼다는 판단:
head – tail >= ring_size, 파이프가 가득 찼음을 나타냅니다.
파이프가 비어 있는지 판단:
head == tail, 파이프가 비어 있음을 나타냅니다.
위 내용은 여섯 장의 그림은 Linux 제로 카피 기술을 명확하게 설명합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Linux 시스템의 5 가지 기본 구성 요소는 다음과 같습니다. 1. Kernel, 2. System Library, 3. System Utilities, 4. 그래픽 사용자 인터페이스, 5. 응용 프로그램. 커널은 하드웨어 리소스를 관리하고 시스템 라이브러리는 사전 컴파일 된 기능을 제공하며 시스템 유틸리티는 시스템 관리에 사용되며 GUI는 시각적 상호 작용을 제공하며 응용 프로그램은 이러한 구성 요소를 사용하여 기능을 구현합니다.

git 저장소 주소를 보려면 다음 단계를 수행하십시오. 1. 명령 줄을 열고 리포지토리 디렉토리로 이동하십시오. 2. "git remote -v"명령을 실행하십시오. 3. 출력 및 해당 주소에서 저장소 이름을 봅니다.

vs 코드 1 단계/다음 단계 바로 가기 키 사용 : 1 단계 (뒤로) : Windows/Linux : Ctrl ←; MACOS : CMD ← 다음 단계 (앞으로) : Windows/Linux : Ctrl →; MACOS : CMD →

Linux의 주요 용도에는 다음이 포함됩니다. 1. 서버 운영 체제, 2. 임베디드 시스템, 3. 데스크탑 운영 체제, 4. 개발 및 테스트 환경. Linux는이 분야에서 뛰어나 안정성, 보안 및 효율적인 개발 도구를 제공합니다.

메모장은 Java 코드를 직접 실행할 수는 없지만 다른 도구를 사용하여 명령 줄 컴파일러 (Javac)를 사용하여 Bytecode 파일 (filename.class)을 생성하면 달성 할 수 있습니다. Java Interpreter (Java)를 사용하여 바이트 코드를 해석하고 코드를 실행하고 결과를 출력하십시오.

Sublime에서 코드를 실행하는 6 가지 방법이 있습니다. 핫키, 메뉴, 빌드 시스템, 명령 줄, 기본 빌드 시스템 설정 및 사용자 정의 빌드 명령, 프로젝트/파일을 마우스 오른쪽 단추로 클릭하여 개별 파일/프로젝트를 실행합니다. 빌드 시스템 가용성은 숭고한 텍스트 설치에 따라 다릅니다.

Laravel을 설치하려면 다음 단계를 순서대로 수행하십시오. Composer 설치 (MacOS/Linux 및 Windows) 설치 LARAVEL 설치 프로그램 새 프로젝트 시작 서비스 액세스 애플리케이션 (URL : http://127.0.1:8000) 데이터베이스 연결 (필요한 경우)을 설정하십시오.

GIT 소프트웨어 설치 단계는 다음 단계가 포함됩니다. 설치 패키지를 다운로드하고 설치 패키지를 실행하여 설치 구성 GIT 설치 GIT BASH (Windows 만)를 확인하십시오.
