LinuxのFull ticklessを試してみた

Hiraku Toyooka
Hiraku ToyookaSoftware Engineer at Cybertrust Japan
LinuxのFull tickless
を試してみた
第九回カーネル/VM探検隊
Hiraku Toyooka (@hiraku_wfs)
自己紹介
•

豊岡 拓(とよおか ひらく)

•

Twitter: @hiraku_wfs

•

横浜でLinuxのお仕事してます

•

が、今日は業務とは直接関係ない話
Ticklessとは
•

CPUが暇な(idle)時にtickを入れなくする
•

省電力

•

Linux, FreeBSDなどに実装されている
task

1ms

idle

tickless

task

time
Full tickless
•

CPUが暇じゃなくてもtickを消す
•

Linux 3.10から導入された

•

tickのオーバヘッドが無くなる
task A

tickless

task B

time
どんなワークロードのため?
•

Real-time
•

•

最悪レイテンシを下げたい(極限まで)

HPC
•

スループットを上げたい(極限まで)

※ただし、現在は以下の制約がある
•

CPUで動作可能なタスクが1個の時だけtickを止める

•

1秒に1回はtickを入れないといけない

•

CPU0はfull tickless modeにはならない
ビルド
•

Fedoraなど一般的なディストロのカーネルでは
無効化されている

•

git clone git://git.kernel.org/pub/scm/linux/
kernel/git/torvalds/linux.git

•

menuconfigで Full dynticks system を有効
化(CONFIG_NO_HZ_FULL=y)してコンパイ
ル
実行
•

x86_64 2コア(CPU0, CPU1)環境で実行
•
•

•

起動パラメータに nohz_full=1 を追加
CPU1のみfull tickless可能に

dmesg ¦ grep NO_HZ
•
•

NO_HZ: Full dynticks CPUs: 1. ならOK
sched_clock(TSCとか)の進みが不安定な環境
ではNGになる (例: VirtualBox on Mac OS X)
dynticks-testing

(*1)

•

CPU1でビジーループを10秒走らせて、その間tickがど
れだけ入ったかを記録
•

•

カーネルトレース(ftrace)の結果が出てくる

Full ticklessのための事前セットアップもやってくれる
•

全ての外部割り込み先、RCU関連カーネルスレッドを
CPU0に移動

•

ただし、他タスクがCPU1に入ってこないようにする
設定はやってくれない ==> Cgroup cpusetで設定
*1 git://git.kernel.org/pub/scm/linux/kernel/git/frederic/dynticks-testing.git
結果
#
#

!
!
!
!
!
!
!

!

TASK-PID
| |
rcuos/0-18
user_loop-2412

CPU#
|
[001]
[001]

TIMESTAMP FUNCTION
|
|
1233.121545: tick_stop: success=yes msg=
1233.122098: tick_stop: success=no msg=more than 1 task in runqueue

sleep-2413
sleep-2413
sleep-2413

[001]
[001]
[001]

1233.122419: hrtimer_expire_entry: hrtimer=ffff88042f44d900 function=tick_sched_timer now=1232550001205
1233.122429: tick_stop: success=yes msg=
1233.122721: tick_stop: success=no msg=more than 1 task in runqueue

sleep-2413

[001]

1233.122724: tick_stop: success=no msg=more than 1 task in runqueue

user_loop-2412
user_loop-2412
user_loop-2412

[001]
[001]
[001]

1233.123419: hrtimer_expire_entry: hrtimer=ffff88042f44d900 function=tick_sched_timer now=1232551000974
1233.123431: tick_stop: success=yes msg=
1233.123435: tick_stop: success=no msg=more than 1 task in runqueue

user_loop-2412

[001]

1233.123436: tick_stop: success=no msg=more than 1 task in runqueue

user_loop-2412
user_loop-2412
user_loop-2412

[001]
[001]
[001]

1233.123439: tick_stop: success=yes msg=
1233.351523: hrtimer_expire_entry: hrtimer=ffff88042f44d900 function=tick_sched_timer now=1232779000584
1233.351531: tick_stop: success=no msg=more than 1 task in runqueue

user_loop-2412

[001]

1233.351544: tick_stop: success=no msg=more than 1 task in runqueue

kworker/1:2-2261
user_loop-2412
user_loop-2412
user_loop-2412
user_loop-2412

[001]
[001]
[001]
[001]
[001]

1233.351548:
1233.352523:
1233.352526:
1233.435561:
1233.435564:

workqueue_execute_start: work struct ffff88042f44fac8: function od_dbs_timer
hrtimer_expire_entry: hrtimer=ffff88042f44d900 function=tick_sched_timer now=1232780000291
tick_stop: success=yes msg=
hrtimer_expire_entry: hrtimer=ffff88042f44d900 function=tick_sched_timer now=1232863000250
tick_stop: success=no msg=more than 1 task in runqueue

以下、500行(full tickless無効の場合10000行)くらい続く. . .
結果(要約)
Full tickless無効 Full tickless有効
タイマ発火回数

(10秒間)

10019回

102回

•

明らかにtickが減っている→動作はしている

•

しかし、tickless期間は平均0.1秒(10秒 102)
•

制約の1秒にはまだ遠い
※ HZ=1000(1秒間に1000回のtick)環境で実行
kworkerスレッド(workqueue)
Full ticklessなし Full ticklessあり
タイマ発火回数

(10秒間)

102回

kworker動作回数

(10秒間)
•

10019回

1043回

96回

ビジーループ以外にCPUごとのkworkerスレッドが動い
ている(別のCPUに移動できない)

→動作可能タスクが複数

→full tickless modeに移行しない
kworkerスレッドが実行していたもの
関数名
od_dbs_timer
output_poll_execute
[drm_kms_helper]
vmstat_update

サブシステム
CPUfreq

(CPU frequency scaling)
DRM

(Direct Rendering Manager)
メモリ管理

blk_delay_work

ブロックデバイス

ioc_release_fn

ブロックデバイス

disk_events_workfn

ブロックデバイス

flush_to_ldisc

TTY
対策 - od_dbs_timer()
•

実行されていた関数がdrivers/cpufreq/
cpufreq_ondemand.cにあるので、周波数の動
的変更が関係しているに違いない!

•

# cpupower frequency-set -g performance
としたら出なくなった

•

CONFIG_CPU_FREQ=nでカーネル再ビルドでも
良いらしい(*1)
*1 linux/Documentation/kernel-per-CPU-kthreads.txt
対策 - output_poll_execute()
drm_kms_helperをrmmodできれば良い


•



#
#
#
#
•

init 3

echo 0 > /sys/class/vtconsole/vtcon1/bind

rmmod radeon

rmmod drm_kms_helper

ただし、モニタ&キーボードが使えなくなる
対策 - vmstat_update()
•

linux/Documentation/kernel-per-CPUkthreads.txt によると、
It is not possible to entirely get rid of OS jitter from
vmstat_update() on CONFIG_SMP=y systems, but you 

can decrease its frequency by writing a large value to 

/proc/sys/vm/stat_interval.

•

実はdynticks-testingでは既に頻度を下げている

sysctl vm.stat_interval=120
対策 - それ以外
関数名

サブシステム

blk_delay_work

ブロックデバイス

ioc_release_fn

ブロックデバイス

disk_events_workfn

ブロックデバイス

flush_to_ldisc

TTY

•

未対策

•

インメモリ動作にしてブロックデバイスを使わないとか?

•

TTY…
とりあえずリトライした結果
Full ticklessあり Full ticklessあり

Full ticklessなし
(対策なし)
(対策あり)
タイマ発火回数

(10秒間)

10019回

102回

33回

kworker動作回数

(10秒間)

1043回

96回

6回

•

tickless期間が平均0.1→0.3秒に改善
一応、0.8秒近く持続してる時もある
まとめ
•

カーネルビルドはかんたん

•

事前セットアップが大変

•

今後の課題
•

残りのkworker実行関数の対策

(根本的にはworkqueueの改造が必要かも)

•

ARMとかでも試してみたい

•

性能評価
1 of 19

Recommended

Yoctoで綺麗なkernel configを作る by
Yoctoで綺麗なkernel configを作るYoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作るshimadah
3.8K views25 slides
10GbE時代のネットワークI/O高速化 by
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化Takuya ASADA
59.4K views67 slides
今話題のいろいろなコンテナランタイムを比較してみた by
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみたKohei Tokunaga
61.8K views26 slides
Linux女子部 systemd徹底入門 by
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
137.9K views50 slides
Linux packet-forwarding by
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwardingMasakazu Asama
7.1K views47 slides
マルチコアとネットワークスタックの高速化技法 by
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法Takuya ASADA
16.9K views69 slides

More Related Content

What's hot

TEE (Trusted Execution Environment)は第二の仮想化技術になるか? by
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?Kuniyasu Suzaki
1.4K views36 slides
Ansibleの最近の動向を追ってみた by
Ansibleの最近の動向を追ってみたAnsibleの最近の動向を追ってみた
Ansibleの最近の動向を追ってみたKeijiUehata1
13.7K views9 slides
目grep入門 +解説 by
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
89.4K views83 slides
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde... by
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...whywaita
11.2K views143 slides
Scapyで作る・解析するパケット by
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
35.1K views37 slides
Dockerを支える技術 by
Dockerを支える技術Dockerを支える技術
Dockerを支える技術Etsuji Nakai
82.1K views43 slides

What's hot(20)

TEE (Trusted Execution Environment)は第二の仮想化技術になるか? by Kuniyasu Suzaki
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
Kuniyasu Suzaki1.4K views
Ansibleの最近の動向を追ってみた by KeijiUehata1
Ansibleの最近の動向を追ってみたAnsibleの最近の動向を追ってみた
Ansibleの最近の動向を追ってみた
KeijiUehata113.7K views
目grep入門 +解説 by murachue
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue89.4K views
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde... by whywaita
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
whywaita11.2K views
Scapyで作る・解析するパケット by Takaaki Hoyo
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo35.1K views
Dockerを支える技術 by Etsuji Nakai
Dockerを支える技術Dockerを支える技術
Dockerを支える技術
Etsuji Nakai82.1K views
CTF for ビギナーズ ネットワーク講習資料 by SECCON Beginners
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners44.5K views
コンテナネットワーキング(CNI)最前線 by Motonori Shindo
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo31.6K views
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪 by Kunihiro TANAKA
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Kunihiro TANAKA14.3K views
大規模サービスを支えるネットワークインフラの全貌 by LINE Corporation
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
LINE Corporation21.5K views
ARM LinuxのMMUはわかりにくい by wata2ki
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki6.7K views
仮想化環境におけるパケットフォワーディング by Takuya ASADA
仮想化環境におけるパケットフォワーディング仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
Takuya ASADA17.4K views
BuildKitによる高速でセキュアなイメージビルド by Akihiro Suda
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda42.6K views
PG-REXで学ぶPacemaker運用の実例 by kazuhcurry
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
kazuhcurry14.8K views
コンテナにおけるパフォーマンス調査でハマった話 by Yuta Shimada
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada2.2K views
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで by Masahito Zembutsu
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu15.9K views
GPU仮想化最前線 - KVMGTとvirtio-gpu - by zgock
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
zgock6.8K views
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料) by NTT DATA Technology & Innovation
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)

Recently uploaded

The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
78 views29 slides
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PC Cluster Consortium
66 views12 slides
Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
90 views41 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
405 views13 slides
光コラボは契約してはいけない by
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけないTakuya Matsunaga
27 views17 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Hitachi, Ltd. OSS Solution Center.
101 views26 slides

Recently uploaded(12)

The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.78 views
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka90 views
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4405 views
光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけない
Takuya Matsunaga27 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda479 views

LinuxのFull ticklessを試してみた