फ्रीबीएसडी पर सी में, सीपीयू उपयोग को कैसे एक्सेस करता है?सी से सिस्टम कॉल का उपयोग करके, मैं सीपीयू का उपयोग कैसे प्राप्त करूं?
मैं HTTP रीडायरेक्ट को संभालने के लिए कुछ कोड लिख रहा हूं। यदि सीपीयू लोड एक FReeBSD सिस्टम पर थ्रेसहोल्ड से ऊपर चला जाता है, तो मैं क्लाइंट अनुरोधों को पुनर्निर्देशित करना चाहता हूं। मैन पेजों को देखकर, kvm_getpcpu() सही जवाब प्रतीत होता है, लेकिन मैन पेज (जो मैंने पढ़ा है) उपयोग को दस्तावेज नहीं करता है।
कोई सुझाव या पॉइंटर्स का स्वागत होगा - धन्यवाद!
यहां जवाब पढ़ने के बाद, मैं नीचे के साथ आने में सक्षम था। खराब दस्तावेज के कारण, मुझे 100% यकीन नहीं है कि यह सही है, लेकिन शीर्ष सहमत है। प्रत्येक उत्तर देने वाले का धन्यवाद।
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#include <unistd.h>
#define CP_USER 0
#define CP_NICE 1
#define CP_SYS 2
#define CP_INTR 3
#define CP_IDLE 4
#define CPUSTATES 5
int main()
{
long cur[CPUSTATES], last[CPUSTATES];
size_t cur_sz = sizeof cur;
int state, i;
long sum;
double util;
memset(last, 0, sizeof last);
for (i=0; i<6; i++)
{
if (sysctlbyname("kern.cp_time", &cur, &cur_sz, NULL, 0) < 0)
{
printf ("Error reading kern.cp_times sysctl\n");
return -1;
}
sum = 0;
for (state = 0; state<CPUSTATES; state++)
{
long tmp = cur[state];
cur[state] -= last[state];
last[state] = tmp;
sum += cur[state];
}
util = 100.0L - (100.0L * cur[CP_IDLE]/(sum ? (double) sum : 1.0L));
printf("cpu utilization: %7.3f\n", util);
sleep(1);
}
return 0;
}
धन्यवाद - यह बहुत उपयोगी था! –