SlideShare a Scribd company logo
1 of 24
Download to read offline
その IONICE, 
ほんとに効いてますか? 
TAKAMURA Narimichi 
@nari_ex 
hbstyle-2014-08-14
WHAT IS IONICE ? 
• I/O の処理優先度を指定するLinuxコマンド 
• nice コマンドの I/O バージョン 
• nice コマンドでは I/O 優先度を制御不可
I/O 優先度クラス 
• RT ( Real-time ) 
• 最高優先度 
• BE ( Best-Effort ) 
• デフォルト優先度 
• Idle 
• 最低優先度
BE: クラス内優先度 
• BE クラスのみ、クラス内優先度がある 
• 優先度は 0~7 までの 8段階 
• 0が最高優先度、7が最低優先度 
• 優先度はクラスの枠を超えない 
• RT > BE (0) 
• IDLE < BE (7)
BE: クラス内優先度 
• BE クラスのみ、クラス内優先度がある 
• 優先度は 0~7 までの 8段階 
• 0が最高優先度、7が最低優先度 
• 優先度はクラスの枠を超えない 
• RT < BE (0) 
• IDLE < BE (7)
HOW TO IONICE 
• RT クラスを指定: ionice -c1 
• BE クラスを指定: ionice -c2 -n <0~7> 
• IDLE クラスを指定: ionice -c3
余談: NICE コマンド 
• クラスはない 
• 優先度 ( nice値 ) は -20~19 
• -20 が最高優先度、19が最低優先度
負荷を最小限に抑えたい!
ionice, nice を駆使して…
# ionice -c3 nice -n19
これで完璧だ!!!
–Johnny Appleseed
ちょっとまって
その IONICE, 
ほんとに効いてますか?
–Johnny Appleseed
IONICE が効く条件 
• I/O スケジューラ 
• Readなの?Writeなの?フラグは? 
• ファイル作成フラグ 
• キャッシュの有無
I/O Scheduler…
ユーザ空間 
VFS “ここに引用を入力してください。” 
–Johnny Appleseed 
カーネル空間 
システムコール 
物理 
デバイス 
ファイルシステム 
ディスクキャッシュ 
汎用ブロック層 
物理 
デバイス 
プロセス 
I/O スケジューラ層 
デバイス 
ドライバ 
デバイス 
ドライバ
条件その1: I/O SCHEDULER(1) 
• CFQ スケジューラ以外は無理 
• Linux 標準のスケジューラは CFQ 
• Amazon Linux は Noop なので注意 
• Unbreakable Linux は Deadline なので注意
条件その1: I/O SCHEDULER(2) 
• デバイスひとつにI/Oスケジューラひとつ 
• デバイスをまたぐ処理の場合に注意 
• 処理に関わるすべてのデバイスを確認せよ 
• # cat /sys/block/<DEV_NAME>/queue/ 
scheduler
条件その2: I/O処理の内容(1) 
• Write() は基本的に効かない 
• O_DIRECT, O_SYNC をフラグ立ててればOK 
• -o sync でマウントされたファイルシステムならOK
条件その2: I/O処理の内容(2) 
• Read() もすべてに効くわけではない 
• ディスクキャッシュがあるとダメ 
• ディスクアクセスないから当然
まとめ 
• ionice は以下の 2条件を満たした時にちゃんと動く 
• I/O Scheduler が CFQ 
• 特定のI/O処理 
• キャッシュされていないファイルへのRead 
• 特殊フラグの立った Write
さいごに 
• man ioprio_set を読もう 
• ファイル作成フラグの細かいことはまた今度 
• O_SYNC, O_DSYNC, O_FSYNC… 
• ionice -p <PID> を使うと、起動中のプロセスのI/O優 
先度変更できるよ

More Related Content

What's hot

What's hot (20)

Nmapの真実(続)
Nmapの真実(続)Nmapの真実(続)
Nmapの真実(続)
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
CI/CDって何が良いの?〜言うてるオレもわからんわ〜 #DevKan
CI/CDって何が良いの?〜言うてるオレもわからんわ〜 #DevKanCI/CDって何が良いの?〜言うてるオレもわからんわ〜 #DevKan
CI/CDって何が良いの?〜言うてるオレもわからんわ〜 #DevKan
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
 
cloudpackサーバ仕様書(サンプル)
cloudpackサーバ仕様書(サンプル)cloudpackサーバ仕様書(サンプル)
cloudpackサーバ仕様書(サンプル)
 
OpenWhiskを使ってみた
OpenWhiskを使ってみたOpenWhiskを使ってみた
OpenWhiskを使ってみた
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 

Similar to その ionice、ほんとに効いてますか?

データフロー自動化ツールの考え方
データフロー自動化ツールの考え方データフロー自動化ツールの考え方
データフロー自動化ツールの考え方
fumoto kazuhiro
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
 
What is java_se_7
What is java_se_7What is java_se_7
What is java_se_7
TakumiIINO
 
落ちないアプリ開発の仕組み
落ちないアプリ開発の仕組み落ちないアプリ開発の仕組み
落ちないアプリ開発の仕組み
Kazunari Ebihara
 
Trac Plugin Developement with Jenkins
Trac Plugin Developement with JenkinsTrac Plugin Developement with Jenkins
Trac Plugin Developement with Jenkins
Takahisa Wada
 
kagami_comput2015_14
kagami_comput2015_14kagami_comput2015_14
kagami_comput2015_14
swkagami
 

Similar to その ionice、ほんとに効いてますか? (19)

Build an iOS app with ConcourseCI
Build an iOS app with ConcourseCIBuild an iOS app with ConcourseCI
Build an iOS app with ConcourseCI
 
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
 
データフロー自動化ツールの考え方
データフロー自動化ツールの考え方データフロー自動化ツールの考え方
データフロー自動化ツールの考え方
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
 
Checkpointing Algorithms on In-memory DBMS
Checkpointing Algorithms on In-memory DBMSCheckpointing Algorithms on In-memory DBMS
Checkpointing Algorithms on In-memory DBMS
 
What is java_se_7
What is java_se_7What is java_se_7
What is java_se_7
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
 
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
 
落ちないアプリ開発の仕組み
落ちないアプリ開発の仕組み落ちないアプリ開発の仕組み
落ちないアプリ開発の仕組み
 
Trac Plugin Developement with Jenkins
Trac Plugin Developement with JenkinsTrac Plugin Developement with Jenkins
Trac Plugin Developement with Jenkins
 
ログ先行書き込みを用いたストレージ差分取得の一手法
ログ先行書き込みを用いたストレージ差分取得の一手法ログ先行書き込みを用いたストレージ差分取得の一手法
ログ先行書き込みを用いたストレージ差分取得の一手法
 
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~
 
バージョン管理勉強会
バージョン管理勉強会バージョン管理勉強会
バージョン管理勉強会
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみたFOLIOのコードを動かしてみた
FOLIOのコードを動かしてみた
 
WalBの紹介
WalBの紹介WalBの紹介
WalBの紹介
 
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jpJava EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
 
kagami_comput2015_14
kagami_comput2015_14kagami_comput2015_14
kagami_comput2015_14
 

More from Narimichi Takamura

( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」
( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」
( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」
Narimichi Takamura
 

More from Narimichi Takamura (10)

Nginx バージョンアップ動向(2015/07〜2015/12)
Nginx バージョンアップ動向(2015/07〜2015/12)Nginx バージョンアップ動向(2015/07〜2015/12)
Nginx バージョンアップ動向(2015/07〜2015/12)
 
Dovecot & Postfix バージョンアップ動向 201506-201511
Dovecot & Postfix バージョンアップ動向 201506-201511Dovecot & Postfix バージョンアップ動向 201506-201511
Dovecot & Postfix バージョンアップ動向 201506-201511
 
Nginx バージョンアップ動向(2015/01〜2015/06)
Nginx バージョンアップ動向(2015/01〜2015/06)Nginx バージョンアップ動向(2015/01〜2015/06)
Nginx バージョンアップ動向(2015/01〜2015/06)
 
Dovecot & Postfix バージョンアップ動向 201401-201505
Dovecot & Postfix バージョンアップ動向 201401-201505Dovecot & Postfix バージョンアップ動向 201401-201505
Dovecot & Postfix バージョンアップ動向 201401-201505
 
ぼくとおこめとJSON
ぼくとおこめとJSONぼくとおこめとJSON
ぼくとおこめとJSON
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 5 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 5 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 5 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 5 章
 
Nginx バージョンアップ動向(2014/01〜2014/12)
Nginx バージョンアップ動向(2014/01〜2014/12)Nginx バージョンアップ動向(2014/01〜2014/12)
Nginx バージョンアップ動向(2014/01〜2014/12)
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
 
ぼくとおこめ
ぼくとおこめぼくとおこめ
ぼくとおこめ
 
( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」
( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」
( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」
 

その ionice、ほんとに効いてますか?