Files
2023-11-10 09:53:14 +08:00

66 lines
2.4 KiB
Python

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#############################################################################
# Copyright (c) 2023 Huawei Technologies Co.,Ltd.
#
# openGauss is licensed under Mulan PSL v2.
# You can use this software according to the terms
# and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
# ----------------------------------------------------------------------------
# Description : A probe for memory-related information.
#############################################################################
import re
from base_utils.os.cmd_util import CmdUtil
from base_utils.os.memory_util import MemoryUtil
from base_utils.os.dmidecode_util import DmidecodeUtil, DMIType, DMITypeCategory
from impl.perf_config.basic.project import Project
from impl.perf_config.basic.probe import Probe
class MemoryInfo(Probe):
def __init__(self):
super(MemoryInfo, self).__init__()
self.total_size = lambda : MemoryUtil.getPhysicalMemTotalSize()
self.avail_size = lambda : MemoryUtil.getMemAvailableSize()
self.page_size = lambda : CmdUtil.execCmd('getconf PAGE_SIZE')
self.hugepage = None
self.dmi_physical_mem_array = None
self.dmi_all_devices = None
self.dmi_use_devices = None
def detect(self):
self._detect_dmidecode()
self._detect_hugepage()
def _detect_dmidecode(self):
if not Project.haveRootPrivilege():
return
self.dmi_physical_mem_array = DmidecodeUtil.getDmidecodeTableByType(DMIType.PHYSICAL_MEMORY_ARRAY)
self.dmi_all_devices = DmidecodeUtil.getDmidecodeTableByType(DMIType.MEMORY_DEVICE)
self.dmi_use_devices = []
for device in self.dmi_all_devices:
if device['Type'] != 'Unknown':
self.dmi_use_devices.append(device)
def _detect_hugepage(self):
self.hugepage = {'enabled': '', 'defrag': ''}
for key in self.hugepage:
cmd = f'cat /sys/kernel/mm/transparent_hugepage/{key}'
output = CmdUtil.execCmd(cmd)
self.hugepage[key] = re.findall('\[(.*?)\]', output)[0]