Enam gambar menerangkan teknologi salinan sifar Linux dengan jelas

WBOY
Lepaskan: 2024-02-22 18:40:02
ke hadapan
679 orang telah melayarinya

Enam gambar menerangkan teknologi salinan sifar Linux dengan jelas

Hello semua, hari ini mari kita bercakap tentang teknologi sifar salinan Linux. Kami akan menggunakan panggilan sistem fail hantar sebagai titik masuk untuk meneroka secara mendalam prinsip asas teknologi salinan sifar. Idea teras teknologi salinan sifar adalah untuk meminimumkan penyalinan data antara kenangan dan meningkatkan kecekapan dan prestasi penghantaran data dengan mengoptimumkan laluan penghantaran data.

1. Pengenalan kepada teknologi salinan sifar

Teknologi salinan sifar Linux ialah teknologi yang digunakan untuk mengoptimumkan penghantaran data Ia meningkatkan kecekapan penghantaran data dengan mengurangkan bilangan salinan data antara mod kernel dan mod pengguna.

Semasa proses penghantaran data, biasanya diperlukan untuk menyalin data dari penimbal kernel ke penimbal aplikasi, dan kemudian dari penimbal aplikasi ke penimbal peranti rangkaian sebelum penghantaran boleh diselesaikan.

Kelebihan teknologi sifar salinan ialah ia boleh menghantar data secara terus tanpa memerlukan langkah penyalinan pertengahan, yang membantu meningkatkan kecekapan penghantaran data.

Pelaksanaan teknologi salinan sifar Linux:

  • panggilan sistem fail hantar: Panggilan sistem fail hantar boleh terus menghantar kandungan fail ke penimbal peranti rangkaian dalam keadaan kernel, mengelakkan penyalinan data antara keadaan pengguna dan keadaan kernel.
  • panggilan sistem splice: Panggilan sistem splice boleh terus memindahkan data daripada satu deskriptor fail ke deskriptor fail yang lain, atau boleh juga memindahkan data daripada satu deskriptor fail ke buffer peranti rangkaian, mengelakkan proses penyalinan perantaraan.
  • mmap dan tulis panggilan sistem: Panggilan sistem mmap boleh memetakan fail ke dalam memori, dan kemudian menggunakan panggilan sistem tulis untuk menghantar data dalam memori terus ke penimbal peranti rangkaian, mengelakkan penyalinan data antara mod pengguna dan kernel mod.
  • DMA (Direct Memory Access): DMA ialah teknologi perkakasan yang boleh memindahkan data secara terus daripada memori ke penimbal peranti rangkaian, mengelakkan campur tangan CPU dan meningkatkan kecekapan penghantaran data.

2.hantar panggilan sistem fail

Panggilan sistem fail hantar boleh memindahkan data fail terus dalam ruang kernel Ia melakukan ini dengan menyalin data daripada satu deskriptor fail ke penimbal hantar deskriptor fail yang lain. Dengan cara ini, data boleh dihantar terus melalui timbunan protokol rangkaian, mengelakkan operasi penyalinan data yang kerap antara ruang pengguna dan ruang kernel.

Ini mengelakkan penyalinan data antara kernel dan ruang pengguna dan meningkatkan kecekapan penghantaran.

prototaip fungsi panggilan sistem fail:

#include 
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

参数说明:
out_fd:目标文件描述符,用于发送数据。
in_fd:源文件描述符,从该文件读取数据。
offset:指定从源文件的哪个位置开始读取数据,可以为NULL表示从当前位置开始。
count:要传输的字节数。

返回值:
成功:返回写入out_fd文件的字节数。
失败:返回-1,并设置errno。
Salin selepas log masuk

3.prinsip pelaksanaan fail hantar

3.1 Hantar fail melalui kaedah tradisional

Untuk menghantar fail melalui soket menggunakan kaedah tradisional, kita perlu melaksanakan laluan yang agak panjang.

Laluan: Cakera->Cache Halaman Fail->Penimbal Pengguna->Penimbal Soket->Kad Rangkaian.

Situasi penukaran konteks dan salinan memori adalah seperti berikut:

  • Suis konteks: 4 kali (baca panggilan, baca kembali, tulis panggilan, tulis pulangan)
  • Salinan DMA: 2 kali
  • Salinan CPU: 2 kali (cache halaman fail->penampan pengguna, penimbal pengguna->penampan soket)

Gambar

3.2 hantar fail menghantar fail

Gunakan fail hantar untuk menghantar fail, keseluruhan laluan akan menjadi lebih pendek.

Laluan: Cakera->Cache Halaman Fail->Penimbal Soket->Kad Rangkaian.

Situasi penukaran konteks dan salinan memori adalah seperti berikut:

Suis konteks: 2 kali (hantar panggilan fail, hantar fail kembali)

Salinan DMA: 2 kali

Salinan CPU: 1 kali (Cache Halaman Fail -> Penampan Soket)

Gambar

3.3 Prinsip pelaksanaan fail hantar

Inti pelaksanaan fail hantar ialah paip, yang digunakan secara meluas dalam sistem Linux, seperti komunikasi antara proses melalui paip.

Apabila data fail perlu disalin ke penimbal soket, paip (penampan cincin) akan dibuat buat sementara waktu, data fail akan disalin ke paip terlebih dahulu, dan kemudian data paip akan dipindahkan ke penimbal soket bukan salinan data, tetapi arahkan penunjuk ke alamat memori.

Gambar

3.4 Bahagian

Dengan menggunakan fail hantar untuk menghantar fail, kami boleh mengurangkan dua suis konteks dan satu salinan CPU Jika senario aplikasi sebenar kami memerlukan penghantaran sejumlah besar fail, menggunakan fail hantar boleh meningkatkan prestasi sistem dengan ketara.

4 4.1 Pengenalan Saluran Paip

Paip digunakan secara meluas dalam sistem Linux Selain teknologi salinan sifar menggunakan paip, komunikasi antara proses juga menggunakan paip.

Gambar

Apakah itu saluran paip?

Sebuah paip sebenarnya adalah penimbal cincin, yang melaluinya data boleh disalin dari satu fail ke fail yang lain.

Paip ditakrifkan oleh struktur struct pipe_inode_info Struktur data ini mempunyai 4 ahli penting:

  • pipe_buffer: Tatasusunan penimbal paip, tatasusunan panjang tetap, setiap ahli tatasusunan ialah penimbal, sepadan dengan struktur pipe_buffer struktur.
  • kepala: Nombor siri kepala, menunjukkan lokasi penimbal boleh tulis semasa, yang perlu digunakan bersama topeng.
  • ekor: Nombor siri ekor, menunjukkan kedudukan penimbal yang boleh dibaca semasa, yang perlu digunakan bersama topeng.
  • ring_size: Panjang tatasusunan penimbal paip, saiz_ringg - 1 mengira topeng, kepala & topeng memperoleh subskrip tatasusunan penimbal boleh tulis semasa, ekor & topeng memperoleh subskrip tatasusunan penimbal yang boleh dibaca semasa.

Penimbal paip ditakrifkan oleh struct pipe_buffer, yang mempunyai 3 ahli penting:

  • halaman: penunjuk halaman
  • offset: Data offset dalam halaman
  • len: panjang data

Nilai sama ada paip sudah penuh atau kosong?

Penghakiman bahawa saluran paip sudah penuh:

kepala – ekor >= saiz cincin, menandakan paip sudah penuh.

Penghakiman jika paip kosong:

kepala == ekor, menandakan paip kosong.

Atas ialah kandungan terperinci Enam gambar menerangkan teknologi salinan sifar Linux dengan jelas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:mryunwei.com
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