一,工具简介

compactsnoop工具在系统范围内跟踪压缩区,并打印各种详细信息。

那么什么是compact_memory?

是 Linux 内核提供的一个接口,用于主动触发内存整理(memory compaction)。内存整理是内核为了优化内存使用而进行的一种操作,它通过移动内存页来创建更大的连续内存块,从而满足某些内存分配请求对连续物理内存的需求。

当向 /proc/sys/vm/compact_memory 写入特定的值时,比如写入 1,就会触发系统主动进行一次内存整理。这种主动式的内存整理与系统在分配内存时由于当前内存分布无法满足应用需求而被动触发的内存整理相对。通过主动触发内存整理,系统可以在需要时提前优化内存布局,以提高后续内存分配的效率。 

注意,使能compact_memory,需要在内核编译时启用CONFIG_COMPACTION编译选项时才会生效。

那么在运行示例时,可以通过 echo 1 > /proc/sys/vm/compact_memory来手动触发系统所有的内存域压缩,使空闲的内存尽可能形成连续的内存块。

二,代码示例

#!/usr/bin/env python

from __future__ import print_function
from bcc import BPF
import argparse
import platform
from datetime import datetime, timedelta
import sys

# arguments
examples = """examples:
    
02-23 23:54