高速なTCPサーバーをGolangで作りベンチマークを取っていたのですが、CPUが2コアや4コアだと100%CPUを使い切れるのに、16コアになるとCPUを100%使いきれずアイドルする現象に困っていました。16コアのサーバーを用いても実質4コア分のパフォーマンスしか出せていませんでした。
goroutine同士は干渉しないのにCPU数を上げてもスケールしないのには納得がいかず、GolangのスケジューラがCPUをブロックしているのではないかと考え、実験しました。
goroutineをスイッチするタイミングについては
これらの記事が参考になります。
実験環境
- Cloud: Degital Ocean
- OS: Ubuntu16.04.3
ubuntu-16
- CPU: 16 Core
- Memory: 24GB
- Type: High CPU
ubuntu-4
- CPU: 4 Core
- Memory: 6GB
- Type: High CPU
sche-cpu サンプルコード
package main
import (
"log"
"net/http"
_ "net/http/pprof"
"os"
"runtime"
"strconv"
"sync"
)
var wg sync.WaitGroup
func main() {
runtime.SetBlockProfileRate(1)
go func() {
log.Println(http.ListenAndServe("0.0.0.0:6060", nil))
}()
test, err := strconv.Atoi(os.Args[1])
if err != nil {
log.Fatal(err)
}
client, err := strconv.Atoi(os.Args[2])
if err != nil {
log.Fatal(err)
}
buffer, err := strconv.Atoi(os.Args[3])
if err != nil {
log.Fatal(err)
}
var work worker
switch test {
case 1:
log.Println("work1")
work = work1
case 2:
log.Println("work2")
work = work2
case 3:
log.Println("work3")
work = work3
default:
log.Println("work3")
work = work3
}
stop := make(chan struct{})
for i := 0; i < client; i++ {
wg.Add(1)
go work(stop, buffer)
}
defer func() {
close(stop)
wg.Wait()
log.Println("done")
}()
var ch chan bool
<-ch
}
type worker func(stop chan struct{}, buffer int)
func work1(stop chan struct{}, buffer int) {
defer wg.Done()
var count int
for {
select {
case <-stop:
return
default:
count++
}
}
}
func work2(stop chan struct{}, buffer int) {
defer wg.Done()
var count int
for {
select {
case <-stop:
return
default:
count++
if count > buffer {
runtime.Gosched()
count = 0
}
}
}
}
func work3(stop chan struct{}, buffer int) {
defer wg.Done()
hoge := make(chan int, buffer)
go func() {
var count int
for {
select {
case <-stop:
return
case count = <-hoge:
count++
}
}
}()
var count int
for {
select {
case <-stop:
return
case hoge <- count:
count++
}
}
}
ビルド環境
- OS: macOS 10.12.6
- Go: 1.8.3
GOOS=linux GOARCH=amd64 go build -o sche-cpu
type 1
for ループによるビジーウェイトを作り出しgoroutineのスイッチを阻止する
type 2
runtime.Gosched()
によって強制的にスケジューラを起動しgoroutineをスイッチさせる
buffer を増やすことによって、スケジューラを呼び出す前にビジーウェイトを作り出す
type 3
チャネルの操作によってgoroutineをスイッチさせる
buffer を増やすことによってチャネルのバッファーを増やす
考察と結論
実験内容がとても長いので先に結論と考察を書きます。
CPU 4コアと16コアの対照実験からわかること
4コアではtype 1, 2, 3 共にCPUをほぼ100%使えています。
しかし、16コアでは、type 2, 3 において、40%程度の iowait がでて、CPUを60%程度しか使えていません。
CPU数が増えても処理がスケールしないことがわかります。
16コアで実行したtype 1,2,3からわかること
type 1
スケジューラを呼ばないビジーループをすると100%CPUを使い切れることがわかりました。
type 2
高頻度でスケジューラを呼んでスイッチすると100%CPUを使いきれません。
ただし、スケジューラを呼ぶ前にビジーウェイトを挟むと、100%CPUを使い切ることができます。
これは、単位時間に実行されるgoroutineのスイッチの回数が少なくなるためだと考えられます。
type 3
高頻度でchannelを操作するとスケジューラが呼ばれて100%CPUを使いきれません。
buffer付きchannelでも100%CPUは使いきれません。channelの操作ではbufferに空きがあってもスケジューラが呼び出されていることがわかります。
また、buffer付きchannelはbufferに空きがある場合はgoroutineをスイッチさせずに処理を継続しますが、スケジューラ自体は呼び出されているのではないかと思いました。
まとめ
高頻度でgoroutineをスイッチするとスイッチングコストによりCPUが100%使いきれないのではないかと思います。
GoConで発表してきたのでついでにruntime以下の知識をまとめていく #golang
この記事に書かれているGolangのスケジューラの仕組みによると、goroutineのキューはローカルキューとグローバルキューがあり、それらのstealの操作があるそうです。そのあたりで全体に対するロックがかかってしまっているのかな?と推測しましたが、実際のソースコードを読み解けなかったのでわかりません。
回避策としては、なるべくgoroutineをスイッチさせないこと、並行化させる処理は比較的重い処理をさせるべきなのかなと思いました。
解決策や原因など、詳しい方がいらっしゃいましたら教えていただきたいです。
goroutineのスケジューラについての実験結果
16 Core
type 1
root@ubuntu-16:~# ./bin/sche-cpu 1 100 0
2017/09/01 02:15:48 work1
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 24142660 16848 406184 0 0 4 2 246 136 3 2 96 0 0
16 0 0 24141008 16848 406184 0 0 0 0 2198 313 50 0 50 0 0
16 0 0 24141008 16848 406184 0 0 0 0 4112 272 100 0 0 0 0
16 0 0 24141008 16848 406184 0 0 0 0 4112 292 100 0 0 0 0
16 0 0 24141008 16856 406184 0 0 0 6 4113 275 100 0 0 0 0
17 0 0 24141040 16856 406184 0 0 0 0 4112 289 100 0 0 0 0
16 0 0 24141040 16856 406184 0 0 0 0 4112 287 100 0 0 0 0
mpstat -P ALL 2
root@ubuntu-16:~# mpstat -P ALL 2
Linux 4.4.0-87-generic (ubuntu-16) 09/01/2017 _x86_64_ (16 CPU)
02:18:54 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:18:56 AM all 99.94 0.00 0.03 0.00 0.00 0.00 0.03 0.00 0.00 0.00
02:18:56 AM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 2 99.50 0.00 0.00 0.00 0.00 0.00 0.50 0.00 0.00 0.00
02:18:56 AM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 4 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 5 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 6 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 7 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 8 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 9 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 10 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 11 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 12 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 13 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 14 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:18:56 AM 15 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
type 2
buffer 0
root@ubuntu-16:~# ./bin/sche-cpu 2 100 0
2017/09/01 02:20:06 work2
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 24142732 16868 406224 0 0 4 2 238 129 5 1 94 0 0
0 0 0 24142344 16868 406224 0 0 0 0 23 30 0 0 100 0 0
13 3 0 24140672 16868 406224 0 0 0 0 222896 524104 12 30 37 21 0
7 10 0 24140672 16868 406224 0 0 0 0 326306 714181 17 42 3 38 0
7 9 0 24140672 16868 406224 0 0 0 0 329344 712460 17 42 1 40 0
10 8 0 24140672 16868 406224 0 0 0 0 324700 702652 18 42 1 39 0
16 2 0 24140672 16868 406224 0 0 0 0 325307 703997 17 43 1 39 0
16 1 0 24140672 16868 406224 0 0 0 0 325730 705695 17 43 1 39 0
15 2 0 24140672 16868 406224 0 0 0 0 329006 711620 18 41 1 40 0
8 9 0 24140672 16868 406224 0 0 0 0 330731 714501 17 43 1 40 0
15 1 0 24140672 16868 406224 0 0 0 0 322472 698715 16 43 1 40 0
mpstat -P ALL 2
root@ubuntu-16:~# mpstat -P ALL 2
Linux 4.4.0-87-generic (ubuntu-16) 09/01/2017 _x86_64_ (16 CPU)
02:24:52 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:24:54 AM all 17.28 0.00 42.94 39.02 0.00 0.00 0.00 0.00 0.00 0.77
02:24:54 AM 0 17.17 0.00 42.42 39.39 0.00 0.00 0.00 0.00 0.00 1.01
02:24:54 AM 1 16.23 0.00 42.93 40.31 0.00 0.00 0.00 0.00 0.00 0.52
02:24:54 AM 2 16.75 0.00 43.15 39.09 0.00 0.00 0.00 0.00 0.00 1.02
02:24:54 AM 3 14.14 0.00 46.07 38.74 0.00 0.00 0.00 0.00 0.00 1.05
02:24:54 AM 4 17.99 0.00 41.80 39.68 0.00 0.00 0.00 0.00 0.00 0.53
02:24:54 AM 5 15.90 0.00 44.62 38.46 0.00 0.00 0.00 0.00 0.00 1.03
02:24:54 AM 6 15.90 0.00 45.13 37.95 0.00 0.00 0.00 0.00 0.00 1.03
02:24:54 AM 7 20.41 0.00 41.84 37.24 0.00 0.00 0.00 0.00 0.00 0.51
02:24:54 AM 8 17.71 0.00 43.23 38.54 0.00 0.00 0.00 0.00 0.00 0.52
02:24:54 AM 9 17.62 0.00 43.52 38.34 0.00 0.00 0.00 0.00 0.00 0.52
02:24:54 AM 10 14.95 0.00 43.30 40.72 0.00 0.00 0.00 0.00 0.00 1.03
02:24:54 AM 11 16.16 0.00 43.94 38.89 0.00 0.00 0.00 0.00 0.00 1.01
02:24:54 AM 12 21.11 0.00 39.20 38.69 0.00 0.00 0.00 0.00 0.00 1.01
02:24:54 AM 13 14.95 0.00 43.81 40.21 0.00 0.00 0.00 0.00 0.00 1.03
02:24:54 AM 14 17.17 0.00 41.92 39.90 0.00 0.00 0.00 0.00 0.00 1.01
02:24:54 AM 15 21.39 0.00 40.11 38.50 0.00 0.00 0.00 0.00 0.00 0.00
iowait が 40% ほど
idle は 1%
buffer 1000
root@ubuntu-16:~# ./bin/sche-cpu 2 100 1000
2017/09/01 02:27:11 work2
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
16 0 0 24141084 16892 406168 0 0 4 2 282 547 6 5 86 3 0
16 0 0 24140820 16892 406168 0 0 0 0 5144 7809 99 1 0 0 0
16 0 0 24140820 16892 406168 0 0 0 0 5012 7225 99 1 0 0 0
16 0 0 24140852 16892 406168 0 0 0 0 5174 7566 99 1 0 0 0
16 0 0 24140852 16892 406168 0 0 0 0 5003 6980 98 1 1 0 0
16 0 0 24140852 16892 406168 0 0 0 0 4988 7143 99 1 0 0 0
mpstat -P ALL 2
root@ubuntu-16:~# mpstat -P ALL 2
Linux 4.4.0-87-generic (ubuntu-16) 09/01/2017 _x86_64_ (16 CPU)
02:28:03 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:28:05 AM all 98.78 0.00 0.82 0.06 0.00 0.00 0.00 0.00 0.00 0.34
02:28:05 AM 0 94.00 0.00 1.50 0.00 0.00 0.00 0.00 0.00 0.00 4.50
02:28:05 AM 1 98.50 0.00 1.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00
02:28:05 AM 2 98.99 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:28:05 AM 3 98.50 0.00 1.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:28:05 AM 4 98.00 0.00 1.50 0.00 0.00 0.00 0.00 0.00 0.00 0.50
02:28:05 AM 5 99.50 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:28:05 AM 6 98.49 0.00 1.51 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:28:05 AM 7 98.51 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.50
02:28:05 AM 8 99.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.50
02:28:05 AM 9 99.00 0.00 0.50 0.50 0.00 0.00 0.00 0.00 0.00 0.00
02:28:05 AM 10 98.99 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:28:05 AM 11 99.50 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:28:05 AM 12 98.50 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.50
02:28:05 AM 13 99.50 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00
02:28:05 AM 14 99.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.50
02:28:05 AM 15 99.49 0.00 0.51 0.00 0.00 0.00 0.00 0.00 0.00 0.00
cpu をユーザー領域でほぼ100%使えている
type 3
buffer 0
root@ubuntu-16:~# ./bin/sche-cpu 3 100 0
2017/09/01 02:29:39 work3
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
9 7 0 24140804 16892 406200 0 0 4 2 295 24 9 5 83 3 0
10 7 0 24140416 16892 406200 0 0 0 0 305856 752543 22 40 12 26 0
15 3 0 24140416 16892 406200 0 0 0 0 319541 732084 21 42 4 33 0
8 9 0 24140416 16892 406200 0 0 0 0 321637 726798 22 41 1 35 0
7 10 0 24140416 16892 406200 0 0 0 0 320025 724534 21 42 1 36 0
15 2 0 24140416 16892 406200 0 0 0 0 315660 716282 21 42 1 35 0
9 7 0 24140448 16892 406200 0 0 0 0 316983 719222 21 42 1 35 0
13 4 0 24140448 16892 406200 0 0 0 0 311600 708722 22 43 2 34 0
13 4 0 24140448 16892 406200 0 0 0 0 315817 716971 22 42 1 34 0
mpstat -P ALL 2
root@ubuntu-16:~# mpstat -P ALL 2
Linux 4.4.0-87-generic (ubuntu-16) 09/01/2017 _x86_64_ (16 CPU)
02:31:05 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:31:07 AM all 22.11 0.00 41.76 34.67 0.00 0.00 0.00 0.00 0.00 1.46
02:31:07 AM 0 23.50 0.00 42.00 33.00 0.00 0.00 0.00 0.00 0.00 1.50
02:31:07 AM 1 20.92 0.00 43.37 34.18 0.00 0.00 0.00 0.00 0.00 1.53
02:31:07 AM 2 25.53 0.00 39.89 33.51 0.00 0.00 0.00 0.00 0.00 1.06
02:31:07 AM 3 23.44 0.00 39.58 35.42 0.00 0.00 0.00 0.00 0.00 1.56
02:31:07 AM 4 22.56 0.00 41.03 34.87 0.00 0.00 0.00 0.00 0.00 1.54
02:31:07 AM 5 20.10 0.00 42.27 36.08 0.00 0.00 0.00 0.00 0.00 1.55
02:31:07 AM 6 25.39 0.00 40.41 32.64 0.00 0.00 0.00 0.00 0.00 1.55
02:31:07 AM 7 23.32 0.00 40.93 34.20 0.00 0.00 0.00 0.00 0.00 1.55
02:31:07 AM 8 25.26 0.00 41.05 32.63 0.00 0.00 0.00 0.00 0.00 1.05
02:31:07 AM 9 24.74 0.00 41.58 32.63 0.00 0.00 0.00 0.00 0.00 1.05
02:31:07 AM 10 18.37 0.00 43.88 36.22 0.00 0.00 0.00 0.00 0.00 1.53
02:31:07 AM 11 19.69 0.00 42.49 36.27 0.00 0.00 0.00 0.00 0.00 1.55
02:31:07 AM 12 18.46 0.00 44.10 35.90 0.00 0.00 0.00 0.00 0.00 1.54
02:31:07 AM 13 19.69 0.00 42.49 36.27 0.00 0.00 0.00 0.00 0.00 1.55
02:31:07 AM 14 20.21 0.00 40.93 36.79 0.00 0.00 0.00 0.00 0.00 2.07
02:31:07 AM 15 22.29 0.00 41.71 34.29 0.00 0.00 0.00 0.00 0.00 1.71
buffer 1000
root@ubuntu-16:~# ./bin/sche-cpu 3 100 1000
2017/09/01 02:32:20 work3
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
5 13 0 24140112 16916 406176 0 0 3 2 377 375 9 6 81 4 0
1 0 0 24139972 16916 406176 0 0 0 0 326650 710439 16 43 1 40 0
8 10 0 24140004 16916 406176 0 0 0 0 327646 710342 18 41 1 40 0
12 6 0 24140004 16916 406176 0 0 0 0 326953 709041 17 43 1 39 0
14 4 0 24140004 16916 406176 0 0 0 0 326212 708030 17 42 1 40 0
7 9 0 24140004 16916 406176 0 0 0 0 326783 709785 17 42 1 40 0
mpstat -P ALL 2
root@ubuntu-16:~# mpstat -P ALL 2
Linux 4.4.0-87-generic (ubuntu-16) 09/01/2017 _x86_64_ (16 CPU)
02:33:13 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:33:15 AM all 17.54 0.00 42.01 39.58 0.00 0.00 0.00 0.00 0.00 0.88
02:33:15 AM 0 19.79 0.00 41.15 38.54 0.00 0.00 0.00 0.00 0.00 0.52
02:33:15 AM 1 16.15 0.00 43.75 39.06 0.00 0.00 0.00 0.00 0.00 1.04
02:33:15 AM 2 18.13 0.00 43.01 37.82 0.00 0.00 0.00 0.00 0.00 1.04
02:33:15 AM 3 15.51 0.00 42.25 41.18 0.00 0.00 0.00 0.00 0.00 1.07
02:33:15 AM 4 14.66 0.00 43.46 40.84 0.00 0.00 0.00 0.00 0.00 1.05
02:33:15 AM 5 15.31 0.00 43.88 39.80 0.00 0.00 0.00 0.00 0.00 1.02
02:33:15 AM 6 13.83 0.00 45.74 39.36 0.00 0.00 0.00 0.00 0.00 1.06
02:33:15 AM 7 18.23 0.00 41.15 39.58 0.00 0.00 0.00 0.00 0.00 1.04
02:33:15 AM 8 21.50 0.00 41.00 37.00 0.00 0.00 0.00 0.00 0.00 0.50
02:33:15 AM 9 20.32 0.00 39.57 39.57 0.00 0.00 0.00 0.00 0.00 0.53
02:33:15 AM 10 17.62 0.00 40.93 40.41 0.00 0.00 0.00 0.00 0.00 1.04
02:33:15 AM 11 17.01 0.00 41.24 40.72 0.00 0.00 0.00 0.00 0.00 1.03
02:33:15 AM 12 18.95 0.00 38.95 41.05 0.00 0.00 0.00 0.00 0.00 1.05
02:33:15 AM 13 15.69 0.00 44.61 38.73 0.00 0.00 0.00 0.00 0.00 0.98
02:33:15 AM 14 18.27 0.00 41.12 39.59 0.00 0.00 0.00 0.00 0.00 1.02
02:33:15 AM 15 19.68 0.00 41.49 37.77 0.00 0.00 0.00 0.00 0.00 1.06
4 Core
type 1
root@ubuntu-2:~# ./bin/sche-cpu 1 100 0
2017/09/01 02:39:04 work1
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 5699060 12580 333144 0 0 16 6 247 32 4 2 94 0 0
4 0 0 5699092 12588 333148 0 0 0 6 1113 238 100 0 0 0 0
4 0 0 5699092 12588 333148 0 0 0 0 1109 229 100 0 0 0 0
root@ubuntu-4:~# mpstat -P ALL 2
Linux 4.4.0-87-generic (ubuntu-4) 09/01/2017 _x86_64_ (4 CPU)
02:40:36 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:40:38 AM all 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:40:38 AM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:40:38 AM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:40:38 AM 2 99.50 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:40:38 AM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
type 2
buffer 0
root@ubuntu-4:~# ./bin/sche-cpu 2 100 0
2017/09/01 02:41:11 work2
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 5649152 16716 379536 0 0 18 9 253 116 6 2 92 0 0
4 0 0 5649136 16716 379456 0 0 0 0 5292 148444 70 26 3 1 0
4 0 0 5649136 16716 379456 0 0 0 0 5767 149276 69 27 3 1 0
mpstat -P ALL 2
root@ubuntu-4:~# mpstat -P ALL 2
Linux 4.4.0-87-generic (ubuntu-4) 09/01/2017 _x86_64_ (4 CPU)
02:43:25 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:43:27 AM all 70.03 0.00 26.23 1.03 0.00 0.00 0.00 0.00 0.00 2.71
02:43:27 AM 0 70.83 0.00 25.52 1.04 0.00 0.00 0.00 0.00 0.00 2.60
02:43:27 AM 1 71.58 0.00 25.79 1.05 0.00 0.00 0.00 0.00 0.00 1.58
02:43:27 AM 2 67.17 0.00 28.79 1.01 0.00 0.00 0.00 0.00 0.00 3.03
02:43:27 AM 3 71.50 0.00 24.87 0.52 0.00 0.00 0.00 0.00 0.00 3.11
buffer 1000
root@ubuntu-4:~# ./bin/sche-cpu 2 100 1000
2017/09/01 02:44:19 work2
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 5649072 16716 379456 0 0 17 9 348 1822 9 3 88 0 0
4 0 0 5649056 16716 379456 0 0 0 0 1117 276 100 0 0 0 0
4 0 0 5649056 16716 379456 0 0 0 0 1110 244 100 0 0 0 0
mpstat -P ALL 2
root@ubuntu-4:~# mpstat -P ALL 2
Linux 4.4.0-87-generic (ubuntu-4) 09/01/2017 _x86_64_ (4 CPU)
02:45:04 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:45:06 AM all 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:45:06 AM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:45:06 AM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:45:06 AM 2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:45:06 AM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
type 3
buffer 0
root@ubuntu-4:~# ./bin/sche-cpu 3 100 0
2017/09/01 02:45:53 work3
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 5648860 16740 379468 0 0 17 9 346 1793 11 3 86 0 0
4 0 0 5648844 16740 379468 0 0 0 0 2497 62552 83 15 2 0 0
4 0 0 5648844 16740 379468 0 0 0 2 2239 60402 84 14 2 0 0
4 0 0 5648844 16740 379468 0 0 0 0 2508 62482 84 14 2 0 0
mpstat -P ALL 2
root@ubuntu-4:~# mpstat -P ALL 2
Linux 4.4.0-87-generic (ubuntu-4) 09/01/2017 _x86_64_ (4 CPU)
02:46:36 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:46:38 AM all 84.14 0.00 13.20 0.38 0.00 0.00 0.00 0.00 0.00 2.28
02:46:38 AM 0 85.35 0.00 11.11 0.51 0.00 0.00 0.00 0.00 0.00 3.03
02:46:38 AM 1 85.79 0.00 10.15 0.51 0.00 0.00 0.00 0.00 0.00 3.55
02:46:38 AM 2 82.00 0.00 16.00 0.50 0.00 0.00 0.00 0.00 0.00 1.50
02:46:38 AM 3 82.23 0.00 15.23 0.51 0.00 0.00 0.00 0.00 0.00 2.03
buffer 1000
root@ubuntu-4:~# ./bin/sche-cpu 3 100 1000
2017/09/01 02:47:28 work3
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 5647572 16748 379468 0 0 16 8 361 2116 13 3 84 0 0
4 0 0 5647432 16748 379468 0 0 0 0 5949 98031 74 21 4 1 0
4 0 0 5647432 16748 379468 0 0 0 0 6300 99671 73 24 2 1 0
4 0 0 5647432 16748 379468 0 0 0 0 6226 98814 71 26 2 1 0
mpstat -P ALL 2
root@ubuntu-4:~# mpstat -P ALL 2
Linux 4.4.0-87-generic (ubuntu-4) 09/01/2017 _x86_64_ (4 CPU)
02:48:28 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:48:30 AM all 77.26 0.00 20.08 1.02 0.00 0.00 0.00 0.00 0.00 1.65
02:48:30 AM 0 77.32 0.00 20.62 1.03 0.00 0.00 0.00 0.00 0.00 1.03
02:48:30 AM 1 77.32 0.00 20.10 1.55 0.00 0.00 0.00 0.00 0.00 1.03
02:48:30 AM 2 77.39 0.00 19.60 1.01 0.00 0.00 0.00 0.00 0.00 2.01
02:48:30 AM 3 77.16 0.00 20.30 0.51 0.00 0.00 0.00 0.00 0.00 2.03