จะเปลี่ยนความถี่สลับบริบทของ Linux ได้อย่างไร?


17

เป็นไปได้อย่างไรที่จะเปลี่ยนความถี่บริบทลินุกซ์ (linaro, ubuntu, debian)?

ฉันไม่เป็นไรสำหรับการซื้อขายออกจากระบบที่ตอบสนองน้อยกว่าสำหรับระบบที่มีประสิทธิภาพมากขึ้น

EDIT1: ฉันมีกระบวนการหลักที่ฉันต้องการให้ทำงานเร็วที่สุดเท่าที่จะเป็นไปได้ (รอบนาฬิกาสูงสุดต่อวินาที) ดังนั้นฉันจึงคิดว่าจะลดความถี่บริบทของสวิตช์ (= เพิ่มช่วงเวลา) คำถามคือทำอย่างไรและจะมีผลกระทบที่สำคัญหรือไม่ ฉันสามารถคำนวณต้นทุนของการสลับบริบทได้หรือไม่ ความหมายฉันสามารถประเมินได้หรือไม่ถ้าฉันเพิ่มจำนวนเวลาสองเท่าฉันจะเพิ่มประสิทธิภาพการทำงานของฉันเป็น% สำหรับกระบวนการหลักที่ฉันสนใจได้อย่างไร


1
ฉันคาดว่าผลของการตั้งค่านี้จะน้อยที่สุดและมีความเกี่ยวข้องเฉพาะในกรณีที่คุณมีกระบวนการทำงานมากกว่าซีพียูคอร์ หากไม่มีงานอื่นรอ CPU ตัวใดตัวหนึ่งไม่จำเป็นต้องตั้งค่าตัวจับเวลาสลับงานในช่วงเวลาสั้น ๆ เพราะสิ่งใดก็ตามที่สามารถทำให้งานอื่นรันได้จะเป็นการเรียกระบบหรือฮาร์ดแวร์ขัดจังหวะซึ่งทั้งสองอย่างนั้น จะส่งคืน CPU ไปยังเคอร์เนล
Simon Richter

ขออภัยที่จะบ้าคลั่งที่นี่ แต่มีคนอธิบายได้ว่า 'ความถี่สลับบริบท' หมายถึงอะไรในบริบทของคำถามนี้
user1717828

@sourcejedi เห็น EDIT1 ของฉัน - ฉันสามารถประเมินการปรับปรุงปริมาณงานเป็น% ได้หรือไม่เมื่อฉันลดความถี่ของการสลับบริบท
Nadav B

@NadavB ฉันได้แก้ไขคำตอบของฉันแล้ว การวัดเฉพาะที่ดีที่สุดเมื่อปรับให้เหมาะสม คุณไม่จำเป็นต้องใช้มันเป็นกล่องดำเช่นคุณสามารถใช้ perf เพื่อวัดแคชที่หายไปหาก CPU ของคุณดี AIUI, แคช CPU ชนิดต่างๆ (รวมถึง TLB miss) เป็นค่าใช้จ่ายที่สำคัญที่สุดของการสลับบริบท
sourcejedi

คำตอบ:


17

หากงานของคุณเป็นกระบวนการเดียวที่ร้องขอเวลาบน CPU เฉพาะจะไม่มีการสลับบริบทระหว่างงาน :-) แต่ CPU อาจยังคงถูกขัดจังหวะทำให้บริบทเปลี่ยนเป็นเคอร์เนลและย้อนกลับ และสาเหตุหนึ่งที่เป็นไปได้คือตัวจับเวลาล่วงหน้าตรวจสอบว่ามีงานอื่นให้ทำงานบน CPU นี้ ...

ลินุกซ์ สามารถหลีกเลี่ยงการสร้างตัวจับเวลา pre-emption ใด ๆ ขัดจังหวะบน cpu เมื่อไม่มีเหตุผลที่จะทำเช่นนั้น CONFIG_NO_HZ_FULLดู ในการใช้คุณสมบัตินี้จะต้องเปิดใช้งานเมื่อสร้างเคอร์เนลและต้องเปิดใช้งานโดยใช้ตัวเลือกการบูต

โดยค่าเริ่มต้นจะไม่มีซีพียูใด ๆ พารามิเตอร์การบูต "nohz_full =" ระบุ CPU ที่ปรับตัวได้ ตัวอย่างเช่น "nohz_full = 1,6-8" กล่าวว่า CPU 1, 6, 7 และ 8 ต้องปรับเปลี่ยน -s ticks CPUs โปรดทราบว่าคุณไม่ได้รับอนุญาตให้ทำเครื่องหมาย CPU ทั้งหมดว่าเป็น CPU ที่ปรับตัวได้ [... ]

LWN.net กล่าวว่า "อ้างอิงจาก Ingo Molnar มากถึง 1% ของเวลา CPU จะถูกบันทึกไว้" สำหรับซีพียูที่ปรับได้ เอกสารเคอร์เนลบอกว่าสิ่งนี้มีค่าใช้จ่ายที่แตกต่างกันหกค่าและยังมีรายการ "ปัญหาที่ทราบ"

อัตราขยายนี้ค่อนข้างเล็กโดยเฉพาะอย่างยิ่งเมื่อเทียบกับอัตราความเร็วของการรับส่งข้อมูลที่อาจเกิดขึ้นจากการลดความถี่ของการสลับบริบทระหว่างหลายงานตามที่อ้างอิงในคำตอบนี้: จะเปลี่ยนความยาวของการแบ่งเวลาตามเวลา

พิมพ์ขนาดเล็ก: การวัดเหล่านี้รองรับ Spectre, Meltdown, KPTI และ x86 ASID ล่วงหน้า :-( และฉันเดาว่าพวกเขายังใช้กับฮาร์ดแวร์ที่ค่อนข้างเก่าด้วยถามผู้เชี่ยวชาญเคอร์เนลหรือทำการวัดด้วยตัวคุณเองว่าค่าใช้จ่ายของสวิทช์บริบทมีเท่าใด เปลี่ยนแปลงในรุ่นเคอร์เนลและฮาร์ดแวร์เฉพาะของคุณ ... PTI ส่วนใหญ่ควรจะถูกบรรเทาโดย ASID ยกเว้นซอฟต์แวร์ที่เรียกใช้เคอร์เนลบ่อยครั้งมากตัวอย่างหลักคือฐานข้อมูล แต่ฉันไม่ค่อยเข้าใจตัวเลข .

ความหวังของ Molnar ในแพทช์ RFC ดั้งเดิมคือเมื่อเวลาผ่านไปมัน "น่าจะถูกเปิดใช้งานโดย distros Linux ส่วนใหญ่" ฉันสังเกตเห็นว่า Fedora 28 ให้เคอร์เนลเริ่มต้นที่สร้างขึ้นด้วยNO_HZ_FULLการสนับสนุน เดเบียน 9 ไม่ได้อย่างไรก็ตาม


เมื่อเร็ว ๆ นี้ลินุกซ์ v4.17 เอาเหลือ 1 Hz จับเวลาเห็บจากnohz_fullซีพียู ฉันคิดว่าผลกระทบต่อปริมาณงานมีน้อยมาก :-) แต่ฉันพยายามติดตามสถานะของNO_HZ_FULLผลประโยชน์เมื่อมีกระบวนการที่รันได้หลายอย่างบน CPU -

เมื่อเราไปถึง 0 Hz เราสามารถ [แล้ว] ลบการทำเครื่องหมายสัญญาเป็นระยะออกจาก nr_running> = 2 เช่นกันโดยการขัดจังหวะงานที่ยุ่งเป็นหลักเพียงบ่อยเท่าที่ข้อ จำกัด sched_latency ต้องการให้เราทำ - ทุกๆ 4-40 มิลลิวินาทีขึ้นอยู่กับ nr_running .

นี้เป็นบิตสับสนเป็นใบจองเริ่มต้นแล้วใช้แยกกลับเห็บที่แม่นยำยิ่งขึ้นใน v2.6.25-RC1, กระทำ 8f4d37ec073c "sched: res สูงใบจองเห็บ" พบได้ผ่านความคิดเห็นนี้ในบทความ LWN.net เดียวกัน: https://lwn.net/Articles/549754/ )


สิ่งที่เกี่ยวกับ kernel.sched_rr_timeslice_ms?
Nadav B

1
@NadavB หากคุณกำลังใช้งาน sched_rr เรียลไทม์พูดอย่างนั้น นี่คือหัวข้อผู้เชี่ยวชาญ หากคุณไม่ใช่คุณก็จะไม่มี :-)
sourcejedi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.