10 நிரலாக்க மொழிகளில் பதிப்புகளில் நெட்வொர்க் இயக்கி செயல்திறன் ஒப்பீடு

ஜெர்மன் பல்கலைக்கழக ஆராய்ச்சியாளர்கள் குழு வெளியிடப்பட்ட результаты எக்ஸ்பெரிமென்டா, 10-ஜிகாபிட் இன்டெல் Ixgbe (X10xx) நெட்வொர்க் கார்டுகளுக்கான நிலையான இயக்கியின் 5 பதிப்புகள் வெவ்வேறு நிரலாக்க மொழிகளில் உருவாக்கப்பட்டன. இயக்கி பயனர் இடத்தில் இயங்குகிறது மற்றும் C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript மற்றும் Python ஆகியவற்றில் செயல்படுத்தப்படுகிறது. குறியீட்டை எழுதும் போது, ​​ஒவ்வொரு மொழியின் பண்புகளையும் கணக்கில் எடுத்துக்கொண்டு, சிறந்த செயல்திறனை அடைவதில் முக்கிய கவனம் செலுத்தப்பட்டது. அனைத்து விருப்பங்களும் செயல்பாட்டில் ஒரே மாதிரியானவை மற்றும் தோராயமாக 1000 கோடுகளின் குறியீட்டைக் கொண்டிருக்கும். திட்ட வளர்ச்சிகள் பரவுதல் BSD உரிமத்தின் கீழ்.

இயக்கியின் ரஸ்ட் பதிப்பு, C மொழியில் உள்ள குறிப்பு இயக்கிக்கு மிக நெருக்கமான செயல்திறனாக மாறியது. 32 பாக்கெட்டுகளின் தொகுதிகளை ஒரே நேரத்தில் அனுப்பும் சுமையின் கீழ், ரஸ்ட் இயக்கி சற்று பின்தங்கியிருந்தது, ஆனால் ஒரு தொகுதிக்கு 32 பாக்கெட்டுகளுக்கு மேல் உள்ள சோதனைகளில், வேகம் நடைமுறையில் சி டிரைவரிலிருந்து வேறுபட்டதல்ல மற்றும் 28 மில்லியனை செயலாக்கும் மட்டத்தில் செயல்திறனை வெளிப்படுத்தியது. Xeon CPU E3-1230 v2 3.3 GHz கொண்ட சர்வரில் வினாடிக்கு பாக்கெட்டுகள்.

10 நிரலாக்க மொழிகளில் பதிப்புகளில் நெட்வொர்க் இயக்கி செயல்திறன் ஒப்பீடு

செயல்திறன் அடிப்படையில் அடுத்த முக்கிய இடம் Go மற்றும் C# மொழிகளில் இயக்கிகளால் ஆக்கிரமிக்கப்பட்டது, இது மிகவும் நெருக்கமான முடிவுகளைக் காட்டியது (Go டிரைவர் 16 பாக்கெட்டுகள் வரையிலான சோதனைகளில் வெற்றி பெற்றார், மேலும் 16 க்கும் மேற்பட்ட பாக்கெட்டுகள் கொண்ட சோதனைகளில் சிறிது இழக்கத் தொடங்கினார். ஒரு தொகுதியில்). ஒரு தொகுதிக்கு 256 பாக்கெட்டுகளுடன், C# இயக்கியின் உச்ச செயல்திறன் வினாடிக்கு தோராயமாக 28 மில்லியன் பாக்கெட்டுகள் மற்றும் Go இயக்கி ஒரு வினாடிக்கு தோராயமாக 25 மில்லியன் பாக்கெட்டுகள்.

அடுத்து, மிகவும் நெருக்கமான முடிவுகளுடன், இயக்கிகள்
Java, OCaml மற்றும் Haskell ஆகியவை ஏற்கனவே முன்னர் கருதப்பட்ட விருப்பங்களை விட மிகவும் பின்தங்கியிருந்தன மற்றும் வினாடிக்கு 12 மில்லியன் பாக்கெட்டுகளை கடக்க முடியவில்லை. ஸ்விஃப்ட் மற்றும் ஜாவாஸ்கிரிப்ட் டிரைவர்கள் இன்னும் கூடுதலான பின்னடைவைக் காட்டின, ஒரு நொடிக்கு 5 மில்லியன் பாக்கெட்டுகள் என்ற அளவில் ஸ்ட்ரீம்களை செயலாக்க முடிந்தது.

ஒரு வினாடிக்கு 0.14 மில்லியன் பாக்கெட்டுகளை மட்டுமே செயலாக்க முடிந்த பைதான் டிரைவரால் முதல் தரவரிசை முடிக்கப்பட்டது. JIT இல்லாமல் மற்றும் குறிப்பிட்ட மேம்படுத்தல்கள் இல்லாமல் மொழிபெயர்ப்பாளர்களின் வேகத்தை மதிப்பிடுவதற்கு பைதான் செயல்படுத்தல் பயன்படுத்தப்பட்டது (குறியீடு CPython 3.7 ஐப் பயன்படுத்தி செயல்படுத்தப்பட்டது மற்றும் PyPy உடன் பொருந்தவில்லை, ஆனால் தரவு சேமிப்பக கட்டமைப்புகளை மேம்படுத்துவது செயல்திறனை 10 மடங்கு அதிகரிக்கக்கூடும் என்பது குறிப்பிடத்தக்கது. )

கூடுதலாக, இடையகத்தின் செயல்திறனையும் குப்பை சேகரிப்பாளரின் தாக்கத்தையும் காட்ட தாமத சோதனைகள் மேற்கொள்ளப்பட்டன. அனுப்பப்பட்ட சரியான நேரத்துடன் ஒப்பிடும்போது, ​​ஒவ்வொரு பாக்கெட்டும் டிரைவரால் அனுப்பப்பட்ட பிறகு தாமதத்தை சோதனை அளவிடுகிறது. தலைவர்கள் இன்னும் சி மற்றும் ரஸ்ட் டிரைவர்களாக இருந்தனர், இதன் முடிவுகள் வினாடிக்கு 1 மில்லியன் பாக்கெட்டுகள் (தோராயமாக 20 µs) ஓட்டத்திற்கு நடைமுறையில் பிரித்தறிய முடியாதவை. கோ ஓட்டுநர் சிறப்பாகச் செயல்பட்டார், தலைவர்களுக்கு சற்றுப் பின்தங்கியவராகவும், 20 µs அளவிலும் இருந்தார். C# இயக்கி தோராயமாக 50 µs தாமதத்தைக் காட்டியது.
நீண்ட தாமதங்கள் ஜாவாஸ்கிரிப்ட் மற்றும் ஜாவா டிரைவர்களால் காட்டப்பட்டது (300 µsக்கும் அதிகமான தாமதங்கள்).

10 நிரலாக்க மொழிகளில் பதிப்புகளில் நெட்வொர்க் இயக்கி செயல்திறன் ஒப்பீடு

C ஐ விட உயர்நிலை மொழிகளில் இயக்கிகள் மற்றும் இயக்க முறைமை கூறுகளை உருவாக்குவதற்கான சாத்தியத்தை மதிப்பிடுவதற்காக இந்த ஆய்வு நடத்தப்பட்டது. தற்போது, ​​லினக்ஸில் உள்ள 39 இல் 40 நினைவக சிக்கல்கள் இயக்கிகளுடன் தொடர்புடையவை, எனவே மிகவும் பாதுகாப்பான மொழியைப் பயன்படுத்துதல் மற்றும் இயக்கிகளை கர்னலில் இருந்து பயனர் இடத்திற்கு நகர்த்துவதில் உள்ள சிக்கல்கள் தொடர்புடையதாக இருக்கும் மற்றும் உற்பத்தியாளர்கள் ஏற்கனவே இந்த திசையில் தீவிரமாக பரிசோதனை செய்து வருகின்றனர் (உதாரணமாக, OS க்கான TCP அடுக்கை Google உருவாக்கியுள்ளது ஃப்யூசியா கோ மொழியில், CloudFlare நிறுவனம் உருவாக்கப்பட்டது ரஸ்டில் QUIC நெறிமுறையை செயல்படுத்துதல், ஆப்பிள் மொபைல் சாதனங்களில் TCP அடுக்கை பயனர் இடத்திற்கு நகர்த்தியுள்ளது).

வேலையின் போது, ​​ரஸ்ட் மொழி இயக்கி மேம்பாட்டிற்கான சிறந்த வேட்பாளர் என்று முடிவு செய்யப்பட்டது. ரஸ்டின் திறன்கள் குறைந்த-நிலை நினைவக நிர்வாகத்துடன் தொடர்புடைய சிக்கல்களை C இயக்கிகளுடன் ஒப்பிடும்போது தோராயமாக 2% முதல் 10% செயல்திறன் இழப்பில் நீக்குகிறது. குப்பை சேகரிப்பால் ஏற்படும் துணை மில்லி விநாடி தாமதம் ஏற்றுக்கொள்ளக்கூடிய சூழ்நிலைகளில் கணினி கூறுகளை உருவாக்க Go மற்றும் C# பொருத்தமானதாக கருதப்படுகிறது.

ஆதாரம்: opennet.ru

கருத்தைச் சேர்