MIRACLE
メールサービス申込 ユーザー登録&ログイン パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

日本発のリナックス企業、ミラクル・リナックスで奮闘する社員のブログです。

ミラクル関連リンク

採用情報

サイト検索

2010年6月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

« Linux でシリアルコンソール | メイン | 謎のドラマ撮影 »

sarとproc

どうも、smorisakiです。

私は普段、ミラクル・リナックスにてプロダクトサポートをしているのですが、
この間お客様からの問合せで次の様な質問を受けました。
「sarで表示されるメモリの値は/procのmeminfoの値と同じか?」

因みにsarとはシステムのCPUやメモリ、ディスクI/O等の負荷データを表示するツールです。

sarは/procの中を見ているというのは良く聞く話だと思われます。
お客様への回答は「その通りです」なのですが、本当にそうなのかソースコードを確認してみることにしました。

結果は以下です。
OS:MIRACLE LINUX 2.1
sysstat(sarはsysstatパッケージに含まれています)のバージョン:4.0.7


(1)/proc/meminfoの値を取得している部分

対象ファイル:sadc.c
関数名:read_proc_meminfo()

   /* Open meminfo file */
   if ((memfp = fopen(MEMINFO, "r")) == NULL) { ←/proc/meminfoを開く
      file_stats.tlmkb = 0;
      file_stats.frmkb = 0;
      file_stats.shmkb = 0;
      file_stats.bufkb = 0;
      file_stats.camkb = 0;
      file_stats.tlskb = 0;
      file_stats.frskb = 0;
      file_stats.nr_active_pages         = 0;
      file_stats.nr_inactive_dirty_pages = 0;
      file_stats.nr_inactive_clean_pages = 0;
      file_stats.inactive_target         = 0;
      return;
   }

   while (fgets(line, 64, memfp) != NULL) { ←ここより下でmeminfoの中身をfile_stats構造体に保存

      if (!strncmp(line, "MemTotal:", 9))
         /* Read the total amount of memory in kB */
         sscanf(line + 10, "%8lu", &(file_stats.tlmkb));

      else if (!strncmp(line, "MemFree:", 8))
         /* Read the amount of free memory in kB */
         sscanf(line + 10, "%8lu", &(file_stats.frmkb));

                                    ・・・

(2)保存した値を出力している部分

対象ファイル:sar.c
関数名:write_stats()

 

   /* Print amount and usage of memory */
   if (GET_MEM_AMT(act)) {
      if (dis)
         printf(_("\n%-11s kbmemfree kbmemused  %%memused kbmemshrd kbbuffers  kbcached kbswpfree kbswpused  %%swpused\n"), cur_time[!curr]);

      printf("%-11s %9lu %9lu", cur_time[curr], ←ここより下で構造体の中身を表示
             file_stats[curr].frmkb,
             file_stats[curr].tlmkb - file_stats[curr].frmkb);
                 ・・・

実際の表示が以下なので、/procの中身を表示していると言うことが確認できました。

00:01:01    kbmemfree kbmemused  %memused kbmemshrd kbbuffers  kbcached kbswpfree kbswpused  %swpused
00:11:01        24108    230388     90.53       884     19904    122220    976752     51368      5.00

※厳密に言うと、sadcにて読み込まれた/procの情報はsa**ファイル(バイナリ)となります。
その後、sarに渡し我々が読める形のsar**ファイルとなります。

トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/4447/6812246

このページへのトラックバック一覧 sarとproc:

コメント

コメントを投稿

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.