2010-10-06 10 views
9

मुझे यूजर स्पेस कोड का एक टुकड़ा मिला है जो सीपीयू उपयोग प्राप्त करने के लिए पार्सिंग/proc/pID/task/tID/stat है। मैं प्रति सेकंड jiffies प्राप्त करने के लिए एचजेड का उपयोग कर सकते हैं, लेकिन यह कोड एक और मशीन पर जा सकता है जिसमें एक अलग कॉन्फ़िगर किया गया मान है। क्या रनटाइम पर उपयोगकर्ता स्पेस से एचजेड का मूल्य प्राप्त करने का कोई तरीका है?jiffies को सेकंड में कनवर्ट करें

+1

डुप्लिकेट: http://stackoverflow.com/questions/2731463/converting-jiffies-to-milli-seconds – Daenyth

+2

यह डुप्लिकेट नहीं है क्योंकि मैं एचजेड परिभाषा का उपयोग नहीं कर सकता। –

उत्तर

6

आप इसे sysconf (_SC_CLK_TCK) से प्राप्त संख्या से विभाजित करते हैं।

हालांकि, मुझे लगता है कि यह शायद हमेशा 100 लिनक्स के तहत वास्तविक घड़ी टिक की परवाह किए बिना है, यह हमेशा 100

देखें आदमी proc के रूप में यूज़रस्पेस के समक्ष प्रस्तुत किया है (5)।

+0

मैंने पढ़ा था कि 100 हमेशा उपयोगकर्ताओं के लिए प्रस्तुत किया जाता है ... लेकिन सुनिश्चित नहीं किया गया था कि यूजर स्पेस के रूप में गिना जाता है :) –

+0

मुझे यकीन नहीं है कि मैं समझता हूं: क्या इसका मतलब यह है कि एचजेड वास्तव में प्रश्नकर्ता नहीं चाहता था? –

+1

एचजेड वह नंबर है जो मैं चाहता था ... लेकिन यह निरंतर संकलित है। जब तक मैं उसी मशीन पर चल रहा हूं जिसके लिए मैं संकलित हूं ... सब अच्छा है। लेकिन अगर मैं बिना किसी मशीन के दूसरी मशीन पर जाता हूं तो इसका गलत मूल्य हो सकता है। –

0

"ps" कमांड के स्रोत में एचजेड के मूल्य प्राप्त करने के लिए फ़ाइल <linux/param.h> शामिल है।

उन्होंने यह भी 17 नंबर के साथ एक "ELF नोट" के लिए देखो (sysinfo.c) हर्ट्ज का मान ज्ञात करने के लिए:

//extern char** environ; 

/* for ELF executables, notes are pushed before environment and args */ 
static unsigned long find_elf_note(unsigned long findme){ 
    unsigned long *ep = (unsigned long *)environ; 
    while(*ep++); 
    while(*ep){ 
    if(ep[0]==findme) return ep[1]; 
    ep+=2; 
    } 
    return NOTE_NOT_FOUND; 
} 
[...] 
hz = find_elf_note(17); 

मैं यह मेरे लिए अजीब लग रही है के बाद से ELF नोट स्वीकार करना होगा एक वर्ग में परिभाषित किया गया है संकलन के दौरान।

2

MarkR's जवाब के पीछे का गणित स्पष्ट करने के लिए:

sysconf(_SC_CLK_TCK) आप jiffies per second मिल जाएगा। सेकंड की कुल संख्या प्राप्त करने के लिए sysconf(_SC_CLK_TCK) से प्राप्त होने वाली संख्या से jiffies को विभाजित करें।

 jiffies      jiffies    seconds 
-------------------- =  ----------------- = ------- = seconds 
sysconf(_SC_CLK_TCK)   (jiffies/second)    1 
0

शेल-स्क्रिप्टिंग आदि के लिए, कमांड लाइन से getconf CLK_TCK का उपयोग करें। उस पैरामीटर को पर्यावरण चर या कमांड लाइन पर पास करने के लिए इसका उपयोग कर सकते हैं।

main(int argc, char **argv) { 
    unsigned long clk_tck = atol(
     getenv("CLK_TCK") || "0" 
    ) || sysconf(_SC_CLK_TCK) ; 
    ... /* your code */ 

इस रूप में ऊपर sysconf का उपयोग करता है, लेकिन आप एक वातावरण चर, उपरोक्त आदेश के साथ सेट किया जा सकता है, जिसमें उसे ओवरराइड करने देता है।

संबंधित मुद्दे