оптимизация zram_stat
This commit is contained in:
parent
39677bb7f6
commit
227ff86be0
41
nohang
41
nohang
@ -106,36 +106,22 @@ def human(num):
|
|||||||
|
|
||||||
# возвращает disksize и mem_used_total по zram id
|
# возвращает disksize и mem_used_total по zram id
|
||||||
def zram_stat(zram_id):
|
def zram_stat(zram_id):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open('/sys/block/' + zram_id + '/disksize') as file:
|
disksize = rline1('/sys/block/' + zram_id + '/disksize')
|
||||||
disksize = file.readlines()
|
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
return '0', '0'
|
return '0', '0'
|
||||||
|
|
||||||
if disksize == ['0\n']:
|
if disksize == ['0\n']:
|
||||||
return '0', '0'
|
return '0', '0'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
mm_stat = rline1('/sys/block/' + zram_id + '/mm_stat').split(' ')
|
||||||
with open('/sys/block/' + zram_id + '/mm_stat') as file:
|
|
||||||
mm_stat = file.readlines()[0][:-1].split(' ')
|
|
||||||
|
|
||||||
mm_stat_list = []
|
mm_stat_list = []
|
||||||
|
|
||||||
# улучшить, сократить цикл
|
|
||||||
for i in mm_stat:
|
for i in mm_stat:
|
||||||
if i != '':
|
if i != '':
|
||||||
mm_stat_list.append(i)
|
mm_stat_list.append(i)
|
||||||
|
|
||||||
mem_used_total = mm_stat_list[2]
|
mem_used_total = mm_stat_list[2]
|
||||||
|
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
|
mem_used_total = rline1('/sys/block/' + zram_id + '/mem_used_total')
|
||||||
with open('/sys/block/' + zram_id + '/mem_used_total') as file:
|
return disksize, mem_used_total # BYTES, str
|
||||||
mem_used_total = file.readlines()[0][:-1]
|
|
||||||
|
|
||||||
return disksize[0][:-1], mem_used_total # BYTES, str
|
|
||||||
|
|
||||||
|
|
||||||
# имя через пид
|
# имя через пид
|
||||||
@ -156,20 +142,15 @@ def find_victim_and_send_signal(signal):
|
|||||||
decrease_oom_score_adj(oom_score_adj_before, oom_score_adj_after)
|
decrease_oom_score_adj(oom_score_adj_before, oom_score_adj_after)
|
||||||
|
|
||||||
#print('Find victim...')
|
#print('Find victim...')
|
||||||
|
|
||||||
oom_list = []
|
oom_list = []
|
||||||
|
|
||||||
for i in os.listdir('/proc'):
|
for i in os.listdir('/proc'):
|
||||||
|
|
||||||
if i.isdigit() is not True:
|
if i.isdigit() is not True:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open('/proc/' + i + '/oom_score') as file:
|
oom_score = int(rline1('/proc/' + i + '/oom_score'))
|
||||||
oom_score = int(file.readlines()[0][:-1])
|
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
oom_score = 0
|
oom_score = 0
|
||||||
|
|
||||||
oom_list.append((i, oom_score))
|
oom_list.append((i, oom_score))
|
||||||
|
|
||||||
# получаем список пар (pid, oom_score)
|
# получаем список пар (pid, oom_score)
|
||||||
@ -178,9 +159,7 @@ def find_victim_and_send_signal(signal):
|
|||||||
|
|
||||||
# посылаем сигнал
|
# посылаем сигнал
|
||||||
if oom_score >= oom_score_min:
|
if oom_score >= oom_score_min:
|
||||||
|
|
||||||
pid = pid_tuple_list[0]
|
pid = pid_tuple_list[0]
|
||||||
|
|
||||||
name = pid_to_name(pid)
|
name = pid_to_name(pid)
|
||||||
|
|
||||||
print(
|
print(
|
||||||
@ -227,7 +206,6 @@ mem_total = int(mem_list[0].split(':')[1].split(' ')[-2])
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
config_dict = config_parser(config)
|
config_dict = config_parser(config)
|
||||||
|
|
||||||
if config_dict is 1:
|
if config_dict is 1:
|
||||||
@ -318,8 +296,6 @@ else:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def sig_level_to_kb(string):
|
def sig_level_to_kb(string):
|
||||||
if string.endswith('%'):
|
if string.endswith('%'):
|
||||||
return float(string[:-1].strip()) / 100 * mem_total
|
return float(string[:-1].strip()) / 100 * mem_total
|
||||||
@ -338,8 +314,6 @@ zram_max_sigkill_kb = sig_level_to_kb(zram_max_sigkill)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# возвращает число килобайт при задании в конфиге абсолютного значения,
|
# возвращает число килобайт при задании в конфиге абсолютного значения,
|
||||||
# или кортеж с числом процентов
|
# или кортеж с числом процентов
|
||||||
def sig_level_to_kb_swap(string):
|
def sig_level_to_kb_swap(string):
|
||||||
@ -456,16 +430,11 @@ while True:
|
|||||||
# находим MemUsedZram
|
# находим MemUsedZram
|
||||||
disksize_sum = 0
|
disksize_sum = 0
|
||||||
mem_used_total_sum = 0
|
mem_used_total_sum = 0
|
||||||
|
|
||||||
for dev in os.listdir('/sys/block'):
|
for dev in os.listdir('/sys/block'):
|
||||||
|
|
||||||
if dev.startswith('zram'):
|
if dev.startswith('zram'):
|
||||||
|
|
||||||
stat = zram_stat(dev)
|
stat = zram_stat(dev)
|
||||||
|
|
||||||
disksize_sum += int(stat[0])
|
disksize_sum += int(stat[0])
|
||||||
mem_used_total_sum += int(stat[1])
|
mem_used_total_sum += int(stat[1])
|
||||||
|
|
||||||
mem_used_zram = (
|
mem_used_zram = (
|
||||||
mem_used_total_sum + disksize_sum * zram_disksize_factor
|
mem_used_total_sum + disksize_sum * zram_disksize_factor
|
||||||
) / 1024.0
|
) / 1024.0
|
||||||
|
Loading…
Reference in New Issue
Block a user