ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- memstrack.service000064400000000502152346366460010130 0ustar00[Unit] Description=Memstrack Anylazing Service DefaultDependencies=no Before=dracut-cmdline.service systemd-udevd.service local-fs-pre.target IgnoreOnIsolate=true [Service] Type=simple ExecStart=/bin/memstrack-start PIDFile=/run/memstrack.pid StandardInput=null StandardOutput=syslog+console StandardError=syslog+console memstrack-report.sh000075500000000712152346366460010421 0ustar00#!/usr/bin/bash . /lib/dracut-lib.sh if ! [ "$DEBUG_MEM_LEVEL" -ge 4 ]; then return 0 fi if type -P systemctl >/dev/null; then systemctl stop memstrack.service else get_pid_of_tracer () { local _user _pid _rest read _user _pid _rest <<< $(ps aux | grep [m]emstrack | head -1) echo $_pid } kill -s INT $(get_pid_of_tracer) while [[ -n $(get_pid_of_tracer) ]]; do sleep 1 done fi cat /.memstrack module-setup.sh000075500000001160152346366460007543 0ustar00#!/usr/bin/bash check() { if find_binary memstrack >/dev/null; then dinfo "memstrack is available" return 0 fi dinfo "memstrack is not available" dinfo "If you need to use rd.memdebug>=4, please install memstrack" return 1 } depends() { return 0 } install() { inst "/bin/memstrack" "/bin/memstrack" inst "$moddir/memstrack-start.sh" "/bin/memstrack-start" inst_hook cleanup 99 "$moddir/memstrack-report.sh" inst "$moddir/memstrack.service" "$systemdsystemunitdir/memstrack.service" systemctl -q --root "$initdir" add-wants initrd.target memstrack.service } memstrack-start.sh000075500000003416152346366460010247 0ustar00#!/bin/sh # Mount kernel debug fs so debug tools can work. # memdebug=4 and memdebug=5 requires debug fs to be mounted. # And there is no need to umount it. type getargnum >/dev/null 2>&1 || . /lib/dracut-lib.sh # "sys/kernel/tracing" has the priority if exists. get_trace_base() { # trace access through debugfs would be obsolete if "/sys/kernel/tracing" is available. if [ -d "/sys/kernel/tracing" ]; then echo "/sys/kernel" else echo "/sys/kernel/debug" fi } is_debugfs_ready() { [ -f "$(get_trace_base)/tracing/trace" ] } prepare_debugfs() { local trace_base trace_base=$(get_trace_base) # old debugfs interface case. if ! [ -d "$trace_base/tracing" ]; then mount none -t debugfs $trace_base # new tracefs interface case. elif ! [ -f "$trace_base/tracing/trace" ]; then mount none -t tracefs "$trace_base/tracing" fi if ! [ -f "$trace_base/tracing/trace" ]; then echo "WARN: failed to mount debugfs" return 1 fi } if ! is_debugfs_ready ; then prepare_debugfs fi if [ -n "$DEBUG_MEM_LEVEL" ]; then if [ "$DEBUG_MEM_LEVEL" -ge 5 ]; then echo "memstrack - will report kernel module memory usage summary and top allocation stack" memstrack --report module_summary,module_top --notui --throttle 80 -o /.memstrack & elif [ "$DEBUG_MEM_LEVEL" -ge 4 ]; then echo "memstrack - will report memory usage summary" memstrack --report module_summary --notui --throttle 80 -o /.memstrack & else exit 0; fi fi PID=$! RET=$? if [ $RET -ne 0 ]; then echo "Failed to start memstrack, exit status: $RET" exit $RET fi # Wait a second for memstrack to setup everything, avoid missing any event sleep 1 echo $PID > /run/memstrack.pid disown