How is run queue length computed in linux proc filesystem
As gcla said you cat use
cat /proc/loadavg
to read loadavarage from from kernel - but strictly speaking, it is not a queue length.
Take a look at
grep procs_running /proc/stat
and
grep procs_blocked /proc/stat
First is an actual running queue and second is a number of process blocked on disk IO. Load average is a function from sum of both.
Solaris CPU run queue
The run-queue is always changing, so it's almost impossible to get the set of processes in the current run-queue.
That said, you can get an approximation by looking at the STAT
(state) field of the process list from ps
. When running the command below:
$ ps aux
...the if the STAT
field begins with R
, then the process is marked RUNNABLE
by the kernel, which on most operating systems means that it is in the run-queue. Here's what a runnable process looks like on my machine:
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
root 78179 0.0 0.0 599828 480 s003 R+ 7:51AM 0:00.00 ps aux
On solaris, you can also use the prstat
command and look at the STATE
column. The value run
indicates that the process is on the run-queue. (Also note that the value cpuN
indicates that the process is currently running on processor N.
For example:
$ prstat -s cpu -n 5
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
13974 kincaid 888K 432K run 40 0 36:14.51 67% cpuhog/1
27354 kincaid 2216K 1928K run 31 0 314:48.51 27% server/5
14690 root 136M 46M sleep 59 0 0:00.59 2.3% Xsun/1
14797 kincaid 9192K 7496K sleep 59 0 0:00.10 0.9% dtwm/8
14851 kincaid 24M 14M sleep 48 0 0:00.03 0.3% netscape/1
Total: 97 processes, 190 lwps, load averages: 2.18, 2.15, 2.11
How to get total cpu usage in Linux using C++
cat /proc/stat
http://www.linuxhowtos.org/System/procstat.htm
I agree with this answer above. The cpu line in this file gives the total number of "jiffies" your system has spent doing different types of processing.
What you need to do is take 2 readings of this file, seperated by whatever interval of time you require. The numbers are increasing values (subject to integer rollover) so to get the %cpu you need to calculate how many jiffies have elapsed over your interval, versus how many jiffies were spend doing work.
e.g.
Suppose at 14:00:00 you have
cpu 4698 591 262 8953 916 449 531
total_jiffies_1 = (sum of all values) = 16400
work_jiffies_1 = (sum of user,nice,system = the first 3 values) = 5551
and at 14:00:05 you have
cpu 4739 591 289 9961 936 449 541
total_jiffies_2 = 17506
work_jiffies_2 = 5619
So the %cpu usage over this period is:
work_over_period = work_jiffies_2 - work_jiffies_1 = 68
total_over_period = total_jiffies_2 - total_jiffies_1 = 1106
%cpu = work_over_period / total_over_period * 100 = 6.1%
Hope that helps a bit.
How to find the socket buffer size of linux
If you want see your buffer size in terminal, you can take a look at:
/proc/sys/net/ipv4/tcp_rmem
(for read)/proc/sys/net/ipv4/tcp_wmem
(for write)
They contain three numbers, which are minimum, default and maximum memory size values (in byte), respectively.
Related Topics
How to Copy an Array in Nasm X86 Assembly for Linux, Porting 16-Bit Dos Code
Diolan Dln-2 Spi Controller on X86_64 Platform
Removing Sensitive Data from Git. "Fatal: Ambiguous Argument 'Rm'"
Memory Access Error Sys_Rt_Sigaction (Signal Handler)
Multiplication with Expr in Shell Script
What Is Partition Checker in Arm Secure Mode
Why Using Pipe for Sort (Linux Command) Is Slow
Using Bash Script to Feed Input to Command Line
Bash Store Output as a Variable
Specifying Non-Standard Baud Rate for Ftdi Virtual Serial Port Under Linux
Variables Set in a Bash 'While Read' Loop Are Unset After It
Less Gets Keyboard Input from Stderr
Bash Shell Script Variable Assignment
Aws Lambda Permission Denied When Trying to Use Ffmpeg
How to Call Accept() for One Socket from Several Threads Simultaneously