コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2025年2月22日 >>> 2025年2月9日
link もっと後

2025年2月17日

LinuxのI/O統計情報

目次: Linux

Linuxは各プロセスがどれくらいI/Oを行ったか記録していて、procファイルシステムの/proc/[pid]/ioファイルから読み出すことができます。

各フィールドの意味についてはUbuntuのマニュアル(Ubuntu Manpage: proc - プロセスの情報を含む疑似ファイルシステム)が日本語でも読めるしわかりやすいです。

I/O統計情報(/proc/[pid]/io)の例
(catを起動する、pidは1690787)

$ cat /proc/1690787/io

rchar: 3980
wchar: 0
syscr: 9
syscw: 0
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0

(catにaとEnterを入力する)

$ cat /proc/1690787/io

rchar: 3982
wchar: 2
syscr: 10
syscw: 1
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0

例としてaとEnterをcatに入力してみました。読み出し側を見てみると、rcharが2増えているのでaと改行文字の2バイトを、syscrが1増えているので1回のread()システムコールで読み出しているのでしょう。read_bytesが増えていないところを見ると、ファイルではなく端末から読み出したことも推測できます。

書き込み側はwcharが2増えているのでaと改行文字の2バイトを、syscwが1増えているので1回のwrite()システムコールで端末に書き出したと推測できます。読み込み側と異なり、書き込み側はファイルシステム層に書き出したかどうかは不明な仕様です。

I/O統計情報を有効にする方法

最近のUbuntuやDebianであればデフォルト有効ですが、わざと無効にしているシステムもあるので有効にする方法を紹介しておきます。

LinuxカーネルのCONFIG_TASK_IO_ACCOUNTINGを有効にすると使用できます。CONFIG_TASK_XACCT、CONFIG_TASKSTATSに依存しているので合わせて有効にする必要があります。menuconfigから有効にする場合は下記の場所にあります。

TASK_IO_ACCOUNTINGの設定位置
General setup  --->
  CPU/Task time and stats accounting  --->
    [*] Export task/process statistics through netlink
    [*]   Enable extended accounting over taskstats
    [*]     Enable per-task storage I/O accounting

ちなみにx86_64向けではデフォルトコンフィグarch/x86/configs/x86_64_defconfigで太古の昔、2008年くらい(2.6.30くらいの時代)から有効になっています。

編集者:すずき(2025/02/23 00:29)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2025年2月10日

100万回のHello, World! - 補足

目次: ベンチマーク

前回はループ、再帰なし、1000バイト以下で100万回のHello, World!を実施する問題に対し、バイナリサイズを104バイトまで削るためのアイデアと実装方法をご紹介しました。

100万回のHello, World!プログラムの方は所定の範囲に収まって動作しているので、特に変えなくて良いです。気になるとすれば、プログラムの終了ステータスがエラー(今は60)になっている程度です。原因はexitシステムコールに渡す引数が0ではないからで、syscall命令を呼ぶ前にrdiを0にすれば直ります。まあ、できたら良いな程度で動作には関係ありません。

Linuxのシステムコール呼び出し規約は下記のようになっています。

syscall numreturnarg1arg2arg3arg4arg5arg6
rax rax rdi rsi rdx r10 r8 r9

バイナリファイルのサイズをこれ以上短くしようとするなら、ELFヘッダとプログラムヘッダをさらに重ねる必要があります。ELFヘッダとプログラムヘッダを完全に重ねると64バイト(2020年7月5日の日記参照)になりますが、プログラムはSegmentation Faultになってしまって動作しませんから、動作可能な重ね方を探す必要があります。

編集者:すずき(2025/02/12 00:32)

コメント一覧

  • hdkさん(2025/02/12 08:01)
    なるほど、最後に%rdiを0にするのはこれでいけますね!
    --ADDRS----F1---F2-
    0000000A 01 3C
    0000000B 58 6A
    0000000C 89 01
    0000000D C7 58
    0000000E 90 50
    00000028 90 5F
    00000063 A5 A7
    00000064 6A 58
    00000065 3C 53
    00000067 A3 A7
  • hdkさん(2025/02/12 08:06)
    あ、すみません、比較元に間違いがありました...
    0000000F 68 BE
    00000028 5E 5F
  • すずきさん(2025/02/13 02:03)
    解読しました。なるほど、exitの引数が0になっていい感じです〜。

    _start:
    mov %ebx, 1000000
    push 0x3c

    _loop:
    push 0x1
    pop %rax
    push %rax

    _last:
    //mov esi,imm inst
    .byte 0xbe
    .word 0x0002
    .word 0x003e

    _second:
    mov %dl, 0x0e
    jmp _third

    _third:
    pop %rdi
    add %esi, 0x46
    syscall
    jmp _fourth

    _fourth:
    dec %ebx
    jne _loop
    pop %rax
    push %rbx
    jmp _last
open/close この記事にコメントする



link もっと前
2025年2月22日 >>> 2025年2月9日
link もっと後

管理用メニュー

link 記事を新規作成

<2025>
<<<02>>>
------1
2345678
9101112131415
16171819202122
232425262728-

最近のコメント5件

  • link 25年2月10日
    すずきさん (02/13 02:03)
    「解読しました。なるほど、exitの引数が...」
  • link 25年2月10日
    hdkさん (02/12 08:06)
    「あ、すみません、比較元に間違いがありまし...」
  • link 25年2月10日
    hdkさん (02/12 08:01)
    「なるほど、最後に%rdiを0にするのはこ...」
  • link 20年6月29日
    すずきさん (02/12 00:12)
    「お役に立ったようであれば幸いです。」
  • link 25年2月7日
    すずきさん (02/12 00:11)
    「なるほど。動きそうなのになんで動かないん...」

最近の記事20件

  • link 23年4月28日
    すずき (02/23 00:31)
    「[Linuxの/dev/zeroの実装] 目次: LinuxTwitterで/dev/zeroの話をしている人が居て、そういえ...」
  • link 23年4月10日
    すずき (02/23 00:30)
    「[Linux - まとめリンク] 目次: Linux関係の深いまとめリンク。目次: RISC-V目次: ROCK64/ROCK...」
  • link 25年2月17日
    すずき (02/23 00:29)
    「[LinuxのI/O統計情報] 目次: LinuxLinuxは各プロセスがどれくらいI/Oを行ったか記録していて、procファ...」
  • link 21年12月28日
    すずき (02/20 00:28)
    「[ゲーム - まとめリンク] 目次: ゲーム一覧が欲しくなったので作りました。Wizardry(囚われし亡霊の街)敵が強すぎる...」
  • link 25年1月23日
    すずき (02/20 00:27)
    「[首都高バトルSteam版] 目次: ゲーム首都高バトルSteam版を買いました。首都高バトルシリーズは2006年の「首都高バ...」
  • link 25年2月4日
    すずき (02/16 23:34)
    「[次のWindows 11でE480が見捨てられそう] 今使っているノートPC(Lenovo ThinkPad E480)のC...」
  • link 25年1月30日
    すずき (02/16 22:10)
    「[Thunderbirdの消せないツールバー] Thunderbird 115.0(Supernova, 2023/07/11...」
  • link 25年2月3日
    すずき (02/16 18:37)
    「[不思議なChromeの広告] Google ChromeでYahoo!を見ているとたまにChromeの広告が表示されます。C...」
  • link 25年1月27日
    すずき (02/16 16:37)
    「[Ansibleのencrypted variablesをdecryptする] Ansibleのencrypt_stringで...」
  • link 21年5月22日
    すずき (02/12 00:33)
    「[ベンチマーク - まとめリンク] 目次: ベンチマーク一覧が欲しくなったので作りました。最速のyes不安定なyesyesの高...」
  • link 25年2月10日
    すずき (02/12 00:32)
    「[100万回のHello, World! - 補足] 目次: ベンチマーク前回はループ、再帰なし、1000バイト以下で100万...」
  • link 25年2月7日
    すずき (02/10 02:45)
    「[100万回のHello, World! - バイナリサイズを削って遊ぼう、112バイトから104バイトへ] 目次: ベンチマ...」
  • link 25年1月31日
    すずき (02/03 23:21)
    「[Windowsの日本語フォントはみな長生き] GNOME48からフォントが変わるニュースを見ていて、フォントを作成するのが割...」
  • link 22年12月22日
    すずき (01/19 04:20)
    「[x86とARMとRISC-VでCoreMark対決] 目次: RISC-VCoreMarkを以前(2019年7月5日の日記参...」
  • link 24年9月20日
    すずき (01/14 01:32)
    「[Java - まとめリンク] 目次: JavaJavaのGUIライブラリSwingの本を買いましたSwingでウインドウ表示...」
  • link 17年2月12日
    すずき (01/14 01:32)
    「[IntelliJ IDEAのデバッガと巨大なリスト] 目次: JavaIntelliJ IDEAのデバッガは大変使いやすくて...」
  • link 05年3月16日
    すずき (01/14 01:29)
    「[EclipseでJavaを書いてみようかな] 目次: JavaEclipseの使い方がなんとなくわかってきたのでJavaで何...」
  • link 04年4月29日
    すずき (01/14 01:26)
    「[Swingでウインドウ表示] 目次: JavaせっせとJava + Swingに取り組んでいました。ウインドウの中にウインド...」
  • link 15年6月17日
    すずき (01/14 01:22)
    「[IntelliJ IDEA 14の自動インデント] 目次: JavaIntelliJ IDEA 14のエディタにはコードを選...」
  • link 14年12月28日
    すずき (01/14 01:22)
    「[Javaの継承と委譲] 目次: Java今日、初めて 〜Java 7の単一継承でつまづきました。Javaなら継承じゃなくて、...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 2025年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 02/23 00:31