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
สถิติที่แสดงข้างต้นบ่งชี้เหนือสิ่งอื่นใด:
- การดำเนินการของคำสั่ง dd ใช้เวลา 21.812281 มิลลิวินาทีของ CPU หากเราหารตัวเลขนี้ด้วยค่า “วินาทีที่ผ่านไป” ด้านล่าง (23.914596 มิลลิวินาที) จะได้ผลลัพธ์ 0.912 (ใช้ CPU)
- ในขณะที่ดำเนินการคำสั่ง สวิตช์บริบท 15 (หรือที่เรียกว่าสวิตช์กระบวนการ) ระบุว่า CPU ถูกสลับ 15 ครั้งจากกระบวนการหนึ่ง (หรือเธรด) ไปยังอีกกระบวนการหนึ่ง
- การโยกย้าย CPU 2 เป็นผลลัพธ์ที่คาดหวังไว้เมื่อใน CPU แบบ 2 คอร์ ปริมาณงานจะกระจายเท่าๆ กันระหว่างจำนวนคอร์
ในช่วงเวลานั้น (21.812281 มิลลิวินาที) จำนวนรอบ CPU ทั้งหมดที่ใช้คือ 62,025,623 ซึ่งหารด้วย 0.021812281 วินาทีจะให้ 2.843 กิกะเฮิร์ตซ์ - หากเราหารจำนวนรอบด้วยจำนวนคำสั่งทั้งหมด เราจะได้ 4.9 รอบต่อคำสั่ง ซึ่งหมายความว่าแต่ละคำสั่งใช้เวลาเกือบ 5 รอบของ CPU จึงจะเสร็จสมบูรณ์ (โดยเฉลี่ย) เราสามารถตำหนิสิ่งนี้ (อย่างน้อยก็ในบางส่วน) กับจำนวนสาขาและการพลาดสาขา (ดูด้านล่าง) ซึ่งทำให้สิ้นเปลืองหรือใช้วงจร CPU ในทางที่ผิด
- ขณะที่คำสั่งถูกดำเนินการ พบสาขาทั้งหมด 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
หากคุณพบแอปพลิเคชันที่ใช้ทรัพยากรเป็นเปอร์เซ็นต์สูง คุณอาจพิจารณาแก้ไขซอร์สโค้ด หรือใช้ทางเลือกอื่น
หากคุณมีคำถามเกี่ยวกับบทความนี้หรือข้อเสนอแนะในการปรับปรุงเราทุกคนยินดีรับฟัง โปรดติดต่อเราโดยใช้แบบฟอร์มความคิดเห็นด้านล่าง