SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
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とかでも試してみたい

•

性能評価

Más contenido relacionado

La actualidad más candente

VPP事始め
VPP事始めVPP事始め
VPP事始めnpsg
 
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディングTakuya ASADA
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがないTakuya ASADA
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析Yuki Mizuno
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)Kuniyasu Suzaki
 
4bit-CPU : TD4の解説
4bit-CPU : TD4の解説4bit-CPU : TD4の解説
4bit-CPU : TD4の解説Seong-Hun Choe
 
ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料直久 住川
 
Edge Computing と k8s でなんか話すよ
Edge Computing と k8s でなんか話すよEdge Computing と k8s でなんか話すよ
Edge Computing と k8s でなんか話すよVirtualTech Japan Inc.
 
インテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor Skochinsky
インテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor SkochinskyインテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor Skochinsky
インテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor SkochinskyCODE BLUE
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 

La actualidad más candente (20)

VPP事始め
VPP事始めVPP事始め
VPP事始め
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
4bit-CPU : TD4の解説
4bit-CPU : TD4の解説4bit-CPU : TD4の解説
4bit-CPU : TD4の解説
 
ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料
 
Edge Computing と k8s でなんか話すよ
Edge Computing と k8s でなんか話すよEdge Computing と k8s でなんか話すよ
Edge Computing と k8s でなんか話すよ
 
インテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor Skochinsky
インテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor SkochinskyインテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor Skochinsky
インテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor Skochinsky
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 

Último

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Último (9)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

LinuxのFull ticklessを試してみた