/! \ Estado atual: Atualização 3 /! \
Alguns valores / proc / meminfo são uma soma ou uma diferença de alguns outros valores.
No entanto, não se fala muito sobre como eles são calculados nesses dois links (apenas faça ctrl-f meminfo
para chegar lá):
Além disso, eu também pesquisei aqui e ali, e aqui está o que eu encontrei até agora:
MemFree: LowFree + HighFree
Active: Active(anon) + Active(file)
Inactive: Inactive(anon) + Inactive(file)
Eu não encontrei muito sobre os outros campos, e onde eu tenho, os resultados não correspondem, como nestes posts do Stack Overflow:
Esses dois valores são calculados corretamente? Ou existe alguma variabilidade devido a algum meio externo?
Além disso, alguns valores não podem, obviamente, ser calculados sem valores externos, mas ainda estou interessado nisso.
Como são calculados os valores de /proc/meminfo
?
Se isso ajudar, veja um exemplo de /proc/meminfo
:
MemTotal: 501400 kB
MemFree: 38072 kB
MemAvailable: 217652 kB
Buffers: 0 kB
Cached: 223508 kB
SwapCached: 11200 kB
Active: 179280 kB
Inactive: 181680 kB
Active(anon): 69032 kB
Inactive(anon): 70908 kB
Active(file): 110248 kB
Inactive(file): 110772 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal:
HighFree:
LowTotal:
LowFree:
MmapCopy:
SwapTotal: 839676 kB
SwapFree: 785552 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 128964 kB
Mapped: 21840 kB
Shmem: 2488 kB
Slab: 71940 kB
SReclaimable: 41372 kB
SUnreclaim: 30568 kB
KernelStack: 2736 kB
PageTables: 5196 kB
Quicklists:
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1090376 kB
Committed_AS: 486916 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 4904 kB
VmallocChunk: 34359721736 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages:
ShmemPmdMapped:
CmaTotal:
CmaFree:
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 36800 kB
DirectMap2M: 487424 kB
DirectMap4M:
DirectMap1G:
Atualização 1 :
Este é o código usado por /proc/meminfo
para preencher seus dados:
link
No entanto, como não sou de um codificador, estou tendo dificuldades para descobrir onde essas enums (por exemplo, NR_LRU_LISTS
, etc) e variáveis globais (por exemplo, totalram_pages
de si_meminfo
in < href="http://elixir.free-electrons.com/linux/v4.15/source/mm/page_alloc.c#L4673"> page_alloc.c # L4673 ) estão preenchidos.
Atualização 2 :
A parte enums está agora resolvida e NR_LRU_LISTS
é igual a 5
.
Mas a parte totalram_pages
parece ser mais difícil de descobrir ...
Atualização 3 :
Parece que não vou conseguir ler o código, pois parece muito complexo.
Se alguém conseguir fazer isso e mostrar como /proc/meminfo
valures são calculados, ele / ela pode ter a recompensa.
Quanto mais detalhada for a resposta, maior será a recompensa.