อ่าน 3 นาที
พิน (โปรแกรมคอมพิวเตอร์)
Pin คือแพลตฟอร์มสำหรับสร้างเครื่องมือวิเคราะห์ เครื่องมือของ Pin ประกอบด้วยรูทีนการตรวจสอบ รูทีนการวิเคราะห์ และ รูทีน เรียกกลับ...
พิน (โปรแกรมคอมพิวเตอร์)
| เข็มหมุด | |
|---|---|
| นักพัฒนา | อินเทล |
| เวอร์ชันเสถียร | 4.2 / 15 มีนาคม 2569 |
| ระบบปฏิบัติการ | ลินุกซ์ , วินโดวส์ , มอสซาเรลล่า |
| แพลตฟอร์ม | IA-32 , x86-64 , Intel Xeon Phi |
| พิมพ์ | กรอบงานการวัดผล , โปรไฟล์เลอร์ |
| ใบอนุญาต | ซอฟต์แวร์ นี้เป็นกรรมสิทธิ์ ของIntel และให้ใช้งานได้ฟรีภายใต้สัญญาอนุญาตซอฟต์แวร์แบบง่ายของ Intel |
| เว็บไซต์ | www.intel.com/software/pintool |
Pinคือแพลตฟอร์มสำหรับสร้างเครื่องมือวิเคราะห์ เครื่องมือของ Pin ประกอบด้วยรูทีนการตรวจสอบ รูทีนการวิเคราะห์ และรูทีน เรียกกลับ รูทีนการตรวจสอบจะถูกเรียกเมื่อโค้ดที่ยังไม่ได้คอมไพล์ใหม่กำลังจะถูกเรียกใช้งาน และช่วยให้สามารถแทรกรูทีนการวิเคราะห์ได้ รูทีนการวิเคราะห์จะถูกเรียกเมื่อโค้ดที่เกี่ยวข้องกับรูทีนเหล่านั้นถูกเรียกใช้งาน รูทีนเรียกกลับจะถูกเรียกเฉพาะเมื่อตรงตามเงื่อนไขเฉพาะ หรือเมื่อเกิดเหตุการณ์บางอย่างขึ้น Pin มีอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API) ที่ครอบคลุมสำหรับการตรวจสอบในระดับนามธรรมต่างๆ ตั้งแต่คำสั่งเดียวไปจนถึงโมดูลไบนารีทั้งหมด นอกจากนี้ยังรองรับการเรียกกลับสำหรับเหตุการณ์ต่างๆ มากมาย เช่น การโหลดไลบรารี การเรียกใช้ระบบ สัญญาณ/ข้อยกเว้น และเหตุการณ์การสร้างเธรด
ใน ปี 2020 ได้รับรางวัลซอฟต์แวร์ภาษาโปรแกรมจากACM SIGPLAN [ 1 ]
Pin ดำเนินการตรวจสอบโดยควบคุมโปรแกรมทันทีหลังจากที่โหลดเข้าสู่หน่วยความจำ จากนั้นคอมไพล์ใหม่แบบทันที (JIT) ส่วนเล็ก ๆ ของโค้ดไบนารีโดยใช้ Pin ก่อนที่จะรัน คำสั่งใหม่เพื่อทำการวิเคราะห์จะถูกเพิ่มเข้าไปในโค้ดที่คอมไพล์ใหม่ คำสั่งใหม่เหล่านี้มาจาก Pintool มีการใช้เทคนิคการเพิ่มประสิทธิภาพมากมายเพื่อให้ได้เวลาการทำงานและการใช้หน่วยความจำที่น้อยที่สุดเท่าที่จะเป็นไปได้ ณ เดือนมิถุนายน 2010 ค่าใช้จ่ายพื้นฐานเฉลี่ยของ Pin คือ 30 เปอร์เซ็นต์ (โดยไม่ใช้ Pintool) [ 2 ]
คุณสมบัติ
โหมดการวัด
Pin รองรับโหมดการตรวจสอบสองโหมด ได้แก่ โหมด JIT และโหมด Probe โหมด JIT รองรับคุณสมบัติทั้งหมดของ Pin ในขณะที่โหมด Probe รองรับคุณสมบัติที่จำกัด แต่เร็วกว่ามาก โดยแทบไม่เพิ่มภาระให้กับเวลาการทำงานของโปรแกรม โหมด JIT ใช้คอมไพเลอร์แบบทันเวลาเพื่อคอมไพล์โค้ดโปรแกรมทั้งหมดใหม่และแทรกการตรวจสอบ ในขณะที่โหมด Probe ใช้โค้ดแทรมโพลีนสำหรับการตรวจสอบ
ความเป็นอิสระของแพลตฟอร์ม
Pin ได้รับการออกแบบมาเพื่อความสามารถในการพกพา ของเครื่องมือ และถึงแม้ว่า JIT จะคอมไพล์จาก ISA หนึ่งไปยัง ISA เดียวกัน (และไม่ได้ใช้การแสดงผลระดับกลาง เดียว สำหรับโค้ดทั้งหมด) API ส่วนใหญ่ก็เป็นอิสระจากสถาปัตยกรรมและระบบปฏิบัติการนอกจากนี้ยังได้รับการออกแบบให้สามารถพกพาได้เอง โดยแยกโค้ดเฉพาะแพลตฟอร์มออกจากโค้ดทั่วไปอย่างระมัดระวัง ทำให้สามารถปรับ Pin ให้เข้ากับแพลตฟอร์มใหม่ได้อย่างรวดเร็ว ประมาณครึ่งหนึ่งของโค้ดเป็นโค้ดทั่วไป และส่วนที่เหลือขึ้นอยู่กับสถาปัตยกรรมหรือระบบปฏิบัติการ[ 3 ]
การเพิ่มประสิทธิภาพ
Pin ใช้เทคนิคมากมายในการปรับปรุงประสิทธิภาพของโค้ดสำหรับการตรวจสอบและวิเคราะห์ โดยใช้เทคนิคต่างๆ เช่นการอินไลน์การวิเคราะห์ความมีชีวิตและการจัดเก็บรีจิสเตอร์ อย่างชาญฉลาด Pin จะทำการปรับปรุงประสิทธิภาพเหล่านี้โดยอัตโนมัติเมื่อเป็นไปได้ โดยไม่ต้องให้ผู้ใช้เพิ่มโค้ดใดๆ เพิ่มเติมเพื่อให้สามารถอินไลน์ได้ อย่างไรก็ตาม การปรับปรุงประสิทธิภาพบางอย่างยังคงต้องการคำแนะนำจากผู้ใช้ และโครงสร้างโค้ดบางอย่างก็ง่ายต่อการอินไลน์มากกว่าโครงสร้างอื่นๆ นอกจากนี้ยังมีการใช้การเชื่อมโยงโดยตรงของส่วนโค้ดที่คอมไพล์แบบ JIT ซึ่งเป็นเทคนิคที่เรียกว่าการเชื่อมโยงร่องรอย (trace linking ) และ การกระทบยอดการผูก รีจิสเตอร์ (register binding reconciliation ) ซึ่งช่วยลดการจัดเก็บและการแมปใหม่ของรีจิสเตอร์ให้น้อยที่สุด
ใช้งานง่าย
API และการใช้งานของ Pin มุ่งเน้นไปที่การทำให้การเขียนเครื่องมือ Pin ทำได้ง่าย Pin รับผิดชอบอย่างเต็มที่ในการรับรองว่าโค้ดการตรวจสอบจากเครื่องมือ Pin จะไม่ส่งผลกระทบต่อสถานะของแอปพลิเคชัน นอกจากนี้ API ยังช่วยให้โค้ดการตรวจสอบสามารถร้องขอข้อมูลหลายส่วนจาก Pin ได้ ตัวอย่างเช่น โค้ดการตรวจสอบในเครื่องมือ Pin สามารถใช้ API ของ Pin เพื่อรับที่อยู่หน่วยความจำที่ถูกเข้าถึงโดยคำสั่ง โดยไม่ต้องตรวจสอบคำสั่งนั้นอย่างละเอียด
เครื่องมือ
มีเครื่องมือพินหลายชนิดที่ใช้สำหรับงานต่างๆ กัน
- ส่วนประกอบต่างๆ ของIntel Parallel Studioใช้ pintools อย่างมากสำหรับการดีบักหน่วยความจำ การวิเคราะห์ประสิทธิภาพ การวิเคราะห์ความถูกต้องของการทำงาน แบบมัลติเธรดและการเตรียมการสำหรับการประมวลผลแบบขนาน
- Intel Software Development Emulatorเป็นเครื่องมือขนาดเล็กที่ช่วยให้สามารถพัฒนาแอปพลิเคชันโดยใช้ส่วนขยายชุดคำสั่งที่ยังไม่ได้นำมาใช้ในฮาร์ดแวร์ในปัจจุบัน
- CMP$IMเป็นโปรไฟล์แคชที่สร้างขึ้นโดยใช้ pin [ 4 ]
- PinPlayช่วยให้สามารถบันทึกและเล่นซ้ำการทำงานของโปรแกรมมัลติเธรดภายใต้ pin ได้อย่างแม่นยำ การบันทึกการทำงานของโปรแกรมช่วยให้นักพัฒนาสามารถเอาชนะความไม่แน่นอนที่มีอยู่ในมัลติเธรดได้ [ 5 ]
- โปรแกรม Pin มาพร้อมกับเครื่องมือตัวอย่างมากมายที่ใช้ประโยชน์จากความสามารถของมัน เครื่องมือเหล่านี้ได้รับอนุญาตภายใต้ใบอนุญาตแบบ BSD
ทางเลือกอื่นนอกเหนือจากเครื่องมือปักหมุด
มีเครื่องมืออื่นๆ อีกมากมายที่ใช้ในการรวบรวมการใช้ทรัพยากรของโปรแกรมที่กำลังทำงานอยู่บนระบบ เช่นเครื่องมือ strapon ของBell Lab และเครื่องมือ Dyninstเป็นต้น เครื่องมือของ Bell Labใช้เทคโนโลยี strap on ซึ่งเรียกใช้เครื่องมือเพื่อรวบรวมทรัพยากรไปพร้อมกับโปรแกรม แต่เครื่องมือนี้ใช้งานได้กับโปรแกรมที่อนุญาตให้โปรแกรมอื่นๆ ทำงานพร้อมกันได้เท่านั้น[ 6 ]นอกจากนี้ เครื่องมือ Dyninst ยังใช้การเขียนไบนารีใหม่ของคำสั่งที่สามารถเรียกใช้งานได้และคำสั่งที่ใช้งานได้ภายในโปรแกรมเพื่อตรวจสอบการใช้ทรัพยากร และมีประสิทธิภาพมาก อย่างไรก็ตาม มันไม่เสถียรมากเนื่องจากเป็นเครื่องมือที่ค่อนข้างใหม่และอาจเกิดข้อผิดพลาดกับโปรแกรมขนาดใหญ่[ 7 ] สุดท้าย เครื่องมือ Intel Pin ใช้การตรวจสอบไบนารีแบบคงที่และเรียกใช้โปรแกรมเป็นส่วนหนึ่งของตัวเองในขณะที่ติดตามทรัพยากรทั้งหมด[ 8 ]แนวทางนี้เหมาะสมกว่าสำหรับโปรแกรมป้องกันไวรัส เนื่องจากสามารถเรียกใช้กระบวนการทั้งหมดภายใต้ตัวเองได้อย่างง่ายดาย และสามารถฆ่าโปรแกรมได้หากถึงขีดจำกัดสูงสุดที่กำหนดโดยโปรแกรมป้องกันไวรัส
ดูเพิ่มเติม
หมายเหตุ
- ^ " รางวัลซอฟต์แวร์ภาษาโปรแกรม " www.sigplan.org
- ^การวิเคราะห์โปรแกรมแบบขนานด้วย Pin
- ^ปักหมุด: การสร้างเครื่องมือวิเคราะห์โปรแกรมแบบกำหนดเองด้วยการวัดค่าแบบไดนามิก
- ^ CMP$im: โปรแกรมจำลองแคชมัลติคอร์แบบเรียลไทม์โดยใช้พิน
- ^ PinPlay: เฟรมเวิร์กสำหรับการเล่นซ้ำแบบกำหนดได้และการวิเคราะห์ที่ทำซ้ำได้ของโปรแกรมแบบขนาน
- ^ Gupta, Chandrashekhar (2007). "การสร้างผลิตภัณฑ์และโซลูชันที่ปลอดภัย". Bell Labs Technical Journal . 12 (3): 21-38. doi : 10.1002/bltj.20247 . S2CID 30412754 .
- ^ Lee, Schulz (2007). "การวัดค่าไบนารีแบบไดนามิกและการรวมข้อมูลบนระบบขนาดใหญ่" วารสารการ เขียนโปรแกรมแบบขนานนานาชาติ35 (3): 207– 232. doi : 10.1007/s10766-007-0036-3 . S2CID 6653468 .
- ^ Bach, M.; Charney, M.; Cohn, R.; Demikhovsky, E.; Devor, T.; Hazelwood, K.; Jaleel, A.; Luk, Chi-Keung; Lyons, G. (มีนาคม 2010). "การวิเคราะห์โปรแกรมแบบขนานด้วย PIN". Computer . 43 (3): 34– 41. doi : 10.1109/MC.2010.60 . ISSN 0018-9162 . S2CID 15155077 .
ลิงก์ภายนอก
- ปักหมุด: หน้าหลักของเครื่องมือตรวจสอบไบนารีแบบไดนามิก
- Pinheadsคือรายชื่อผู้รับจดหมายสำหรับชุมชนผู้ใช้ Pin
- การตรวจจับข้อผิดพลาดแบบอ่านก่อนเขียน (แบบเดียวกับ Valgrind)
- Pin++คือเฟรมเวิร์กสำหรับการสร้าง Pintools
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ พิน (โปรแกรมคอมพิวเตอร์)
Pin คือแพลตฟอร์มสำหรับสร้างเครื่องมือวิเคราะห์ เครื่องมือของ Pin ประกอบด้วยรูทีนการตรวจสอบ รูทีนการวิเคราะห์ และ รูทีน เรียกกลับ...
โหมดการวัด
Pin รองรับโหมดการตรวจสอบสองโหมด ได้แก่ โหมด JIT และโหมด Probe โหมด JIT รองรับคุณสมบัติทั้งหมดของ Pin ในขณะที่โหมด Probe รองรับคุณสมบัติที่จำกัด แต่เร็วกว่ามาก โดยแทบไม่เพิ่มภาระให้กับเวลาการทำงานของโปรแกรม โหมด JIT...
ความเป็นอิสระของแพลตฟอร์ม
Pin ได้รับการออกแบบมาเพื่อ ความสามารถในการพกพา ของเครื่องมือ และถึงแม้ว่า JIT จะคอมไพล์จาก ISA หนึ่งไปยัง ISA เดียวกัน (และไม่ได้ใช้ การแสดงผลระดับกลาง เดียว สำหรับโค้ดทั้งหมด) API ส่วนใหญ่ก็เป็นอิสระจากสถาปัตยกรรมและ ระบบปฏิบัติการ...
การเพิ่มประสิทธิภาพ
Pin ใช้เทคนิคมากมายในการปรับปรุงประสิทธิภาพของโค้ดสำหรับการตรวจสอบและวิเคราะห์ โดยใช้เทคนิคต่างๆ เช่น การอินไลน์ การ วิเคราะห์ความมีชีวิต และ การจัดเก็บรีจิสเตอร์ อย่างชาญฉลาด Pin จะทำการปรับปรุงประสิทธิภาพเหล่านี้โดยอัตโนมัติเมื่อเป็นไปได้...