perf sched record -p <PID> -- sleep 10
perf sched timehist -V
wait time sch delay run time
time cpu task name [tid/pid] (msec) (msec) (msec)
--------------- ------ --------- ------------------------------ --------- --------- ---------
1849.531842 [0002] s java[7340/7338] 0.000 0.000 56.003
21849.587844 [0002] s java[7340/7338] 0.000 0.000 56.001
21849.607838 [0002] s java[7340/7338] 0.000 0.000 19.994
21849.615836 [0002] s java[7340/7338] 0.000 0.000 7.998
...............................................................................................
21849.691834 [0002] s java[7340/7338] 0.000 0.000 4.000
21849.703837 [0001] s java[7340/7338] 0.000 0.000 38.330
21849.711838 [0005] s java[7340/7338] 0.000 0.000 0.000
21849.719834 [0005] s java[7340/7338] 0.000 0.000 7.996
java 7340 [002] 21848.012360: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
java 7340 [002] 21848.012375: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
java 7340 [002] 21848.012391: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
java 7340 [002] 21848.012406: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
...................................................................................................
swapper 0 [007] 21848.012554: sched:sched_wakeup: comm=java pid=7377 prio=120 target_cpu=007
swapper 0 [007] 21848.012554: sched:sched_wakeup: comm=java pid=7377 prio=120 target_cpu=007
...................................................................................................
java 7340 [002] 21848.012555: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
java 7377 [007] 21848.012582: sched:sched_stat_runtime: comm=java pid=7377 runtime=37420 [ns] vruntime=1628300433237 [ns]
java 7340 [002] 21848.012585: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
java 7377 [007] 21848.012587: sched:sched_switch: prev_comm=java prev_pid=7377 prev_prio=120 prev_state=S ==> next_comm=swapper/7 next_pid=0 next_prio=120
Hello,
1. I have a simple one-threaded tcp server written in Java. I try to measure its receive-and-process-response latency. More preceisely, the client sends (by loopback) the 128-bytes message with a timestamp in the header. The server receives a message, reads a content byte by byte and compute a difference between `now` and the timestamp from the header. The difference is more or less 6μs.
Hello,
1. I have a simple one-threaded tcp server written in Java. I try to measure its receive-and-process-response latency. More preceisely, the client sends (by loopback) the 128-bytes message with a timestamp in the header. The server receives a message, reads a content byte by byte and compute a difference between `now` and the timestamp from the header. The difference is more or less 6μs.
Now, I am trying to make it faster.
But, firstly I would like to examine a scheduling issue. So, I've collected results with:
perf sched record -p <PID> -- sleep 10
and then:
perf sched timehist -V
Excerpt from the result is presented below: (I've filtered it for my server thread)
wait time sch delay run time
time
cpu
task name
[tid/pid] (msec) (msec) (msec)
--------------- ------ --------- ------------------------------ --------- --------- ---------
1849.531842 [0002] s java[7340/7338] 0.000 0.000 56.003
21849.587844 [0002] s java[7340/7338] 0.000 0.000 56.001
21849.607838 [0002] s java[7340/7338] 0.000 0.000 19.994
21849.615836 [0002] s java[7340/7338] 0.000 0.000 7.998
...............................................................................................
21849.691834 [0002] s java[7340/7338] 0.000 0.000 4.000
21849.703837 [0001] s java[7340/7338] 0.000 0.000 38.330
21849.711838 [0005] s java[7340/7338] 0.000 0.000 0.000
21849.719834 [0005] s java[7340/7338] 0.000 0.000 7.996
My question is:
How is it possible that wait_time is always zero? After all, it is impossible. My CPU is multicore but there is a lot of processes (threads) that needs CPU time. How to interpret that?
From the other hand I am gonna to reduce CPU migration. Perhaps it will help :-)
2. The second issue is:
The excerpt from perf sched script
java 7340 [002] 21848.012360: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
java 7340 [002] 21848.012375: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
java 7340 [002] 21848.012391: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
java 7340 [002] 21848.012406: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
...................................................................................................
swapper 0 [007] 21848.012554: sched:sched_wakeup: comm=java pid=7377 prio=120 target_cpu=007
swapper 0 [007] 21848.012554: sched:sched_wakeup: comm=java pid=7377 prio=120 target_cpu=007
...................................................................................................
java 7340 [002] 21848.012555: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
java 7377 [007] 21848.012582: sched:sched_stat_runtime: comm=java pid=7377 runtime=37420 [ns] vruntime=1628300433237 [ns]
java 7340 [002] 21848.012585: sched:sched_wakeup: comm=java pid=7511 prio=120 target_cpu=005
java 7377 [007] 21848.012587: sched:sched_switch: prev_comm=java prev_pid=7377 prev_prio=120 prev_state=S ==> next_comm=swapper/7 next_pid=0 next_prio=120
Why my server receives sched_wakup that looks like spurious wakeups? What is a swapper?