zoukankan      html  css  js  c++  java
  • sysrq mm log里Free swap、Total swap是什么含义?

    sysrq mm log里Free swap、Total swap是什么含义?

    [22634.588075] Free swap = 0kB
    [22634.588076] Total swap = 204796kB

    get_nr_swap_pages函数返回swap file或者swap device上空闲的“page frame”数目。本质上,swap file或者swap device上的磁盘空间都是给anonymous page做腾挪之用,其实这里的“page frame”不是真的page frame,我们称之swap page好了。get_nr_swap_pages函数返回了free swap page的数目。这里把free swap page的数目也计入free主要是因为可以把使用中的page frame swap out到free swap page上,因此也算是free page,虽然开销大了一点。至于NR_SLAB_RECLAIMABLE,那就更应该计入free page了,因为slab对象都已经标注自己的reclaim的了,当然是free page了。

    我们回到total_swap_pages这个变量,它其实就是系统可以将anonymous page交换到磁盘的大小,如果我们建立32MB的swap file或者swap device,那么total_swap_pages就是(32M/page size)。

    from: https://blog.csdn.net/jus3ve/article/details/80681655

     top cmd里swap部分字段含义

    Swap: 
    192772k total 交换区总量
    0k used 使用的交换区总量
    192772k free 空闲交换区总量
    123988k cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。

    获取所有进程使用swap总量script

    (此脚本可能还需要调试下才能拿到准确的数据)

    #!/vendor/bin/sh 
    #
    function getswap {
    SUM=0
    OVERALL=0
    for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
    PID=`echo $DIR | cut -d / -f 3`
    PROGNAME=`ps -p $PID -o comm |sed '1 d'`  #嵌入式设备上可能不支持--no-header,所以用sed d将ps的header line删除
    for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
    do
    let SUM=$SUM+$SWAP
    done
    echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
    let OVERALL=$OVERALL+$SUM
    SUM=0
    done
    echo "Overall swap used: $OVERALL"
    }
    getswap

    sysrq m输出log里swap相关信息含义

    [12480.103831] 0 pages in swap cache //0 page在swap cache
    [12480.107169] Swap cache stats: add 2918, delete 2918, find 0/161  //add表示到目前为止有往swap cache添加多少个page,每添加n个page,这个计数器增加n
    								//delete与add相反,从swap cache里delete page时,这个计数器将增加n(每delete n个page时)
    								//find后第一个数字表示在swap cache里查找一个swp_entry_t,如果有找到,表示此swp_entry_t对应的page在swap cache里,此数字对应的计数器自增1;如果没有找到,此计数器维持不变。
    								//find后第二个数字表示在swap cache里查找的总次数,不管有没有找到都会自增1
    
    [ 6888.563623] Free swap  = 204796kB //当前swap设备可用来存放swap page的空间大小,在往swap空间存入page后,这个可用大小减小;从这个swap空间取出返回到DRAM上,这个可用空间大小变大。
    [ 6888.566960] Total swap = 204796kB //swap空间总大小,即用来存在swap page总的空间大小

     查看系统里的swap area:

    console:/vendor/bin # cat /proc/swaps                                          
    Filename                                Type            Size    Used    Priority
    /dev/block/zram0                        partition       204796  13408   0

     如上,此系统里只有一个swap area,大小为200M,此swap空间已经用了~13M

    swap area可以有两种类型:swap partition和swap file,区别是swap partition在磁盘上是连续分布的,就像一个「裸」的磁盘设备一样,而swap file的内容则不一定连续分布,更像是基于磁盘设备的一个文件(参考这篇文章,需要注意的是,有时内核中会用"swapfile"这个术语统称这两者)。

    sysrq f swapents含义

    sysrq f触发oom,将打印各个进程内存使用情况,其中的swapents表示这个进程有多少个page swap out到了swap空间,这个数字也可以通过cat /proc/$pid/status查看VmSwap域得知,这两个size是要相等的,前者是以page为单位,后者以kB为单位,如下以wservicemanager进程为例,swapents为121 page,/proc/pid/status里的为484KB,121*4 = 484:

    [27006.386201] Tasks state (memory values in pages):
    [27006.390925] [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name
    [27006.399642] [   1636]     0  1636     9844     1154    86016      343         -1000 init
    [27006.407837] [   1637]     0  1637     9716     1029    90112      304         -1000 init
    [27006.415991] [   1638]     0  1638     9716     1287    81920      201         -1000 ueventd
    [27006.424444] [   2366]  1036  2366    36195     2410    94208      241         -1000 logd
    [27006.432560] [   2367]  1000  2367     8891      753    69632      121         -1000 servicemanager
    [27006.441627] [   2368]  1000  2368     9694     1138    77824      121         -1000 hwservicemanage
    [27006.450705] [   2370]  1000  2370     9054      749    69632      141         -1000 vndservicemanag
    [27006.459846] [   2378]     0  2378    33417     1769   122880      189         -1000 Binder:2378_2
    [27006.468783] [   2397]  2000  2397     8374      729    61440       33         -1000 sh

    /proc/pid/status

    VmRSS:      3012 kB
    RssAnon:             324 kB
    RssFile:            2572 kB
    RssShmem:            116 kB
    VmData:    11068 kB
    VmStk:       132 kB
    VmExe:        16 kB
    VmLib:      3164 kB
    VmPTE:        68 kB
    VmSwap:      484 kB

    上述swapents对应get_mm_counter(task->mm, MM_SWAPENTS)

























  • 相关阅读:
    【java】-- java并发包总结
    【Linux】-- Linux上java运行环境的配置(JDK+TOMCAT)
    【Redis】-- 安装及配置
    【redis】-- springboot集成redis及使用
    【写法规范】-- 设计请求返回接口与封装
    每日CSS_发光文本效果
    每日CSS_实时时钟效果
    每日CSS_霓虹灯按钮悬停效果
    CSS3全览_动画+滤镜
    CSS3全览_最新布局
  • 原文地址:https://www.cnblogs.com/aspirs/p/13977558.html
Copyright © 2011-2022 走看看