จะทำให้คอมพิวเตอร์ทำงานช้าลง (เพื่อการทดสอบ) ได้อย่างไร? [ปิด]


20

ในฐานะที่เป็นคนส่วนใหญ่เห็นด้วยการส่งเสริมให้นักพัฒนาที่จะทำให้โค้ดได้อย่างรวดเร็วโดยให้พวกเขามีเครื่องช้าไม่ได้เป็นความคิดที่ดี แต่มีจุดหนึ่งในคำถามนั้น เครื่อง dev ของฉันเร็วและบางครั้งฉันก็เขียนโค้ดที่ไม่มีประสิทธิภาพรบกวน แต่ก็เห็นได้ชัดเมื่อรันบนเครื่องของคนอื่น

อะไรคือวิธีที่ดีในการชะลอเครื่อง dev แบบเทอร์โบชาร์จชั่วคราว? แนวคิดของ "ความเร็ว" รวมถึงปัจจัยหลายประการเช่น:

  • ความถี่สัญญาณนาฬิกาของ CPU
  • จำนวนคอร์ CPU
  • จำนวนหน่วยความจำและแคชตัวประมวลผล
  • ความเร็วของรถเมล์ต่างๆ
  • ดิสก์ I / O
  • GPU
  • เป็นต้น

34
คลายปุ่ม "ปุ่มเทอร์โบ" ... ไม่รอ
LennyProgrammers

6
นี่คือรากของปัญหาของคุณ: "ไม่มีประสิทธิภาพรบกวน" เปลี่ยนนิสัยการเข้ารหัสของคุณ
Darknight

16
@Darknight: ไม่มันไม่ใช่อย่างนั้น คุณต้องทำครั้งแรกมันถูกต้องแล้วให้มันได้อย่างรวดเร็ว หากมีความจำเป็น หากต้องการทราบว่าต้องเพิ่มประสิทธิภาพอะไรคุณต้องทดสอบและค้นหาว่าส่วนใดเป็นปัญหา การทำสิ่งที่เป็นไปอย่างรวดเร็วที่สุดเท่าที่ทำได้ในสถานที่แรกจะเสียของคุณเวลา - และของเสียที่มีแนวโน้มของการทำมันขวา
Joonas Pulakka

1
ฉันก็เห็นด้วยบางส่วน อย่างไรก็ตามหากคุณมีนิสัยการเขียนโค้ดที่มีประสิทธิภาพในการเริ่มต้นด้วย; จากนั้นเมื่อคุณ "ทำให้การทำงานถูกต้อง" คุณสามารถใช้เวลาน้อยลงในภายหลัง "ทำให้เร็วขึ้น"
Darknight

4
@Darknight: ฉันคิดว่า @Joonas กำลังถามคำถามที่สมเหตุสมผลมาก แนวคิดที่ว่า "การเปลี่ยนนิสัยการเข้ารหัสของคุณ" นั้นเพียงพอแล้วนั้นไม่จริง นี่คือตัวอย่าง: ( stackoverflow.com/questions/926266/ … ) และความคิดที่ว่าคุณสามารถวางเวลาบนเครื่องที่ช้ากว่าโดยที่ IDE ไม่ถือว่าเพียงพอที่จะค้นหาข้อบกพร่องด้านประสิทธิภาพ ผู้คนจำนวนมากพูดคุยเกี่ยวกับการทำโปรไฟล์ แต่การทำมัน (สำเร็จ) เป็นอีกเรื่องหนึ่ง สิ่งที่จะช่วยฉันได้ (& คนอื่น ๆ ที่ฉันคิดว่า) คือสิ่งที่จุนขอ
Mike Dunlavey

คำตอบ:


39

ทำการทดสอบในเครื่องเสมือนที่มีหน่วยความจำ จำกัด และมีเพียงแกนเดียวเท่านั้น

เครื่องแบบเก่าที่ผู้คนยังคงมีตอนนี้ส่วนใหญ่เป็น Pentium 4 ยุค นั่นไม่ใช่สิ่งที่ไม่สมจริงฉันกำลังใช้ตัวเองอยู่ตอนนี้ ประสิทธิภาพแบบแกนเดี่ยวของพีซีปัจจุบันมักไม่ค่อยดีเท่าไหร่และแย่ลงไปกว่านี้ ประสิทธิภาพของแรมนั้นสำคัญกว่าประสิทธิภาพของ CPU สำหรับหลาย ๆ สิ่งอยู่แล้วและด้วยการ จำกัด เพียงเล็กน้อยอย่างรุนแรงกว่าสำหรับ 1GB P4 แบบเก่าคุณจะชดเชยให้ได้เล็กน้อย

หากคุณเต็มใจจ่ายน้อยซื้อเน็ตบุ๊ก ทำการทดสอบในสิ่งนั้น


1
หรือแล็ปท็อปผู้สูงอายุ

ปัญหากับเครื่องเสมือนคือไม่มีพวกเขา (AFAIK) รองรับพอร์ต IEEE 1394 (firewire) บางส่วนของซอฟแวร์ของฉันใช้กล้องที่มีการเชื่อมต่อกับ FireWire ดังนั้น ...
Joonas Pulakka

ของจริงให้คุณกำหนดอุปกรณ์ PCI ให้กับ VM
Javier

3
อาจเป็นงานสำหรับ Xen - เครื่องเสมือนไม่มีโฮสต์ O / S แต่เป็นชั้นบนสุดในตัวเอง มีประวัติ Unix อย่างมาก แต่ตอนนี้สามารถรองรับ OS ที่เป็นกรรมสิทธิ์ได้ แต่ฉันไม่เคยใช้มันและไม่ทราบว่าคุณสามารถควบคุมประสิทธิภาพการทำงานของ VM และทรัพยากรได้มากน้อยเพียงใด
Steve314

1
+1 A VM ปรับได้สูงและมอบสภาพแวดล้อมที่แน่นอนสำหรับการทดสอบ ฉันใช้ VMware ของตัวเองเพื่อจุดประสงค์นี้
Gary Rowe

11

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

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


1
ไม่การทำโปรไฟล์จะไม่ทำให้ประสิทธิภาพอัลกอริทึมลดลง มันจะแสดงให้คุณเห็นว่าโปรแกรมใช้เวลาอยู่ที่ใดหากคุณต้องการเร่งความเร็ว แต่ไม่ต้องเร่งความเร็ว
David Thornley

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

4
@David Thornley & @Poleton: ฉันคิดว่าอัลกอริทึมที่ไม่มีประสิทธิภาพหรือฮอตสปอตของรหัสเป็นเรื่องรองสำหรับปัญหาหลัก: "มันช้าเกินไปหรือไม่?" มันเป็นเรื่องส่วนตัว แต่ก็เป็นคำถามที่สำคัญที่สุด ถ้ามันไม่รู้สึกช้าในทางปฏิบัติดังนั้นถ้าอัลกอริทึมของคุณไม่มีประสิทธิภาพล่ะ? มันทำในสิ่งที่ต้องทำ! หรือถ้าโปรแกรมรู้สึกช้าเกินไปโดยไม่คำนึงถึงอัลกอริธึมที่เหมาะสมที่สุดคุณอาจต้องเปลี่ยนแนวทาง (สถาปัตยกรรมภาษาโปรแกรมหรือบางอย่าง!) การมีอัลกอริธึมที่เหมาะสมที่สุดไม่ใช่ข้อแก้ตัวสำหรับความช้าของโปรแกรม:
Joonas Pulakka

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

10

อะไรก็ตามที่คุณทำเพื่อทำให้เครื่องของคุณช้าลงอาจเป็นแฮ็ค

นี่เป็นคำแนะนำสองสามข้อ:

  • ใช้เครื่องเสมือน
  • โปรไฟล์รหัสในเครื่องของคุณมองหาคอขวด
  • ใช้เครื่องเก่าสำหรับ "การทดสอบประสิทธิภาพ"

@ หมายความว่าอะไร?
johnny

1
@ จอห์นนี่: ฉันหมายถึงฉันลงคะแนนเพราะเจสันได้แนะนำการทำโปรไฟล์แอปพลิเคชันซึ่งหวังว่าจะหาที่มาของคอขวดประสิทธิภาพโดยไม่จำเป็นต้องย้ายไปที่ระบบช้า
Matt Ellen


4

ตระหนักว่านี่เป็นคำถามที่ค่อนข้างเก่า แต่สำหรับคนอื่นในสถานการณ์เช่นนี้ คุณสามารถลองใช้ CPUKiller โดยทั่วไปแล้วเป็นแอปขนาดเล็กที่คุณสามารถกำหนดค่าให้ใช้% ของโปรเซสเซอร์ที่แตกต่างกันได้ http://www.cpukiller.com/

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