เหตุใดเธรดระดับผู้ใช้จึงเร็วกว่าเธรดระดับเคอร์เนล


6

ฉันพบว่าเธรดระดับผู้ใช้เร็วกว่าเธรดระดับเคอร์เนล แต่ฉันไม่สามารถหาตัวอย่างที่น่าเชื่อถือของWHY ได้ทำไมเธรดระดับผู้ใช้เร็วกว่าเธรดระดับเคอร์เนล มีคนอธิบายได้ไหม

เธรดระดับเคอร์เนลช้าและไม่มีประสิทธิภาพ ตัวอย่างเช่นการดำเนินการเธรดช้ากว่าเธรดระดับผู้ใช้หลายร้อยเท่า

นำมาจากที่นี่

คำตอบ:


7

เธรดระดับเคอร์เนลต้องการการสลับบริบทซึ่งเกี่ยวข้องกับการเปลี่ยนชุดตัวประมวลผลขนาดใหญ่ที่กำหนดแผนผังหน่วยความจำปัจจุบันและการอนุญาต นอกจากนี้ยังแสดงให้เห็นถึงแคชโปรเซสเซอร์บางส่วนหรือทั้งหมด

เธรดระดับผู้ใช้ต้องการเพียงการทำบัญชีจำนวนเล็กน้อยภายในหนึ่งเคอร์เนลเธรดหรือกระบวนการ

อย่างไรก็ตามความแตกต่างนั้นไม่ใหญ่หากเธรดของคุณกำลังทำการดำเนินการ I / O เป็นหลักเนื่องจากสิ่งเหล่านั้นต้องผ่านเคอร์เนลในทุกกรณี สิ่งสำคัญที่สุดคือหากคุณพยายามจำลองสถานการณ์ด้วยกระบวนการอิสระจำนวนมาก ในกรณีดังกล่าวคุณต้องให้ความสนใจอย่างรอบคอบกับกลไกการซิงโครไนซ์เธรดที่คุณใช้เพราะบางตัวขึ้นไปยังเคอร์เนลและทริกเกอร์การสลับบริบท

http://www.cs.rochester.edu/u/cli/research/switch.pdf "โดยทั่วไปค่าใช้จ่ายทางอ้อมของการสลับบริบทจะอยู่ในช่วงตั้งแต่หลายไมโครวินาทีถึงมากกว่าหนึ่งพันไมโครวินาทีสำหรับภาระงานของเรา"

แก้ไข: เธรดระดับผู้ใช้รักษาสแต็กต่อเธรดและอาจหรือไม่อาจบันทึกการลงทะเบียนวัตถุประสงค์ทั่วไปขึ้นอยู่กับสถาปัตยกรรมและกฎการปิดบังของการประชุมที่เรียก สามารถทำได้ง่ายเพียงแค่ทิ้งรีจิสเตอร์ไปที่สแต็คกระโดดไปยังที่อยู่ใหม่และป๊อปอัปรีจิสเตอร์บางตัวซึ่งอาจอยู่ในแคชของคุณหากเธรดนั้นเพิ่งรัน

บริบทเคอร์เนลระดับยังสวิทช์เปลี่ยนแผนที่หน่วยความจำโดยการเขียนไปยังTLB , และการเปลี่ยนแปลงระดับความปลอดภัย (ระดับสิทธิ์หรือ "แหวน") ในการประมวลผล ดู"ข้อควรพิจารณาด้านประสิทธิภาพ"


1
คุณช่วยกรุณาอธิบายสิ่งที่คุณหมายถึงโดยbookkeepingเท่าที่ฉันรู้ว่าแม้กระทั่งหัวข้อระดับผู้ใช้ยังคงมีการลงทะเบียนและแม้กระทั่งพวกเขาต้องผ่านการสลับบริบท
vikkyhacks

มันจะทำการไล่แคชตัวประมวลผลก่อนที่เธรดถัดไปจะรันหรือแคชตัวประมวลผลถูกเขียนทับด้วยสิ่งต่าง ๆ จากเธรดใหม่หรือไม่?
Ryder Bergerud
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.