Beberapa enjin pengumpulan paket Linux klasik

Lepaskan: 2023-08-04 16:07:06
ke hadapan
1896 orang telah melayarinya

Artikel ini menyenaraikan empat enjin koleksi paket Linux klasik Jika ada yang lain yang anda rasa OK, anda boleh meninggalkan mesej. Empat ini ialah:

  • libpcap/libpcap-mmap
  • PF_RING
  • DPDK
  • xdp
PF_RING

DPDK

🎜🎜xdp🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜Mekanisme penangkapan paket libpcap berada pada lapisan pautan data Tambah pintasan proses yang tidak mengganggu pemprosesan susunan protokol rangkaian sistem sendiri Paket data yang dihantar dan diterima ditapis dan ditimbal melalui kernel Linux, dan akhirnya dihantar terus ke aplikasi lapisan atas. 🎜
  1. Paket data tiba di peranti kad rangkaian.
  2. Peranti kad rangkaian menjalankan operasi DMA mengikut konfigurasi. ("Salinan pertama": Daftar kad rangkaian->penampan cincin yang diperuntukkan oleh kernel untuk kad rangkaian)
  3. Kad rangkaian menghantar gangguan dan membangunkan pemproses.
  4. Perisian pemacu membaca dari penimbal cincin dan mengisi struktur skbuff kernel ( "Salinan kedua" : penimbal cincin penimbal kad rangkaian kernel-> struktur data khusus kernel
  5. skbuff) Kemudian panggil fungsi netif_receive_skb:
    5.1 Jika terdapat program penangkapan paket, masukkan penapis BPF melalui sub-antara muka rangkaian dan salin paket yang sepadan dengan peraturan ke cache kernel sistem (
  • "salinan ke-3 " ). BPF mengaitkan penapis dan dua penimbal dengan setiap program penangkapan paket yang memerlukan perkhidmatan. BPF memperuntukkan penimbal dan biasanya saiznya ialah 4KB Penimbal stor digunakan untuk menerima data daripada penyesuai penampan digunakan untuk menyalin paket ke aplikasi.
  • 5.2 Memproses fungsi penjembatan lapisan pautan data
  • 5.3 Tentukan protokol lapisan atas mengikut medan skb->protokol dan serahkan ke lapisan rangkaian untuk diproses, masukkan timbunan protokol rangkaian, dan melaksanakan pemprosesan peringkat tinggi.
  • libpcap memintas pemprosesan bahagian timbunan protokol proses pengumpulan paket kernel Linux, membenarkan API ruang pengguna memanggil terus soket PF_PACKET untuk mendapatkan salinan paket data daripada pemacu lapisan pautan dan menampannya daripada Kawasan kernel disalin ke penimbal ruang pengguna (
  • "Salinan ke-4")
  • libpcap-mmap

    libpcap-mmap ialah penambahbaikan pada libpcap yang lama, dan pada asasnya digunakan dalam pelaksanaan yang baharu versi mekanisme libpcap packet_mmap. PACKET_MMAP mengurangkan satu salinan memori melalui mmap (

    "Salinan keempat hilang"), mengurangkan panggilan sistem yang kerap dan meningkatkan kecekapan penangkapan paket.

    PF_RING

    Kami melihat bahawa libpcap mempunyai 4 salinan memori sebelum ini. libpcap_mmap mempunyai 3 salinan memori. Penyelesaian teras yang dicadangkan oleh PF_RING adalah untuk mengurangkan bilangan salinan mesej semasa penghantaran.

    Kita dapat lihat bahawa berbanding libpcap_mmap, pfring membenarkan memori ruang pengguna untuk mmap terus dengan rx_buffer. Ini mengurangkan satu lagi salinan ( "Salinan kedua libpcap_mmap" : rx_buffer->skb)

    PF-RING ZC melaksanakan teknologi DNA (Direct NIC Access direct network card access) untuk memetakan ruang memori pengguna ke memori pemandu ruang supaya aplikasi pengguna boleh terus mengakses daftar dan data kad rangkaian.

    Dengan cara ini, penimbalan paket data dalam kernel dielakkan dan satu salinan dikurangkan ("Salinan pertama libpcap", DMA kepada salinan penimbal kernel). Ini adalah salinan sifar sepenuhnya.

    Kelemahannya ialah hanya satu aplikasi boleh membuka gelang DMA pada satu masa (perhatikan bahawa kad rangkaian hari ini boleh mempunyai berbilang baris gilir RX/TX, membenarkan satu aplikasi berada pada setiap baris gilir pada masa yang sama), dengan kata lain Ringkasnya , berbilang aplikasi dalam mod pengguna perlu berkomunikasi antara satu sama lain untuk mengedarkan paket data.

    DPDK

    pf-ring zc dan dpdk kedua-duanya boleh mencapai sifar salinan paket data Kedua-duanya memintas kernel, tetapi prinsip pelaksanaannya berbeza sedikit. PF-ring zc mengambil alih paket data melalui pemacu zc (juga pada lapisan aplikasi), dan dpdk dilaksanakan berdasarkan UIO.

    1 UIO+mmap melaksanakan salinan sifar

    UIO (Userspace I/O) ialah teknologi I/O yang berjalan dalam ruang pengguna. Peranti pemacu am dalam sistem Linux dijalankan dalam ruang kernel dan boleh dipanggil oleh aplikasi dalam ruang pengguna Walau bagaimanapun, UIO menjalankan sebahagian kecil pemacu dalam ruang kernel dan melaksanakan sebahagian besar pemacu dalam ruang pengguna. Menggunakan mekanisme UIO yang disediakan oleh Linux, Kernel boleh dipintas dan semua kerja pemprosesan paket selesai dalam ruang pengguna.

    2 UIO+PMD mengurangkan gangguan dan penukaran konteks CPU

    Sekat pemacu UIO DPDK yang dikeluarkan oleh perkakasan, dan kemudian menggunakan tinjauan aktif dalam mod pengguna Mod ini dipanggil PMD (Pemacu Mod Tinjauan).

    Berbanding dengan DPDK, pf-ring (tiada zc) menggunakan tinjauan NAPI dan tinjauan lapisan aplikasi, manakala pf-ring zc adalah serupa dengan DPDK dan hanya menggunakan tinjauan lapisan aplikasi.

    3 HugePages Kurangkan TLB miss

    Selepas pengenalan MMU (Memory Management Unit) dalam sistem pengendalian, CPU perlu mengakses memori dua kali untuk membaca data memori. Kali pertama adalah untuk menanyakan jadual halaman untuk menukar alamat logik kepada alamat fizikal, dan kemudian mengakses alamat fizikal untuk membaca data atau arahan.

    Untuk mengurangkan masalah masa pertanyaan yang panjang yang disebabkan oleh terlalu banyak halaman dan jadual halaman yang terlalu besar, TLB (Translation Lookaside Buffer) telah diperkenalkan, yang boleh diterjemahkan sebagai penimbal terjemahan alamat. TLB ialah unit pengurusan memori, biasanya disimpan dalam daftar, yang menyimpan sebahagian kecil daripada entri jadual halaman yang kemungkinan besar boleh diakses pada masa ini.

    Selepas TLB diperkenalkan, CPU akan mula-mula pergi ke TLB untuk menangani Memandangkan TLB disimpan dalam daftar dan mengandungi hanya sebahagian kecil daripada entri jadual halaman, kelajuan pertanyaan adalah sangat pantas. Jika pengalamatan dalam TLB berjaya (TLB hit), tidak perlu menanyakan jadual halaman dalam RAM jika pengalamatan dalam TLB gagal (TLB terlepas), anda perlu menanyakan jadual halaman dalam RAM akan dikemas kini ke dalam TLB.

    DPDK menggunakan HugePages, yang menyokong saiz halaman 2MB dan 1GB di bawah x86-64, yang sangat mengurangkan jumlah halaman dan saiz jadual halaman, sekali gus mengurangkan kebarangkalian kehilangan TLB dan meningkatkan prestasi menangani CPU.

    4 Pengoptimuman lain

    • SNA (Shared-nothing Architecture), seni bina perisian terdesentralisasi, cuba mengelakkan perkongsian global, membawa persaingan global dan kehilangan keupayaan untuk berkembang secara mendatar. Di bawah sistem NUMA, memori tidak digunakan dari jauh merentasi Nod.
    • SIMD (Single Instruction Multiple Data), dari mmx/sse terawal hingga avx2 terkini, keupayaan SIMD semakin meningkat. DPDK menggunakan pemprosesan kelompok berbilang paket pada masa yang sama, dan kemudian menggunakan pengaturcaraan vektor untuk memproses semua paket dalam satu kitaran. Sebagai contoh, memcpy menggunakan SIMD untuk meningkatkan kelajuan.
    • perkaitan cpu: iaitu perkaitan CPU

    XDP

    Satah pemprosesan data, xdp mencipta satah pantas data dalam lapisan pemacu. Paket data diproses sebelum data dma'd oleh perkakasan kad rangkaian ke dalam memori dan skb diperuntukkan.

    Sila ambil perhatian bahawa XDP tidak melakukan pintasan Kernel pada paket data, ia hanya melakukan sedikit pra-pemeriksaan terlebih dahulu.

    Berbanding DPDK, XDP mempunyai kelebihan berikut:

    • Tidak perlu untuk perpustakaan kod pihak ketiga dan pelesenan
    • menyokong kedua-dua rangkaian yang ditinjau dan berasaskan interrupt. tentukan model rangkaian selamat baharu
    • Senario penggunaan XDP termasuk:
    • DDoS defense
    • Firewall

    Loadingan berasaskan XDP

      statistik
    • Persampelan rangkaian kompleks
    • Platform dagangan berkelajuan tinggi
    • OK, di atas adalah perkongsian hari ini Jika anda rasa ada enjin pengumpulan paket lain, anda boleh tinggalkan mesej untuk dikongsi.

Atas ialah kandungan terperinci Beberapa enjin pengumpulan paket Linux klasik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:Linux中文社区
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan