ค้นหาเว็บไซต์

Perf- เครื่องมือตรวจสอบและวิเคราะห์ประสิทธิภาพสำหรับ Linux


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

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

ในเวลาเดียวกัน เราต้องระมัดระวังที่จะไม่นำทรัพยากรของเราไปใช้อย่างจำกัดซึ่งการใช้อย่างต่อเนื่องจะก่อให้เกิดความเสียหายที่แก้ไขไม่ได้

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

แนะนำและติดตั้ง Perf ใน Linux

เหนือสิ่งอื่นใด Linux มีเครื่องมือตรวจสอบและวิเคราะห์ประสิทธิภาพที่เรียกว่า perf ที่สะดวกสบาย แล้วอะไรคือสิ่งที่ทำให้ ประสิทธิภาพ แตกต่างจากเครื่องมือชื่อดังอื่นๆ ที่คุณคุ้นเคยอยู่แล้ว

คำตอบก็คือ ประสิทธิภาพ ให้การเข้าถึงหน่วยตรวจสอบประสิทธิภาพใน CPU และช่วยให้เราสามารถพิจารณาพฤติกรรมของฮาร์ดแวร์และเหตุการณ์ที่เกี่ยวข้องได้อย่างใกล้ชิด

นอกจากนี้ยังสามารถตรวจสอบเหตุการณ์ซอฟต์แวร์ และสร้างรายงานจากข้อมูลที่รวบรวมได้

คุณสามารถติดตั้ง perf ในการแจกแจงตาม RPM ด้วย:

yum update && yum install perf     [CentOS / RHEL / Fedora]
dnf update && dnf install perf     [Fedora 23+ releases]

ใน Debian และอนุพันธ์:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

หาก uname -r ในคำสั่งด้านบนส่งคืนสตริงเพิ่มเติมนอกเหนือจากเวอร์ชันจริง (ในกรณีของฉัน 3.2.0-23-generic) คุณอาจต้องพิมพ์ linux-tools-3.2.0-23 แทนที่จะใช้เอาต์พุตของ uname

สิ่งสำคัญที่ควรทราบคือ ประสิทธิภาพ ให้ผลลัพธ์ที่ไม่สมบูรณ์เมื่อเรียกใช้ในแขกบน VirtualBox หรือ VMWare เนื่องจากไม่อนุญาตให้เข้าถึงตัวนับฮาร์ดแวร์เช่นเดียวกับเทคโนโลยีเสมือนจริงอื่นๆ (เช่น KVM หรือ XEN) .

นอกจากนี้ โปรดทราบว่าคำสั่ง perf บางคำสั่งอาจถูกจำกัดไว้ที่รูทตามค่าเริ่มต้น ซึ่งสามารถปิดใช้งานได้ (จนกว่าระบบจะรีบูต) โดยทำดังนี้

echo 0 > /proc/sys/kernel/perf_event_paranoid

หากคุณต้องการปิดใช้งานโหมด หวาดระแวง อย่างถาวร ให้อัปเดตการตั้งค่าต่อไปนี้ในไฟล์ /etc/sysctl.conf

kernel.perf_event_paranoid = 0

คำสั่งย่อย

เมื่อคุณติดตั้ง perf แล้ว คุณสามารถอ้างอิงถึงหน้า man page เพื่อดูรายการคำสั่งย่อยที่มีอยู่ (คุณสามารถนึกถึงคำสั่งย่อยว่าเป็นตัวเลือกพิเศษที่เปิดหน้าต่างเฉพาะเข้าสู่ระบบ) เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดและสมบูรณ์ยิ่งขึ้น ให้ใช้ perf เป็น root หรือผ่าน sudo

รายการเพอร์เฟค

รายการ perf (ไม่มีตัวเลือก) ส่งคืนประเภทเหตุการณ์สัญลักษณ์ทั้งหมด (รายการแบบยาว) หากคุณต้องการดูรายการเหตุการณ์ที่มีอยู่ในหมวดหมู่เฉพาะ ให้ใช้รายการ perf ตามด้วยชื่อหมวดหมู่ ([hw|sw|cache|tracepoint|pmu|event_glob ]), เช่น:

แสดงรายการเหตุการณ์ซอฟต์แวร์ที่กำหนดไว้ล่วงหน้าใน Linux:

perf list sw 

สถิติเพิร์ฟ

สถิติ perf รันคำสั่งและรวบรวมสถิติประสิทธิภาพของ Linux ในระหว่างการดำเนินการคำสั่งดังกล่าว จะเกิดอะไรขึ้นในระบบของเราเมื่อเรารัน dd?

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

สถิติที่แสดงข้างต้นบ่งชี้เหนือสิ่งอื่นใด:

  1. การดำเนินการของคำสั่ง dd ใช้เวลา 21.812281 มิลลิวินาทีของ CPU หากเราหารตัวเลขนี้ด้วยค่า “วินาทีที่ผ่านไป” ด้านล่าง (23.914596 มิลลิวินาที) จะได้ผลลัพธ์ 0.912 (ใช้ CPU)
  2. ในขณะที่ดำเนินการคำสั่ง สวิตช์บริบท 15 (หรือที่เรียกว่าสวิตช์กระบวนการ) ระบุว่า CPU ถูกสลับ 15 ครั้งจากกระบวนการหนึ่ง (หรือเธรด) ไปยังอีกกระบวนการหนึ่ง
  3. การโยกย้าย CPU 2 เป็นผลลัพธ์ที่คาดหวังไว้เมื่อใน CPU แบบ 2 คอร์ ปริมาณงานจะกระจายเท่าๆ กันระหว่างจำนวนคอร์
    ในช่วงเวลานั้น (21.812281 มิลลิวินาที) จำนวนรอบ CPU ทั้งหมดที่ใช้คือ 62,025,623 ซึ่งหารด้วย 0.021812281 วินาทีจะให้ 2.843 กิกะเฮิร์ตซ์
  4. หากเราหารจำนวนรอบด้วยจำนวนคำสั่งทั้งหมด เราจะได้ 4.9 รอบต่อคำสั่ง ซึ่งหมายความว่าแต่ละคำสั่งใช้เวลาเกือบ 5 รอบของ CPU จึงจะเสร็จสมบูรณ์ (โดยเฉลี่ย) เราสามารถตำหนิสิ่งนี้ (อย่างน้อยก็ในบางส่วน) กับจำนวนสาขาและการพลาดสาขา (ดูด้านล่าง) ซึ่งทำให้สิ้นเปลืองหรือใช้วงจร CPU ในทางที่ผิด
  5. ขณะที่คำสั่งถูกดำเนินการ พบสาขาทั้งหมด 3,552,630 นี่คือการแสดงระดับ CPU ของจุดตัดสินใจและลูปในโค้ด ยิ่งสาขามาก ประสิทธิภาพก็ยิ่งลดลง เพื่อชดเชยสิ่งนี้ CPU สมัยใหม่ทั้งหมดจะพยายามคาดการณ์โฟลว์ที่โค้ดจะใช้ 51,348 สาขาที่พลาด บ่งชี้ว่าคุณลักษณะการคาดการณ์นั้นผิด 1.45% ของเวลา

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

เพอร์เฟคสุดๆ

perf top คล้ายกับคำสั่ง top โดยจะแสดงโปรไฟล์ระบบที่เกือบจะเรียลไทม์ (หรือที่เรียกว่าการวิเคราะห์แบบสด)

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

จะแสดงเหตุการณ์รอบทั้งหมด

perf top -a 

จะแสดงเหตุการณ์ที่เกี่ยวข้องกับนาฬิกา cpu ทั้งหมด

perf top -e cpu-clock 

คอลัมน์แรกในเอาต์พุตด้านบนแสดงถึงเปอร์เซ็นต์ของกลุ่มตัวอย่างที่ได้รับตั้งแต่เริ่มต้นการทดสอบ โดยจัดกลุ่มตามสัญลักษณ์ฟังก์ชันและออบเจ็กต์ที่ใช้ร่วมกัน มีตัวเลือกเพิ่มเติมใน man perf-top

บันทึกที่สมบูรณ์แบบ

ระเบียน perf รันคำสั่งและบันทึกข้อมูลทางสถิติลงในไฟล์ชื่อ perf.data ภายในไดเร็กทอรีการทำงานปัจจุบัน มันทำงานคล้ายกับ สถานะประสิทธิภาพ

พิมพ์ perf record ตามด้วยคำสั่ง:

perf record dd if=/dev/null of=test.iso bs=10M count=1

รายงานเพอร์เฟค

รายงานประสิทธิภาพ จัดรูปแบบข้อมูลที่รวบรวมใน perf.data ด้านบนเป็นรายงานประสิทธิภาพ:

sudo perf report

คำสั่งย่อยข้างต้นทั้งหมดมี man page เฉพาะที่สามารถเรียกใช้เป็น:

man perf-subcommand

โดยที่ คำสั่งย่อย เป็น รายการ, สถิติ, ด้านบน, บันทึก หรือ รายงาน. เหล่านี้เป็นคำสั่งย่อยที่ใช้บ่อยที่สุด ส่วนอื่นๆ จะแสดงอยู่ในเอกสารประกอบ (ดูส่วนสรุปสำหรับลิงก์)

สรุป

ในคู่มือนี้ เราได้แนะนำให้คุณรู้จักกับ perf ซึ่งเป็นเครื่องมือตรวจสอบและวิเคราะห์ประสิทธิภาพสำหรับ Linux เราขอแนะนำให้คุณทำความคุ้นเคยกับเอกสารประกอบซึ่งเก็บรักษาไว้ใน https://perf.wiki.kernel.org

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

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