93
script/base_utils/os/cpu_util.py
Normal file
93
script/base_utils/os/cpu_util.py
Normal file
@ -0,0 +1,93 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
#############################################################################
|
||||
# Copyright (c) 2020 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 : cpu.py is a utility to do something for cpu information.
|
||||
#############################################################################
|
||||
|
||||
try:
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import multiprocessing
|
||||
sys.path.append(sys.path[0] + "/../../")
|
||||
from base_utils.common.constantsbase import ConstantsBase
|
||||
from gspylib.common.ErrorCode import ErrorCode
|
||||
except ImportError as e:
|
||||
sys.exit("[GAUSS-52200] : Unable to import module: %s." % str(e))
|
||||
|
||||
"""
|
||||
Requirements:
|
||||
1. getCpuNum(): get real cpu number.
|
||||
2. getCpuOnlineOfflineInfo(is_onnline_cpu): get cpu online/offline information
|
||||
"""
|
||||
|
||||
|
||||
class CpuUtil(object):
|
||||
"""
|
||||
function: Init the CpuInfo options
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def getCpuNum():
|
||||
"""
|
||||
function : get cpu set of current board
|
||||
input : null
|
||||
output : total CPU count
|
||||
"""
|
||||
try:
|
||||
return multiprocessing.cpu_count()
|
||||
except Exception as excep:
|
||||
raise Exception(ErrorCode.GAUSS_523["GAUSS_52301"] + str(excep))
|
||||
|
||||
@staticmethod
|
||||
def getCpuOnlineOfflineInfo(is_onnline_cpu=True):
|
||||
"""
|
||||
cat /sys/devices/system/cpu/online or /sys/devices/system/cpu/offline
|
||||
"""
|
||||
online_file_name = "/sys/devices/system/cpu/online"
|
||||
offline_file_name = "/sys/devices/system/cpu/offline"
|
||||
|
||||
if is_onnline_cpu:
|
||||
file_name = online_file_name
|
||||
else:
|
||||
file_name = offline_file_name
|
||||
|
||||
if not os.path.exists(file_name):
|
||||
raise Exception(ErrorCode.GAUSS_502["GAUSS_50201"] % file_name)
|
||||
if not os.path.isfile(file_name):
|
||||
raise Exception(ErrorCode.GAUSS_502["GAUSS_50210"] % file_name)
|
||||
|
||||
cmd = "cat '%s' 2>/dev/null" % file_name
|
||||
status, output = subprocess.getstatusoutput(cmd)
|
||||
if status == 0:
|
||||
return output
|
||||
raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
|
||||
" Error: \n%s" % str(output))
|
||||
|
||||
@staticmethod
|
||||
def getCpuSet():
|
||||
"""
|
||||
function: get cpu set of current board
|
||||
cat /proc/cpuinfo |grep processor
|
||||
input: NA
|
||||
output: cpuSet
|
||||
"""
|
||||
# do this function to get the parallel number
|
||||
cpu_set = multiprocessing.cpu_count()
|
||||
if cpu_set > 1:
|
||||
return cpu_set
|
||||
return ConstantsBase.DEFAULT_PARALLEL_NUM
|
||||
Reference in New Issue
Block a user