PDA

View Full Version : CPU usage چیه؟



mountainking
یک شنبه 28 مرداد 1386, 00:55 صبح
سلام.
سی پی یو یوزیجی که تو تسک منجر برای هر پراسس مقداری داره چیه؟ به چه معنیه؟ و با چه توابعی از ای پی آی ویندوز میشه میزان سی پی یو یوزیج مربوط به یه پراسس رو بدست آورد؟

illegalyasync
دوشنبه 29 مرداد 1386, 01:21 صبح
NtQuerySystemInformation
بقیشو خودت در میاری دیگه ؟

حالا چه ربطی به اسمبلی داره ؟

mountainking
شنبه 17 شهریور 1386, 13:32 عصر
من با NtQuerySystemInformation فقط تونستم کل زمانی رو که سیتم تو مد کرنل یا یوزر یا idle بوده رو بدست بیارم و نه همین داده ها در مورد یه پراسس خاص! اگه راهی با این تابع لطف کنین بگین! جواب سوال من فکر کنم getprocesstimes بود. حالا یه سوال دیگه برام مطرح شده و اونم اینه که چه طور میشه برنامه کل زمان اجرا در حالت یوزر یا کرنل باشه ولی تقریبا کل cpu usage رو به خودش اختصاص نده؟

Inprise
یک شنبه 18 شهریور 1386, 02:33 صبح
بهترین راه User Modeگرفتن CPU Usage استفاده از Performance Counters (http://www.codeproject.com/system/cpuusage.asp) هست

mountainking
یک شنبه 18 شهریور 1386, 12:58 عصر
از لینکتون ممنونم آقای اینپرایز. بله من هم با استفاده از یه فاصلهء زمانی دلخواه CPUUsage رو بدست میارم. من سوالم بدست آوردن میزان سی پی یو یوزیج مربوط به یه پراسس خاص بود که illegaly گفت با NtQuerySystemInformation بدست بیارم. من با تابع GetProcessTimes حلش کردم. حالا 2 مورد جدید مطرح کردم.
1) اینکه آیا با NtQuerySystemInformation هم میشه سی پی یو یوزیج مربوط به یه پراسس خاص رو بدست آورد؟
2)چه طور میشه برنامه کل زمان اجرا در حالت یوزر یا کرنل باشه ولی تقریبا کل cpu usage رو به خودش اختصاص نده؟

Inprise
یک شنبه 18 شهریور 1386, 18:18 عصر
چه طور میشه برنامه کل زمان اجرا در حالت یوزر یا کرنل باشه ولی تقریبا کل cpu usage رو به خودش اختصاص نده؟

سوالت رو دقیقا نفهمیدم . توضیح بده . اما برنامه User Mode نمیتونه تمام مدت در User Mode باشه و طبیعتا" بخاطر Call Chainای که با ویندوز داره زمان کرنل هم مصرف میکنه ، اما برنامه Kernel Mode میتونه تمام مدت در کرنل باشه .

mountainking
سه شنبه 20 شهریور 1386, 13:06 عصر
مثلا کد زیر رو تو دلفی کامپایل کنید و بعد اجرا میبینید که برنامه تمام مدت در حالت یوزر و اگه سیستم یه پراسسور داشته باشه تقریبا کل سی پی یو یوزیج به این برنامه اختصاص پیدا میکنه.

program per;
begin
while true do
begin
end;
end.

خالا امکانش هست که یه برنامه کل زمان اجرا رو مثل برنامه بالا در حالت یوزر باشه ولی کل سی پی یو یوزیج بهش اختصاص پیدا نکنه؟

Inprise
سه شنبه 20 شهریور 1386, 13:30 عصر
بعد اجرا میبینید که برنامه تمام مدت در حالت یوزر و

نه چنین چیزی نمیبینیم . به جواب قبلی مراجعه کن .


امکانش هست که یه برنامه کل زمان اجرا رو مثل برنامه بالا در حالت یوزر باشه ولی کل سی پی یو یوزیج بهش اختصاص پیدا نکنه؟

- در هر تاپیک یک سوال بپرس

الان ویندوز API یا مکانیزم مشخصی برای تقسیم بندی و تسهیم مصرف پردازنده نداره ؛ اما روشهای جانبی ای هست که میشه تا حدود به این هدف نزدیک شد . روش خوب استفاده از Job های ویندوز هست ، به توابع خانواده CreateJobObject ( و اگه حوصله داری فصل ششم کتاب Windows Internals ) مراجعه کن . یه راه هم محاسبه میزان زمان پردازنده در Thread های فعال و متوقف کردن و دوباره فعال کردن اونها برای رسیدن به معدل در نظر گرفته شده در یک زمان نسبتا طولانی است که مثلا برنامه های BES و ThreadMaster از همین روش استفاده میکنن ، که ساده تر و غیر دقیق تر هست .