กำหนด CPU ที่กระบวนการกำลังทำงานอยู่


19

ใช้ Sysinternals 'Process Explorer มีคอลัมน์ที่สามารถใช้เพื่อระบุ CPU ที่กระบวนการกำลังทำงานอยู่หรือไม่? ถ้าไม่มีคอลัมน์มีวิธีอื่นอีกไหม?



3
@DavidPostill - คำตอบที่ดีที่สุดเพียงชี้ไปที่เว็บเพจของ Process Explorer คำถามของฉันคือ: ได้รับกระบวนการสำรวจฉันจะตรวจสอบกระบวนการหลักที่เริ่มต้นได้อย่างไร
rory.ap

คำตอบ:


47

ขอในปี 2005 :

ฉันประทับใจมากกับฟีเจอร์ที่รวมอยู่ใน Process Explorer แต่ต้องการเห็นตัวเลือกในการแสดงความสัมพันธ์ซีพียูแต่ละกระบวนการในหน้าต่างหลักเป็นคอลัมน์สลับ

ไม่มีการตอบสนอง

ร้องขอในปี 2007 :

ขอบคุณสำหรับสุดยอดยูทิลิตี้ คำขอของฉันคือการเพิ่มตัวเลือกคอลัมน์เพื่อประมวลผล explorer เพื่อแสดงความสัมพันธ์ของ CPU แค่นั้นแหละ.

ไม่มีการตอบสนอง

ที่คล้ายกันที่กล่าวถึงในปี 2013 :

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

เรื่องย่อพื้นฐาน: ไม่สามารถทำได้

เธรดคือสิ่งที่ถูกส่งไปยังแกนประมวลผลไม่ใช่กระบวนการ กระบวนการที่ทันสมัยส่วนใหญ่มีหลายเธรด

หากคุณตั้งค่าความสัมพันธ์สำหรับกระบวนการด้วยตนเองดังนั้นเธรดทั้งหมดสำหรับกระบวนการควรติดกับโปรเซสเซอร์เดียว เมื่อคุณตั้งค่าด้วยตนเองคุณควรทราบว่า CPU นั้นเปิดอยู่ ;)

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

บางทีลองดูคำถามเกี่ยวกับ SU เหล่านี้ดูเพิ่มเติม:

นอกจากนี้จาก StackOverflow:

ตอนนี้ถ้าคุณเขียนโปรแกรมคุณสามารถใช้GetCurrentProcessorNumberซึ่งรายงานตัวประมวลผลปัจจุบันที่ใช้โดยเธรดที่เรียกใช้ฟังก์ชัน

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

ข้อมูลเพิ่มเติม:


3
คำตอบที่ดี ... :)
DavidPostill

@DavidPostill - เห็นด้วย
rory.ap

คำตอบที่ยอดเยี่ยมเพราะเป็นคำตอบของคำถามที่เฉพาะเจาะจงได้รับประวัติและ whys และช่วยให้เข้าใจแนวคิด
สมิเธอร์ส

1
ทั้งบน Linux และ Windows เป็นไปได้ที่จะตั้งค่าความสัมพันธ์แบบต่อเธรด อย่างไรก็ตามสิ่งนี้ไม่ค่อยมีประโยชน์เท่าไรนักดังนั้นจึงไม่ค่อยมีใครทำดังนั้นจึงแสดงความสัมพันธ์ต่อเธรดในโปรแกรมตรวจสอบทั่วไปหากมีการตั้งค่าที่ไร้ประโยชน์มากกว่าหรือน้อยกว่า - ส่วนใหญ่จะปล่อยให้เคอร์เนลตามที่ต้องการ
Bob

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

8

สิ่งนี้สามารถทำได้โดยการจับร่องรอย xperf และเปิดด้วยWindows Performance Analyzer (WPA.exe) จาก Windows Performance Toolkit ที่นี่คุณสามารถเพิ่มคอลัมน์ CPU เพื่อดูว่า CPU (Core) ใดที่กระบวนการกำลังทำงานอยู่:

ป้อนคำอธิบายรูปภาพที่นี่


ดี มันแสดงรายการกระบวนการเดียวกันภายใต้แต่ละ CPU (ถ้าใช้มากกว่าหนึ่งรายการ) หรือไม่ เนื่องจากใช้การติดตาม xperf ที่บันทึกไว้นั่นหมายความว่าไม่ใช่การรายงานสด
Ƭᴇcʜιᴇ007

@ Ƭᴇcʜιᴇ007 ETW events สามารถใช้งานได้ที่ runtime การเขียนลงในไฟล์ ETL เป็นเพียงวิธีเดียว ใช่มันจะแสดงรายการกระบวนการภายใต้ CPU ทั้งสองเมื่อใช้ทั้งสอง
magicandre1981
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.