bpftime திட்டம் வழங்கப்படுகிறது, இது ஒரு இயக்க நேரம் மற்றும் பயனர் இடத்தில் eBPF ஹேண்ட்லர்களை இயக்க ஒரு மெய்நிகர் இயந்திரத்தை உருவாக்குகிறது. Bpftime eBPF ட்ரேசிங் மற்றும் செயல்முறை தலையீட்டு நிரல்களை முழுவதுமாக பயனர் இடத்தில் இயக்க அனுமதிக்கிறது, அப்ரோப் மற்றும் நிரல் அமைப்பு அழைப்பு இடைமறிப்பு போன்ற அம்சங்களைப் பயன்படுத்துகிறது. தேவையற்ற சூழல் சுவிட்சுகளை நீக்குவதன் மூலம், லினக்ஸ் கர்னல் வழங்கிய அப்ரோப் மற்றும் யூரெட்ப்ரோப் செயல்பாட்டைப் பயன்படுத்துவதை விட, பிபிஎஃப்டைம் மேல்நிலையில் பத்து மடங்கு குறைப்பை அடைய முடியும் என்பது குறிப்பிடத்தக்கது. கூடுதலாக, bpftime பிழைத்திருத்தத்தை பெரிதும் எளிதாக்குகிறது, லினக்ஸ் கர்னல் இல்லாத கணினிகளில் பயன்படுத்தப்படலாம், மேலும் eBPF பயன்பாட்டை கர்னலில் ஏற்றுவதற்குத் தேவையான உயர்ந்த சலுகைகள் தேவையில்லை. திட்டக் குறியீடு C/C++ இல் எழுதப்பட்டு MIT உரிமத்தின் கீழ் விநியோகிக்கப்படுகிறது.
கணினி அழைப்புகளின் குறுக்கீடு மற்றும் அப்ரோப் காசோலைகளின் ஒருங்கிணைப்பு இயங்கக்கூடிய குறியீட்டை (பைனரி ரீரைட்டிங்) மீண்டும் எழுதும் நுட்பத்தைப் பயன்படுத்தி செயல்படுத்தப்படுகிறது, இதில் கணினி அழைப்புகள், நுழைவு புள்ளிகள் மற்றும் உள்ளூர் செயல்பாடுகளுக்கான அழைப்புகள் இயந்திர குறியீட்டை மாற்றுவதன் மூலம் பிழைத்திருத்த ஹேண்ட்லர்களாக மாற்றப்படுகின்றன. செயல்படுத்தும் பயன்பாடு, இது லினக்ஸ் கர்னல் மட்டத்தில் அப்ரோப்பைப் பயன்படுத்தி இடைமறிப்பதை ஒழுங்கமைப்பதை விட மிகவும் பயனுள்ளதாக இருக்கும்.
செயல்பாடுகளை மாற்றுதல் அல்லது மாற்றுதல், ஹேண்ட்லர்கள் (கொக்கிகள்) மற்றும் வடிப்பான்களை இணைத்தல், அமைப்பு அழைப்பு அளவுருக்களை திசைதிருப்புதல், தடுப்பது அல்லது மாற்றுதல், செயல்பாடுகளின் நுழைவு மற்றும் வெளியேறும் புள்ளிகளை இடைமறித்தல், அத்துடன் குறியீட்டில் தன்னிச்சையான ஆஃப்செட்டில் ஹேண்ட்லரை மாற்றுதல் போன்ற செயல்பாடுகள் ஆதரிக்கப்படுகின்றன. Bpftime கணினியில் இயங்கும் எந்த செயல்முறையிலும் அதை மறுதொடக்கம் செய்யவோ அல்லது மறுகட்டமைக்கவோ தேவையில்லாமல் இணைக்க முடியும். பிபிஎஃப்டைமை செயல்முறைகளில் மாற்றுவது ptrace வழியாக இயங்கும் செயல்முறைகளுக்கும், LD_PRELOAD வழியாக ஏற்றுவதற்கும் செய்யப்படலாம்.
bpftime இன் ஒரு பகுதியாக, ஒரு இயக்க நேரம் உருவாக்கப்படுகிறது, இது eBPF நிரல்களை சிஸ்டம் கால் மற்றும் அப்ரோப் ட்ரேஸ் பாயிண்ட்களுடன் இணைக்க அனுமதிக்கிறது; பயனர் செயல்முறை மட்டத்தில் eBPF நிரல்களை தனிமைப்படுத்துவதற்காக JIT உடன் eBPF மெய்நிகர் இயந்திரம் (AOT தொகுப்பு கூடுதலாக ஆதரிக்கப்படுகிறது); கர்னலுடன் தொடர்புகொள்வதற்கும் கர்னலின் அப்ரோப் துணை அமைப்புடன் இணக்கத்தன்மையை ஒழுங்கமைப்பதற்கும் ஒரு பின்னணி செயல்முறை (bpftime ஆனது கர்னலில் eBPF நிரல்களுடன் ஒத்துழைப்பை ஒழுங்கமைக்க கர்னலில் இருந்து eBPF ஐ ஏற்றும் பயன்முறையை ஆதரிக்கிறது, எடுத்துக்காட்டாக, kprobe ஐ செயலாக்க பயன்படுத்தப்படுகிறது. அல்லது பிணைய வடிப்பான்களை அமைத்தல்).
eBPF மெய்நிகர் இயந்திரம் ஒரு செருகுநிரல் நூலகமாக வடிவமைக்கப்பட்டுள்ளது மற்றும் ubpf போன்ற API ஐ வழங்குகிறது, இது eBPF செயல்பாட்டை மற்ற திட்டங்களில் ஒருங்கிணைக்க பயன்படுத்த அனுமதிக்கிறது. பல செயல்முறைகளிலிருந்து தரவைச் சுருக்கமாகத் திரட்டுவதற்கு, பகிரப்பட்ட நினைவகத்தில் அமைந்துள்ள கூட்டு eBPF வரைபடங்களை உருவாக்குவது ஆதரிக்கப்படுகிறது. bpftime உடன், கர்னலில் பயன்படுத்த எழுதப்பட்ட நிலையான eBPF ஹேண்ட்லர்கள் பயன்படுத்தப்படலாம், மேலும் நிலையான clang மற்றும் libbpf- அடிப்படையிலான கருவிகளை அசெம்பிள் செய்ய பயன்படுத்தலாம்.
bpftime உடன், BCC, bpftrace மற்றும் Deepflow போன்ற டிரேசிங் சிஸ்டம்களை பயனர் இடத்தில் செயல்படுத்த முடியும். எடுத்துக்காட்டாக, nginx இல் மறைகுறியாக்கப்பட்ட போக்குவரத்தை பகுப்பாய்வு செய்வதற்கும் சேமிப்பதற்கும் BCC கட்டமைப்பிலிருந்து sslsniff ஸ்கிரிப்டைப் பயன்படுத்துவதை நாங்கள் நிரூபித்தோம். நடத்தப்பட்ட சோதனைகளில், கர்னல் பக்கத்தில் sslsniff ஐ இயக்கும்போது nginx செயல்திறன் 58% குறைகிறது, மேலும் ஹேண்ட்லரை பயனர் இடத்திற்கு நகர்த்தும்போது 12.3% குறைகிறது.
கர்னலில் உள்ள அசல் eBPF ஐப் பயன்படுத்தி டிரேசிங் கட்டமைப்பை செயலாக்குதல்:
bpftime ஐப் பயன்படுத்தி பயனர் இடங்களைக் கண்டறியும் கட்டமைப்பு:
கலப்பின பயன்முறை, இதில் bpftime கர்னலில் eBPF உடன் இணைந்து செயல்படுகிறது, எடுத்துக்காட்டாக, பிணைய வடிப்பான்களை நிறுவ அல்லது தனிப்பட்ட ஹேண்ட்லர்களை பயனர் இடத்திற்கு நகர்த்த:
எதிர்காலத் திட்டங்களில் பின்வருவன அடங்கும்: விதிவிலக்குகளை மாற்றும் திறன் (Fault Injection); இயக்கத்தின் தர்க்கத்தை மாற்ற அல்லது பைனரி கூட்டங்களில் பிழைகளை சரிசெய்ய சூடான இணைப்பு (ஹாட் பேட்சிங்); eBPF நிரல்களைப் பயன்படுத்தி நீட்டிப்புகளை உருவாக்க உங்களை அனுமதிக்கும் Nginx க்காக ஒரு தொகுதியை உருவாக்குதல் (உதாரணமாக, டைனமிக் ரூட் தேர்வு, கேச்சிங், பாதுகாப்புக் கொள்கைகளைப் பயன்படுத்துதல் மற்றும் சுமை சமநிலைப்படுத்துதல்); FUSE துணை அமைப்பின் திறன்களை விரிவுபடுத்துதல் (உதாரணமாக, eBPF நிரல்களின் வடிவத்தில் கேச்சிங் அல்லது அணுகல் கட்டுப்பாட்டிற்காக FS க்கு நீட்டிப்புகளை உருவாக்குதல்).
ஆதாரம்: opennet.ru