NdisGetCurrentProcessorCounts

VOID

  NdisGetCurrentProcessorCounts(

    OUT PULONG  pIdleCount,

    OUT PULONG  pKernelAndUser,

    OUT PULONG  pIndex

    );

NdisGetCurrentProcessorCountsÇÔ¼ö´Â µå¶óÀ̹ö°¡ ÁöÁ¤ÇÑ Å¸ÀÓ ±â°£¿¡´ëÇØ CPUÀÌ¿ëÀ» °áÁ¤ÇϱâÀ§ÇØ »ç¿ëÇÒ¼ö ÀÖ´Â ÇöÀç ÇÁ·Î¼¼¼­¿¡´ëÇÑ Ä«¿îÆ®¸¦ ¸®ÅÏÇÑ´Ù.

¸Å°³º¯¼ö

pIdleCount
ÀÌÇÔ¼ö°¡ ½Ã½ºÅÛÀÌ ºÎÆÃµÈÀÌÈÄ·Î ´©ÀûµÇ´Â Áö¿¬½Ã°£À» ¸®ÅÏÇϴ°Ϳ¡´ëÇØ È£ÃâÀÚ ÇÒ´ç º¯¼öÀÇ Æ÷ÀÎÅÍ.

pKernelAndUser
ÀÌÇÔ¼ö°¡ ½Ã½ºÅÛÀÌ ºÎÆÃµÈ ÀÌÈÄ·Î ÇÁ·Î¼¼¼­¿¡´ëÇÑ ´©ÀûµÇ´Â ÇÁ·Î¼¼½Ì ½Ã°£(Ä¿³Î¸ðµå ½Ã°£ + À¯Àú¸ðµå ½Ã°£)À» ¸®ÅÏÇϴ°Ϳ¡´ëÇÑ È£ÃâÀÚ ÇÒ´ç º¯¼öÀÇ Æ÷ÀÎÅÍ.

pIndex
ÀÌÇÔ¼ö°¡ ¸Ó½Å ³»ÀÇ ÇÁ·Î¼¼¼­¸¦ È®ÀÎÇÏ´Â ZERO-BASEÀ妽º¸¦ ¸®ÅÏÇϴ°Ϳ¡´ëÇÑ È£ÃâÀÚ ÇÒ´ç º¯¼ö.

ÁÖ¼®

NdisGetCurrentProcessorCountsÇÔ¼ö´Â È£ÃâÀÚ°¡ ÇöÀç ÇÁ·Î¼¼¼­¿¡´ëÇØ CPU»ç¿ëÀ» °áÁ¤ÇϱâÀ§ÇØ »ç¿ëÇÒ¼ö ÀÖ´Â Áö¿¬°ú CPU-»ç¿ë Ä«¿îÆ®¸¦ ¸®ÅÏÇÑ´Ù. ¾ó¸¶³ª CPU°¡ ·ÎµåµÇ´ÂÁö¸¦ °¡¸®Å°´Â CPU»ç¿ë °ªÀº ÀÌ ÇÔ¼ö°¡ È£ÃâµÈ ±× ½ÃÁ¡ºÎÅÍÀÌ´Ù. ¸¸¾à CPU°¡ ¹«°Ì°Ô ·ÎµåµÆ´Ù¸é, ±×·± µå¶óÀ̹ö´Â µå¶óÀ̹öÀÇ ÆÛÆ÷¸Õ½º¸¦ Çâ»ó½Ã۱âÀ§ÇÑ ¾î¶² ¿¬»êÀ» ´Ù·ê ¹æ¹ýÀ» º¯È­½Ãų¼ö ÀÖ´Ù.

µå¶óÀ̹ö´Â ŸÀÌ¸Ó ÇÔ¼ö·Î Á¤±âÀûÀ¸·Î NdisGetCurrentProcessorCountsÇÔ¼ö¸¦ È£Ãâ ÇÒ¼ö ÀÖ´Ù. ±× µå¶óÀ̹ö´Â ´ÙÁßÀÇ Å¸ÀÌ¸Ó °£°Ý¿¡´ëÇÑ CPU»ç¿ëÀ» °áÁ¤ÇϱâÀ§ÇØ ´ÙÀ½ÀÇ °è»êÀ» »ç¿ëÇÒ¼ö ÀÖ´Ù.:


CpuUsage = 100-100*(Idle - Idle[n]/((Idle - Idle[n]) \

    + (KernelAndUser - KernelAndUser[n]));

where:

  • CpuUsage´Â ÃÑ ½Ã°£ °£°ÝÀÇ ÆÛ¼¾Æ®·Î½á CPU»ç¿ëÀÌ´Ù.
  • IdleÀº NdisGetCurrentProcessorCountsÇÔ¼öÀÇ ¸¹Àº ÇöÀç È£Ãâ¿¡ÀÇÇÑ ¸®ÅÏµÈ IdleCountÀÌ´Ù.
  • Idle[n]Àº ÀÌÀüÀÇ È£Ãâ¿¡ÀÇÇØ ¸®ÅÏµÈ IdlelCount°ªÀÌ°í ¹è¿­ÀÇ n¹øÂ° ¿ä¼Ò·Î½á ÀúÀåµÈ´Ù.
  • KernelandUser´Â ´ëºÎºÐÀÇ NdisGetCurrentProcessorCountsÇÔ¼öÀÇ ÇöÀç È£Ãâ¿¡ÀÇÇØ ¸®ÅÏµÈ KernelAndUser°ªÀÌ´Ù.
  • KernelandUser[n]´Â ÀÌÀüÀÇ È£Ãâ¿¡ÀÇÇØ ¸®ÅÏµÈ KernelandUserÀÇ °ªÀÌ°í ¹è¿­ÀÇ n¹øÂ°·Î½á ÀúÀåµÈ´Ù.
¿¹¸¦µé¾î, CPU»ç¿ëÀÇ ÆÛ¼¾Æ®°¡ Ä¿Áü¿¡µû¶ó, ¹Ì´ÏÆ÷Æ®´Â ´Ð¿¡´ëÇÑ ÀÎÅÍ·´Æ®¸¦ µð½º¿¡À̺í ÇÒ¼ö ÀÖ°í ´ÐÀÇ »óŸ¦ POLLINGÇϱâÀ§ÇØ ÀüȯÇÒ ¼ö ÀÖ´Ù. ÀÌ ¹æ¹ýÀº ´ÐÀÌ ¸¹Àº ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÏ´Â µ¿¾È ÀÎÅÍ·´Æ® ÇÁ·Î¼¼½Ì ¿À¹öÇìµå¸¦ Á¦°ÅÇϴ°Ϳ¡ÀÇÇØ ³ôÀº ³×Æ®¿÷ Æ®·¡ÇȱⰣ µ¿¾È¿¡ ´õ ³ôÀº ÆÛÆ÷¸Õ½º¸¦ ³º´Â´Ù. ´ë½Å, ±×·± ´Ð µå¶óÀ̹öÀÇ POLLING MiniportTimerÇÔ¼ö´Â Áö½Ã¸¦ ¸¸µé°í ³×Æ®¿÷ Æ®·¡ÇÈÀÌ ´Ù½Ã °¨¼Ò ÇÒ¶§±îÁö º¸³»±â¸¦ ¿Ï·áÇÑ´Ù. NdisGetCurrentProcessorCountsÇÔ¼öÀÇ ÁÖ±âÀûÀΠȣÃâÀº CPU»ç¿ëÀÌ ´Ù½Ã ³·¾ÆÁö´Â °æÇâÀÌ ÀÖ°í ±×·± µå¶óÀ̹ö´Â ´Ð¿¡ ´ëÇÑ ÀÎÅÍ·´Æ®¸¦ ´Ù½Ã Àο¡À̺íÇϰí POLLING MiniportTimerÇÔ¼ö¸¦ Ãë¼ÒÇÑ´Ù.

NdisGetCurrentProcessorCountsÇÔ¼öÀÇ È£ÃâÀÚ´Â IRQL <= DISPATCH_LEVEL¿¡¼­ µ¿À۵Ǿî¾ß¸¸ ÇÑ´Ù.