วิธีที่เหมาะสมในการตีความโหลดระบบในโปรเซสเซอร์ 4 คอร์ 8 เธรด


13

ในฐานะที่เราทุกคนรู้ว่าภาระของ1.00ที่เดียวหมายถึงการประมวลผลที่มีความเร็วในการโหลดของ100% analogically 4.00โหลดบนแกนรูปสี่เหลี่ยมจะเป็น100%

ฉันควรตีความโหลดบนโปรเซสเซอร์ 4 core 8 thread อย่างไร ฉันจะไปถึงความจุสูงสุดของ CPU เมื่อไหร่? ที่4.00หรือ8.00 ?

คำตอบ:


17

ไม่แน่นอน 1.00*n_cpuแต่ส่วนใหญ่ใน

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

คำถามที่จริงแล้ว "กระบวนการใดควรได้รับช่วงเวลา 1/100 วินาทีถัดไปของเรา" จะมีการตัดสินใจโดยฮิวริสติกที่ซับซ้อน มันมีชื่อเป็นงาน การตั้งเวลา

แน่นอนกระบวนการที่ถูกบล็อกเช่นพวกเขากำลังรอข้อมูลของพวกเขาสิ่งที่พวกเขากำลังอ่านจากดิสก์ได้รับการยกเว้นจากการจัดตารางงานนี้

สิ่งที่โหลดพูด: จำนวนกระบวนการที่กำลังรอกรอบเวลา 1 / 100th วินาทีถัดไปของพวกเขา แน่นอนมันเป็นค่าเฉลี่ย cat /proc/loadavgนี้เป็นเพราะคุณสามารถเห็นตัวเลขหลายใน

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

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

หากคุณเห็นกtopคุณจะเห็นว่าจำนวนของกระบวนการทำงานจริงนั้นต่ำมากอย่างน่าประหลาดใจนั่นคือกระบวนการที่ทำเครื่องหมายไว้ที่Rนั่น แม้ในระบบที่ไม่ยอมใครง่ายๆจริง ๆ ก็มักจะต่ำกว่า 5 ซึ่งเป็นส่วนหนึ่งเนื่องจากกระบวนการที่รอข้อมูลจากดิสก์หรือจากเครือข่ายก็ถูกระงับด้วย (ทำเครื่องหมายด้วยSด้านบน) โหลดแสดงการใช้งาน cpu เท่านั้น

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


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


CPU แบบมัลติคอร์เป็นซีพียูหลายตัวในซิลิคอนชิปเดียวกัน ไม่มีความแตกต่าง

ในกรณีของ CPU ที่มีเธรดมากมีผลข้างเคียงที่น่าสนใจ: การโหลด cpu ทำให้คู่ไฮเปอร์เธรดช้าลง แต่สิ่งนี้เกิดขึ้นบนเลเยอร์ที่ลึกกว่าสิ่งที่การกำหนดเวลางานปกติจะจัดการแม้ว่ามันจะสามารถ (และควร) มีอิทธิพลต่อการตัดสินใจในการย้ายกระบวนการของตัวกำหนดตารางเวลา

แต่จากมุมมองปัจจุบันของเรา - สิ่งที่กำหนดภาระของระบบ - มันไม่สำคัญเช่นกัน


4

เนื่องจากการทำไฮเปอร์เธรดไม่ใช่แกนที่สองจริง ๆ มันจะไม่มีแกนเป็น 200% แต่จะใช้เกินกว่า 100% สำหรับปริมาณงานบางอย่าง

ดังนั้นการโหลดสูงสุดของคุณจะไม่เป็นที่รู้จักระหว่างประมาณ 4 ถึง 6

(แน่นอนว่าสิ่งนี้สามารถเพิ่มสูงขึ้นได้เมื่อโอเวอร์โหลดเพราะจริง ๆ แล้วนับจำนวนกระบวนการที่รันได้โดยเฉพาะเมื่อพวกเขากำลังรอ IO)


4

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

ลองเรียกใช้ps -e vและค้นหาการตั้งค่าสถานะของกระบวนการ

state    The state is given by a sequence of characters, for example, "RWNA". The      first character indicates the run state of the process:
D    Marks a process in disk (or other short term, uninterruptible) wait.
I    Marks a process that is idle (sleeping for longer than about 20 seconds).  
L    Marks a process that is waiting to acquire a lock.
R    Marks a runnable process.
S    Marks a process that is sleeping for less than about 20 seconds.
T    Marks a stopped process.
W    Marks an idle interrupt thread.
Z    Marks a dead process (a "zombie").

นี่คือจากpsmanpage ดังนั้นคุณจะพบรายละเอียดเพิ่มเติมที่นั่นRและDกระบวนการต่าง ๆ น่าสนใจเป็นพิเศษ

คุณสามารถจบลงด้วย 'spikes' เฉลี่ยสำหรับเหตุผลทุกประเภทดังนั้นพวกเขาจึงไม่ได้เป็นตัวชี้วัดที่ดีของสิ่งอื่นนอกจาก 'คือระบบนี้ไม่ว่าง - ish' การจมลงในการแม็พค่าเฉลี่ยการโหลดไปยังคอร์ CPU จะไม่ทำให้คุณดี


3

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


ฉันไม่รู้ว่าจะเก็บไว้ในใจ!
Bartek Szablowski

2

ฉันทำการทดลองบางอย่างกับระบบ Xeon 24 คอร์ของเรา (2 ซ็อกเก็ต x 12 แกน) โหลดสูงสุดคือ 48.0 ในกรณีนี้เนื่องจากวิธีที่ Linux ตั้งค่าไฮเปอร์เธรด

อย่างไรก็ตามคุณไม่ได้รับปริมาณเทียบเท่า 48 คอร์ สิ่งที่ฉันได้สังเกตคือคุณได้รับ 90% ของปริมาณงานในลอจิคัลโปรเซสเซอร์ 24 ตัวแรกนั่นคือถ้าโหลดทำงานถึง 24.0 จากนั้นคุณจะได้รับปริมาณงานเพิ่มเติมประมาณ 10% สำหรับตัวประมวลผลเชิงตรรกะที่เหลืออีก 24 ตัว (โหลดรันถึง 48.0) วิธีคิดอีกอย่างคือว่าถ้าคุณรัน 48 เธรดบน 24 คอร์คุณจะได้รับการเพิ่มขึ้นประมาณ 10-20% ถ้าคุณเปิดใช้งานไฮเปอร์เธรดกับไม่ใช่ มันไม่ใช่การเพิ่ม 100% อย่างที่นักการตลาดบอกเป็นนัย

ตัวอย่างเช่นวิธีหนึ่งในการทดสอบการสังเกตนี้คือมีกระบวนการที่รัน 48 เธรด (พูดโดยใช้ TBB หรือแบบจำลองเธรดที่ handrolled) จากนั้นเรียกใช้

time numactl --physcpubind=0-23  ./myprocess

จากนั้นเรียกใช้

time numactl --physcpubind=0-47  ./myprocess

หลังควรใช้เวลาน้อยลงประมาณ 10-20% หากกระบวนการของคุณถูกบล็อก I / O อย่างมากผลลัพธ์อาจแตกต่างกัน

อดีตจะปิดใช้งานไฮเปอร์เธรดโดยอนุญาตให้เธรดรันบนตัวประมวลผลเชิงตรรกะเดียว (ของแต่ละคอร์) ในขณะที่หลังจะเปิดใช้งานไฮเปอร์เธรดโดยอนุญาตให้เธรดรันบนตัวประมวลผลเชิงตรรกะ 2 ตัว (ของแต่ละคอร์)

โหลดในทั้งสองกรณีควรรายงานเป็น 48.0 ... ซึ่งอย่างที่คุณเห็นจะทำให้เข้าใจผิดมาก

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