首页 > 系统相关 >内存管理-35-内存统计-1-各成员含义

内存管理-35-内存统计-1-各成员含义

时间:2024-09-15 20:47:15浏览次数:11  
标签:传参 alloc zone 含义 35 vmstat 内存 NR page

基于msm-5.4

一、vm_zone_stat[]

基础调用路径:

    clear_page_mlock //mlock.c 传参 (.., NR_MLOCK, ..)
    mlock_vma_page //mlock.c 传参 (.., NR_MLOCK, ..)
    account_kernel_stack //fork.c 传参 (.., NR_KERNEL_STACK_KB, ..)
    scs_account //scs.c 传参 (.., NR_KERNEL_SCS_BYTES, ..)
        mod_zone_page_state //vmstat.h
        __mod_zone_freepage_state //vmstat.h 传参: (zone, NR_FREE_PAGES, nr_pages)
        __mod_zone_freepage_state //vmstat.h 传参: (zone, NR_FREE_CMA_PAGES, nr_pages)
        munlock_vma_page //mlock.c 传参: (page_zone(page), NR_MLOCK, -nr_pages)
        __munlock_pagevec //mlock.c 传参: (zone, NR_MLOCK, delta_munlocked)
        rmqueue_bulk //page_alloc.c 传参: (zone, NR_FREE_CMA_PAGES, -(1 << order))
        rmqueue_bulk //page_alloc.c 传参: (zone, NR_FREE_PAGES, -(i << order))
        __lru_cache_add_active_or_unevictable //swap.c 传参: (.., NR_MLOCK, ..)
        mlock_migrate_page //mm/internal.h 传参: (page_zone(page), NR_MLOCK, -nr_pages)
        mlock_migrate_page //mm/internal.h 传参: (page_zone(newpage), NR_MLOCK, nr_pages)
        __update_lru_size //mm_inline.h 传参: (.., NR_ZONE_LRU_BASE, ..)
            __mod_zone_page_state //vmstat.c
            __inc_zone_state //vmstat.c
            __dec_zone_state //vmstat.c 见其它路径
            mod_zone_state //vmstat.c
                zone_page_state_add //vmstat.h  //可能不是这里
                    atomic_long_add(x, &vm_zone_stat[item]); 


    account_page_cleaned //page-writeback.c 传参: (page, NR_ZONE_WRITE_PENDING)
    clear_page_dirty_for_io //page-writeback.c 传参: (page, NR_ZONE_WRITE_PENDING)
    test_clear_page_writeback //page-writeback.c 传参: (page, NR_ZONE_WRITE_PENDING)
    __free_zspage //zsmalloc.c 传参:(page, NR_ZSPAGES)
    alloc_zspage //zsmalloc.c 传参:(pages[i], NR_ZSPAGES)
    zs_page_migrate //zsmalloc.c 传参:(page, NR_ZSPAGES)
    bounce_end_io //block/bounce.c 传参:(bvec->bv_page, NR_BOUNCE) CONFIG_BOUNCE 默认不使能
    pgtable_pte_page_dtor //linux/mm.h 传参:(page, NR_PAGETABLE)
        dec_zone_page_state  //vmstat.c 关本地中断调用
            __dec_zone_page_state //vmstat.c
            migrate_page_move_mapping //migrate.c 传参:(oldzone->zone_pgdat, NR_FILE_PAGES)
                __dec_zone_state //vmstat.h
                    atomic_long_dec(&vm_zone_stat[item])


    refresh_cpu_vm_stats(do_pagesets) //vmstat.c
    cpu_vm_stats_fold(cpu) //vmstat.c
        fold_diff(int *zone_diff, int *node_diff) //vmstat.c
            atomic_long_add(zone_diff[i], &vm_zone_stat[i]); 


    zone_pcp_reset(zone) //page_alloc.c
        drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset) //vmstat.c
            atomic_long_add(v, &vm_zone_stat[i]);


1.1. NR_FREE_PAGES 统计

        set_migratetype_isolate //page_isolation.c 传参:(zone, -nr_pages, mt) 将isolate的page移除
        unset_migratetype_isolate //page_isolation.c 传参: (zone, nr_pages, migratetype) 将unisolate的page加上
        set_page_guard //page_alloc.c 将用于guard的page从统计中移除
        clear_page_guard //page_alloc.c 将从guard取消的page加入统计中
    free_pcppages_bulk //page_alloc.c
    free_one_page //page_alloc.c
        __free_one_page //page_alloc.c 将free的page加入到统计中
        __isolate_free_page //page_alloc.c 将isolate的page从统计中移除
    get_page_from_freelist //page_alloc.c
        rmqueue //page_alloc.c 将从buddy中分配走的page从统计中移除
            __mod_zone_freepage_state //vmstat.h 传参: (zone, NR_FREE_PAGES, nr_pages)
            rmqueue_bulk //page_alloc.c 传参: (zone, NR_FREE_PAGES, -(i << order))
                __mod_zone_page_state //vmstat.c
                    zone_page_state_add //vmstat.h  //可能不是这里
                        atomic_long_add(x, &vm_zone_stat[item]); 

vm_zone_stat[NR_FREE_PAGES] 应该表示伙伴系统中空闲页面的数量。

cat /proc/meminfo 中的"MemFree" 字段显示的就是 vm_zone_stat[NR_FREE_PAGES]。cat /proc/vmstat 的 "nr_free_pages" 字段显示的也是它.

 

标签:传参,alloc,zone,含义,35,vmstat,内存,NR,page
From: https://www.cnblogs.com/hellokitty2/p/18415605

相关文章

  • LeetCode135.分发糖果(C#)
    题目描述:n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。示例......
  • Python中的内存池机制
    在Python中,内存管理是一个复杂但至关重要的主题,它直接关系到程序的性能和稳定性。Python的内存管理机制包括对象的分配、追踪以及回收,其中内存池(MemoryPool)是这一机制中的一个重要组成部分。内存池机制通过预先分配和重用小块内存来减少内存分配和释放的开销,从而提高程序的执......
  • 【第35章】Spring Cloud之Seata-Server快速入门
    文章目录前言一、准备1.架构图2.工作机制3.Seata术语4.事务模式4.1SeataAT模式(依赖数据库)4.2SeataTCC模式(不依赖数据库)4.3SeataSaga模式(支持长事务)4.4SeataXA模式(支持XA协议)二、安装1.下载2.解压3.重要属性4.修改配置4.1配置中心4.2注......
  • 清理内存还只会从桌面拖拽进回收站?进来学习清理内存的正确方式
    电脑清理内存的方法随着电脑的使用,内存会被不断的占用,如果不及时清理,会导致电脑运行变慢,甚至崩溃。因此,清理电脑内存是非常重要的。下面介绍几种清理电脑内存的方法。 首先,可以使用操作系统自带的工具来清理内存。Windows系统自带的“磁盘清理”工具可以帮助清理系统垃圾文件,清......
  • Go几种内存逃逸的情况
    main.gopackagemainimport"fmt"//指针(任何类型的指针)、slice和map作为返回值//当带有指针的返回值被赋给外部变量或者作为参数传递给其他函数时,编译器无法确定该变量何时停止使用//因此,为了确保安全性和正确性,它必须将该数据分配在堆上,并使其逃离当前函数作用域func......
  • 项目运行内存异常问题排查
    一:通过命令排查:有的时候在生产环境是无法使用Jprofiler等工具的,我们只能借助jdk提供的相关命令进行排查top:使用Top命令排查CPU消耗很高的进程top-H-ppid:查到进程消耗的CPU很高的情况下我们可以通过以下命令来定位到那个线程消耗的CPU高转换16进制:因为java中查看线程号使用......
  • 整数在内存中的存储&&原码反码补码
    目录1.整数在内存中以二进制的形式存在1.1(正数存储情况)1.2负数存储情况1.3整数的补码如何得到原码2.无符号整数的原反补码 小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化! 1.整数在内存中以二进制的形式存在1.1(正数存储情况)比如说数字2......
  • Linux内存管理方式
    Linux内存管理涉及到多个方面,包括物理内存的分配和回收、虚拟内存的管理、页面置换、内存保护等。以下是Linux内存管理的主要方式和机制:1.虚拟内存(VirtualMemory)虚拟地址空间:每个进程拥有自己的虚拟地址空间,虚拟地址空间与物理内存是分开的。进程在运行时使用虚拟地......
  • C语言进阶【3】---C语言内存函数(你确定你很了解内存函数吗?)
    本章概述本章函数概述memcpy使用和模拟memmove使用和模拟memset函数的使用memcmp函数的使用彩蛋时刻!!!本章函数概述我们在本章的博客中讲的内容是有关内存的操作,我们直接通过内存块对数据进行操作。因为我们是直接对内存块操作,所以可以对任意类型数据进行操作(我们没......
  • 记一次 公司.NET项目部署在Linux环境压测时 内存暴涨分析
    一:背景讲故事公司部署在某碟上的项目在9月份压测50并发时,发现某个容器线程、内存非正常的上涨,导致功能出现了异常无法使用。根据所学,自己分析了下线程和内存问题,分析时可以使用lldb或者windbg,但是个人比较倾向于界面化的windbg,所以最终使用windbg开干。二:WinDbg分析到底是......