วิธีการตั้งค่าความสัมพันธ์ของโปรเซสเซอร์ใน OS X


17

คุณจะตั้งค่าความสัมพันธ์ของตัวประมวลผลใน Snow Leopard บน MacBook Pro ได้อย่างไรฉันรู้ว่าใน Windows คุณสามารถเปลี่ยนได้ในตัวจัดการงาน


2
<snarky-comment> เรียกใช้ OS X ในเครื่องเสมือนและตั้งค่าความสัมพันธ์ของเครื่องเสมือน </snarky-comment>
zildjohn01

ทำไมคุณต้องการทำเช่นนี้? โดยทั่วไปแล้วมันเป็นความคิดที่ไม่ดีเว้นแต่คุณจะพยายามเรียกใช้โปรแกรมเก่าที่มีการเข้ารหัสที่ไม่ดีพอที่พวกเขาจะหยุดในระบบมัลติคอร์
jalf

2
@jalf: ความเกี่ยวข้องของตัวประมวลผลสามารถปรับปรุงประสิทธิภาพได้เนื่องจากจะช่วยลดการตรวจสอบความถูกต้องของแคชในบางกรณี

1
มันน่าผิดหวัง ดูเหมือนว่า Mac จะไม่เป็นแพลตฟอร์มที่สมบูรณ์แบบสำหรับการพัฒนาซอฟต์แวร์แบบเรียลไทม์
Evan Plaice

1
@jweyrich ยกเว้นใน CPU ที่มี QPI (NUMA ของ Intel) เช่นเดียวกับ Mac Pro ที่การตั้งค่าความสัมพันธ์ของ CPU จะปิดการใช้งานความเกี่ยวข้องของหน่วยความจำและลดประสิทธิภาพ สิ่งนี้ไม่ได้ใช้กับโปรเซสเซอร์มือถือ
Jano

คำตอบ:


14

OS X ได้รองรับAPI affinity APIตั้งแต่เวอร์ชัน 10.5 นี่คือเนื้อหาที่เกี่ยวข้องจากหน้าเว็บที่ฉันเชื่อมโยง

ชุดค่าความสัมพันธ์

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

ชุดความสัมพันธ์ถูกระบุโดย "แท็ก" เธรดถูกกำหนดให้กับชุดความสัมพันธ์เฉพาะโดยกำหนดแท็กที่ระบุชุดนั้น เธรดสามารถอยู่ในชุดของความสัมพันธ์ได้สูงสุดหนึ่งชุด นั่นคือมันมีหนึ่งแท็กความสัมพันธ์

ผลของการตั้งค่าแท็กความสัมพันธ์ที่แตกต่าง

ตัวอย่างเช่นแอปพลิเคชันที่ต้องการเรียกใช้ 2 เธรดในแคช L2 แยกกันจะตั้งค่าเธรดที่มีแท็กสัมพันธ์ที่แตกต่างกัน บนเครื่องดูอัลคอร์ความสัมพันธ์นี้จะถูกละเว้นอย่างมีประสิทธิภาพ อย่างไรก็ตามใน MacPro แบบ 4 คอร์ตัวกำหนดตารางเวลาจะพยายามเรียกใช้เธรดบนแพ็คเกจแยกต่างหาก ในทำนองเดียวกันใน 8-core MacPro ตัวจัดตารางเวลาจะพยายามเรียกใช้เธรดเหล่านี้บนแม่พิมพ์แยกต่างหาก (ซึ่งอาจหรืออาจจะไม่อยู่ในแพ็คเกจ CPU จริงเดียวกัน)

ตัวอย่างการใช้งาน

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

  • รับจำนวนตัวประมวลผลบนระบบโดยใช้ sysctl (3)
  • สร้างจำนวนเธรดนั้น
  • ตั้งค่าแต่ละเธรดด้วยแท็ก affinity ที่แตกต่างกัน
  • เริ่มกระทู้ทั้งหมด

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

ศึกษาแหล่งที่มาของรายการรหัสและข้อมูลเกี่ยวกับการแบ่งปันความสัมพันธ์ของแท็กระหว่างกระบวนการหลักและลูกการรับการกำหนดค่าแคช CPU และอื่น ๆ


มีอรรถประโยชน์บรรทัดคำสั่งเพิ่มเติมจาก API นี้หรือไม่
Victor Eijkhout

11

http://developer.apple.com/mac/library/releasenotes/Performance/RN-AffinityAPI/

Mac OS X ไม่ได้ส่งออกอินเตอร์เฟซที่สามารถระบุตัวประมวลผลหรือด้ายตำแหน่งอย่างชัดเจนด้ายการควบคุมการประมวลผลผูกพันไม่สนับสนุน เคอร์เนลจัดการการจัดวางเธรดทั้งหมดแทน แอปพลิเคชั่นคาดหวังว่าตัวจัดตารางเวลาจะทำงานภายใต้สถานการณ์ส่วนใหญ่โดยใช้การจัดวางโปรเซสเซอร์ที่ดีสำหรับแคชที่เกี่ยวข้อง


2
OS X ได้รองรับ API affinity API ตั้งแต่เวอร์ชัน 10.5 ดูคำตอบของฉันสำหรับรายละเอียด
void-pointer

4

จนถึงตอนนี้ตัวกำหนดตารางเวลา XNU (1504.3.12) ไม่ได้ใช้ความเกี่ยวข้องของตัวประมวลผลสำหรับกระบวนการหรือเธรด

ดังนั้น MacOSX จึงไม่มีวิธีการใด ๆ


2

จากhttp://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf

•เธรดเคอร์เนลที่มีประสิทธิภาพ แต่ละเธรด POSIX จะถูกจัดคิวบน CPU เฉพาะปรับปรุงความสัมพันธ์ของตัวประมวลผลและความสามารถในการปรับขนาดขณะที่ลดความขัดแย้งในการล็อก เธรดเป็นไปตาม POSIX (1c) รวมถึงการสนับสนุนสำหรับการยกเลิกและ mutex ที่แชร์

ดูเหมือนโฆษณาสำหรับฉัน iMac ของฉันที่ทำงานกับ Lion ดูเหมือนจะเคารพว่าส่วนใหญ่แล้ว แต่มันไม่ได้เป็น 'กระบวนการ Pin'a สู่แกนกลาง

ฉันไม่พบ API ใด ๆ เพื่อควบคุมความสัมพันธ์ของกระบวนการสำหรับดาร์วินอยู่ดี

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