ทำไม apt-get ไม่ใช้ 100% (cpu หรือดิสก์หรือ net)


21

ทำไมapt-get ไม่ใช้ 100% ของ cpu ดิสก์หรือเครือข่าย - หรือแม้แต่ใกล้เคียงกับมัน? แม้ในระบบช้า (Raspberry Pi 2+) ฉันได้รับ CPU มากถึง 30% ฉันแค่คิดว่าอาจจะมีการควบคุมปริมาณที่ดุ้งดิ้งหรือมันควรจะทำอะไรบางอย่างให้มากที่สุดในขณะที่มันกำลังทำงาน ... หรือมันน่าจะทำได้เร็วกว่าที่คิด

แก้ไข: ฉันแค่วัดอย่างคร่าวๆผ่าน cpu / disk / net monitor ในพาเนลของฉันและแอพ System Monitor ของ Ubuntu MATE

โปรดอธิบายว่าทำไมฉันถึงผิด :-)

อัปเดต: ฉันเข้าใจว่าapt-getต้องดึงข้อมูลอัปเดต (และอาจถูก จำกัด โดยแบนด์วิดธ์อัปสตรีม / ผู้ให้บริการ) แต่เมื่อมีการ "เปิดออก" และอื่น ๆ การใช้งาน CPU ควรจะเพิ่มขึ้นอย่างน้อย(ถ้าไม่ใช่ max out) สำหรับเวิร์คสเตชั่นที่ใช้งานได้ดีของฉันซึ่งใช้ SSD สำหรับไดรฟ์หลักและ ramdisk สำหรับ / tmp นี่ไม่ใช่กรณี

หรือบางทีฉันอาจต้องมองให้ใกล้ขึ้น


คุณวัดปริมาณดิสก์และโหลดเครือข่ายอย่างไร
JigglyNaga

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

คุณได้รับหมายเลขโหลด CPU 30%อย่างไร
อัล

1
@PSkocik "ฉันคิดว่ามันสามารถติดตั้งได้ตามที่ดาวน์โหลด" apt-get just downloads, dpkg ติดตั้ง และ dpkg ฉลาดกว่าฉลาด - ได้รับตามลำดับที่ควรติดตั้งแพ็คเกจซึ่งอาจไม่เหมือนกันกับที่ฉลาด - ดาวน์โหลด
Braiam

โปรดทราบว่าแอปพลิเคชันซึ่งเป็น CPU 100% ที่ถูกเชื่อมต่อสำหรับครึ่งขีดและจากนั้น 100% IO-bound สำหรับอีกครึ่งหนึ่งจะไม่ปรากฏว่า CPU-bound หรือ IO-bound,
MSalters

คำตอบ:


28

ปพลิเคชันจะมีเพียงออกสูงสุดของ CPU ถ้า app เป็นซีพียูที่ถูกผูกไว้ แอปนั้นผูกกับ CPUหากสามารถรับข้อมูลทั้งหมดได้อย่างรวดเร็วและสิ่งที่รออยู่คือตัวประมวลผลเพื่อประมวลผลข้อมูล

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

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


6
ด้วยaptคำสั่งมันทำให้รุนแรงขึ้นเนื่องจากความจริงที่ว่าไฟล์จำนวนมากเปิดอยู่ในโหมดซิงค์หรือด้วยการล้างข้อมูลบนดิสก์ที่ถูกร้องขอเพื่อรับประกันข้อมูลบนดิสก์อยู่ในสถานะที่สอดคล้องกันอย่างสม่ำเสมอเนื่องจากความผิดพลาดของระบบอาจมีผลกระทบร้ายแรง เล่นaptคำสั่งที่มีeatmydataบ่อยมากสามารถปรับปรุงประสิทธิภาพการทำงานที่ค่าใช้จ่ายของความน่าเชื่อถือที่ลดลง (ไม่พูดถึงว่าการให้บริการเริ่มต้นเป็นส่วนหนึ่งของการติดตั้งแพคเกจจะได้รับมรดกการตั้งค่า eatmydata)
Stéphane Chazelas

ขอบคุณที่จุดสุดท้าย :) ไม่มีใครมีตัวเลขสำหรับ eatmydata ตั้งแต่ปี 2010 กระทำในbugs.debian.org/cgi-bin/bugreport.cgi?bug=578635 ? ฉันไม่รู้ว่า "ละคร" เป็นคำที่ถูกต้องหรือยัง
sourcejedi

อาอาจเป็น (อย่างน้อยในผู้ให้บริการคลาวด์บางส่วน) bugs.launchpad.net/cloud-init/+bug/1236531/comments/6
sourcejedi

1
@sourcejedi สำหรับ Raspberry Pi2 ที่มีการ์ด SD ระดับสูง (แต่ยังคงเป็นการ์ด SD ไม่ใช่ SSD ระดับสูง) ฉันคิดว่า "น่าทึ่ง" เพื่อพูดน้อย ประสิทธิภาพของ dpkg บนสื่อแฟลชเป็นสิ่งที่แย่จริงๆ
Gilles 'หยุดความชั่วร้าย' ใน

1
ถ้ามันผูกไว้กับดิสก์ IO ทำไมมันไม่ใช้แบนด์วิดท์ดิสก์ 100%
user253751

15

แม้ในระบบช้า (Raspberry Pi 2+) ฉันได้รับ CPU มากถึง 30%

Raspberry Pi 2+ มี 4 คอร์ สำหรับเครื่องมือการตรวจสอบบางอย่างการใช้งาน 100% สอดคล้องกับแกนประมวลผลทั้งหมดที่ใช้ 100% หากมีการใช้งานคอร์เพียงหนึ่งคอร์ในการประมวลผลรหัสควอดโหลด CPU คือ 25% โหลดซีพียู 30% ที่คุณพูดถึงนั้นเป็นแกนหลักหนึ่งที่ใช้ที่ 100% ในขณะที่บางกระบวนการกำลังทำงานบนคอร์อื่น:

(100% on one core out of 4 = 100 / 4 = 25%) + some processes ≃ 30%

เนื่องจากapt-getไม่ใช่เธรดแบบมัลติเธรดจึงจะไม่ใช้ตัวประมวลผลมากกว่าหนึ่งตัวซึ่งเป็น 25% ของทรัพยากร CPU ทั้งหมด


นี่คือตัวอย่างในเครื่อง 8 คอร์ (4 คอร์พร้อมHyper-Threading ) ที่ใช้งาน Ubuntu ผมเปิดตัวหนึ่งเธรดพร้อมcat /dev/zero > /dev/nullคำสั่งเพื่อสร้างกระบวนการที่ไม่มีที่สิ้นสุดที่ใช้หนึ่งคอร์โดยสิ้นเชิง

ตอนนี้ถ้าเราดูกราฟจากhtopเราจะเห็นว่าค่าเฉลี่ยโหลด ( Avgบาร์) คือ12.7%ซึ่งตรงกับหนึ่งคอร์ที่ใช้ 100% ซึ่งก็คือ 1/8 ของทรัพยากร CPU ทั้งหมด:

(100% = 100 / 8 = 12.5%) + some background processes ≃ 12.7%.

htop

นอกจากนี้ยังสามารถสังเกตเห็นว่าคำสั่งมีค่า100%ในCPU%คอลัมน์นี้เป็นเพราะมันเกี่ยวข้องกับหนึ่งคอร์และไม่ได้แกนทั้งหมด


+1 การใช้งาน% ใกล้กับหลาย ๆ (100 / nCores) ควรทำการตรวจสอบข้อเท็จจริงเพิ่มเติมเสมอ สามารถตรวจสอบได้ - และแน่นอนว่าถูก จำกัด - โดยใช้จอภาพที่สามารถแสดงการใช้งานต่อคอร์โดยที่ 0 <= the% <= 100 * nCores
underscore_d

ไม่ใช่/dev/zero > /dev/nullตัวอย่างที่ดีกว่าเนื่องจาก urandom จะทำให้หมดสิ้นไปกับเอนโทรปี?
Filip Haglund

@FilipHaglund cat /dev/zero > /dev/nullให้ผลลัพธ์เดียวกันฉันไม่ทราบว่าอุปกรณ์ขอบคุณ urandom จะทำให้หมดสิ้นไปกับเอนโทรปีที่ฉันไม่รู้ว่าเป็นเอนโทรปีมันจะเป็นปัญหาได้อย่างไร?
อัล

1
เมื่อโปรแกรมใช้ crypto พวกเขาต้องการข้อมูลสุ่มอย่างแท้จริงเพื่อสร้างคีย์การเข้ารหัสที่ปลอดภัย คอมพิวเตอร์สร้างเอนโทรปีโดยดูการเลื่อนเมาส์เหนือสิ่งอื่นใด มีตัวสร้างตัวเลขสุ่มฮาร์ดแวร์ แต่คอมพิวเตอร์ส่วนใหญ่ไม่มี หากเอนโทรปีหมดไปแล้วรหัสที่ต้องการเอนโทรปีที่ปลอดภัยจะต้องรอให้มีการสร้างมากขึ้น Urandom จะใช้บิตสุ่มอย่างแท้จริงหากมีหรือมิฉะนั้นส่งคืนบิตสุ่มที่มีความปลอดภัยน้อยกว่า
Filip Haglund

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

2

ฉันคิดว่าคุณไม่ได้วัด IO% ฉันไม่เห็นวิดเจ็ต Linux IO% (ฉันอิจฉาผู้จัดการงาน Windows 10 มาก :) ตรวจสอบการใช้iotopคำสั่งแล้วคุณจะเห็น 100% IO

topควรแสดง 100% ข้ามuser+ system+ iowaitสำหรับค่า 100% หารด้วยจำนวนหลักของคุณตามที่อธิบายโดย AL ฉันไม่ได้บอกว่าtopเป็นประโยชน์ 100% แต่อาจเป็นเครื่องมือที่มีประโยชน์สำหรับการเรียนรู้

ปริมาณงานจะต่ำกว่าค่าสูงสุดเนื่องจากคุณกำลังคลายไฟล์ขนาดเล็กจำนวนมากหรือที่เรียกว่า "random IO" นอกจากนี้ยังมีการซิงค์ / แคชดิสก์บางส่วนถึงแม้ว่าตั้งแต่ปี 2010 บน Linux จะมีเพียงไม่กี่ตัวเท่านั้นสำหรับแต่ละแพ็คเกจที่ติดตั้ง ( เคยเป็นหนึ่งต่อไฟล์ )


การใช้งานiotop --onlyที่--onlyตัวเลือกแสดงเฉพาะกระบวนการหรือหัวข้อจริงทำ I / O
อัล

4
iostat, dstat, atop ... จะแสดงต่อการใช้ดิสก์ดิสก์โดยไม่ต้องใช้สิทธิ์ สำหรับการใช้งานตามหน้าที่คุณต้องการสิทธิ์พิเศษ
Stéphane Chazelas

@ StéphaneChazelasถูกต้องอย่างแน่นอน ประเด็นที่ฉันพยายามทำ (แก้ไขนินจา) ก็คือ OP กล่าวถึงเครื่องมือ GUI สองสามอย่าง และเครื่องมือ GUI เฉพาะที่ฉันเห็นเช่น Gnome System Monitor แสดงปริมาณงาน แต่ไม่มี IO%
sourcejedi

2

ที่จริงแล้วคำขอของ IO / Network นั้นช้ามากเมื่อเทียบกับ ops ของ CPU ซึ่งหมายความว่าแม้ว่าการ์ดเครือข่ายของคุณกำลังดึงข้อมูลหรือดิสก์ของคุณกำลังเขียนข้อมูลนี้ CPU ของคุณก็ไม่ได้ทำสิ่งใดเลย (สำหรับกระบวนการนี้ต่อไป)

หากฮาร์ดไดรฟ์ของคุณเร็วกว่าการเชื่อมต่อเครือข่าย (ซึ่งอาจเป็นจริง) แสดงว่าจะไม่เขียนเกินกว่าที่ได้รับ

ในที่สุดเปอร์เซ็นต์เครือข่ายจะสอดคล้องกับการใช้งานการ์ดเครือข่ายสูงสุดที่เป็นไปได้ไม่ใช่การเชื่อมต่อ ดังนั้นคุณอาจมีอะแดปเตอร์เครือข่าย 1Gb / s คุณไม่น่าจะมีการเชื่อมต่ออินเทอร์เน็ตที่เข้าถึงแบนด์วิดท์นี้

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