コグノスケ


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

link もっと前
2018年1月28日 >>> 2018年1月28日
link もっと後

2018年1月28日

LinuxのCMAとTHPその3

目次: Android

半年くらい前(2017年9月30日の日記参照)にCMAを調べたときはわからなかった問題が一つ解決しました。

  • THPがCMAを使い切っちゃう問題
  • ユーザプロセスがCMA全然使わない問題
  • 誰が使ってるのこれ?問題

悩みはこの3つで、1つ目はほぼ解決(THPを使わない)していて、2つ目は未だに良くわからないままです。今回は3つ目の問題が解消しました。

実はみんな使ってたCMA

前回の調査では/proc/meminfoを調べていて、CmaFreeの項目がなかったため、誰もCMAを使っていないのではないかと思っていました。

ZenFone 3 Deluxeの /proc/meminfo
MemTotal:        3687912 kB
MemFree:          380032 kB
MemAvailable:    1527068 kB
Buffers:           51344 kB
Cached:          1137352 kB
SwapCached:         5848 kB
Active:          1483616 kB
Inactive:         784324 kB
Active(anon):     897704 kB
Inactive(anon):   203852 kB
Active(file):     585912 kB
Inactive(file):   580472 kB
Unevictable:        3632 kB
Mlocked:            3632 kB
SwapTotal:        524284 kB
SwapFree:          70164 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:       1080040 kB
Mapped:           587568 kB
Shmem:             22300 kB
Slab:             210492 kB
SReclaimable:      79676 kB
SUnreclaim:       130816 kB
KernelStack:       39184 kB
PageTables:        43764 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2368240 kB
Committed_AS:   71185752 kB
VmallocTotal:   258998208 kB
VmallocUsed:      157168 kB
VmallocChunk:   258691972 kB
★★CmaTotalやCmaFreeが無いのに…★★

ふと/proc/pagetypeinfoを見たところCMAの項目が出ました。meminfoには出ないのにpagetypeinfoには出てくるの??

ZenFone 3 Deluxeの /proc/pagetypeinfo
Page block order: 10
Pages per block:  1024

Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10
Node    0, zone      DMA, type    Unmovable  53146  18233    851      1      0      0      0      0      0      0      0
Node    0, zone      DMA, type  Reclaimable   1938    120      9      3      0      0      0      0      0      0      0
Node    0, zone      DMA, type      Movable    195     17     12      3      0      0      0      0      0      0      0
Node    0, zone      DMA, type          CMA      0      0      0      0      0      0      0      0      0      0      0
Node    0, zone      DMA, type      Reserve      0      1     16      0      0      0      0      0      0      0      0
Node    0, zone      DMA, type      Isolate      0      0      0      0      0      0      0      0      0      0      0

Number of blocks type     Unmovable  Reclaimable      Movable          CMA      Reserve      Isolate
Node 0, zone      DMA          539           35          298           51            2            0
★★MIGRATE_CMAがカウントされている★★

他の機種を見てもmeminfoにはCMAの項目はなくpagetypeinfoにCMAの項目が出ていました。なぜmeminfoに表示されないのかわかりませんが、理由は後で考えるとして、一番下に出てくるNumber of blocksが知りたかった情報です。

行がZoneを表します。ZenFoneはZone DMAしかありません。機種によってはZone DMAとZone Normalの2本立てになっていることもあります。

列がMIGRATE_TYPEです。数値の単位はページでは無くブロックです。ブロックはpagetypeinfoの先頭に「Pages per block: 1024」とある通り、1ブロック=1024ページです。ARMは1ページ4KBなので1ブロックは4MBになります。1ブロックのページ数はカーネルコンフィグによって変わりますので、どの機種でも常に4MBではないことに注意です。

CMAの利用量

さてZenFone 3 Deluxe ZS550KLというかQualcomm Snapdragon 625のシステム構成という方が近いかもしれませんが…、Linuxが管理している全体のブロック数は925ブロック(3788800KB)で、CMAは51ブロック(208896KB)のようです。

物理的に搭載されているRAMが4GBらしいのでLinuxの管理外となっている領域は、4194304 - 3788800 = 405504KBだと思われます。かなり大きいです。もしかするとデコード/エンコード用の領域はこちらから取っているのかもしれません。

またmeminfoによればMemTotalが3687912KBですので、Linux管理内だけど使うことができないReserved領域は、3788800 - 3687912 = 100888KBだと思われます。内訳はわかりませんが、多くも少なくもないと思います。たぶん。

1. 物理搭載メモリ 4194304KB
2. Linux管理内 3788800KB
3. Linux管理外(1. - 2.) 405504KB
4. MemTotal 3687912KB
5. Reserved領域(2. - 4.) 100888KB

私の推測としてはCMA領域(204MB)では4K動画をデコード/エンコードするには足りなさそうなので、Linux管理外の領域を使っているんだろうなーと思います。

meminfoとCMAの謎

どうしてpagetypeinfoにはCMAの項目があって、meminfoにはCMAの項目がないのか?カーネルのコードを見る限りCONFIG_CMAが有効になっていたら必ずmeminfoに項目が出るはずなのに、出てこない理由が良くわかりません。

手持ちのAndroid機器を見ていたら、カーネルバージョンがやたら古いことに気づきました。Android機器ってほとんどLinux 3.18とか3.10とか…、とかく3.x系のバージョンが多くないですか?

ああ、これまさか、古いバージョンのカーネルだとmeminfoにCMAの項目が出ないのか??と思って、3.x系のカーネルのコードを見ると、meminfoにCMAが表示されるようになったのが3.19以降であることがわかりました。

道理でmeminfoにCMAの項目が出ない訳ですよ。こんな単純なことに気づかなかったとは……orz

編集者:すずき(2023/09/24 08:50)

コメント一覧

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



link もっと前
2018年1月28日 >>> 2018年1月28日
link もっと後

管理用メニュー

link 記事を新規作成

<2018>
<<<01>>>
-123456
78910111213
14151617181920
21222324252627
28293031---

最近のコメント5件

  • link 20年6月19日
    すずきさん (04/06 22:54)
    「ディレクトリを予め作成しておけば良いです...」
  • link 20年6月19日
    斎藤さん (04/06 16:25)
    「「Preferencesというメニューか...」
  • link 21年3月13日
    すずきさん (03/05 15:13)
    「あー、このプログラムがまずいんですね。ご...」
  • link 21年3月13日
    emkさん (03/05 12:44)
    「キャストでvolatileを外してアクセ...」
  • link 24年1月24日
    すずきさん (02/19 18:37)
    「簡単にできる方法はPowerShellの...」

最近の記事3件

  • link 24年4月17日
    すずき (04/18 22:44)
    「[VSCodeとMarkdownとPlantUMLのローカルサーバー] 目次: LinuxVSCodeのPlantUML Ex...」
  • link 23年4月10日
    すずき (04/18 22:30)
    「[Linux - まとめリンク] 目次: Linuxカーネル、ドライバ関連。Linuxのstruct pageって何?Linu...」
  • link 20年2月22日
    すずき (04/17 02:22)
    「[Zephyr - まとめリンク] 目次: Zephyr導入、ブート周りHello! Zephyr OS!!Hello! Ze...」
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 過去日記について

その他の情報

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

合計:  counter total
本日:  counter today

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

最終更新: 04/18 22:44