0%

动态内存分配脚本

背景

电商的样本数据规模会随着时间变化,那么一些小时级别的训练任务对内存等资源的需求也是动态变化的。如果忽视这种动态变化,用固定的内存来应对所有小时的任务,就会导致资源浪费。
因此,我想出了一种随着小时动态调整内存分配的方法,这样可以为样本多的任务分配更多内存,在样本少的任务中减少内存。

脚本

需要先观察样本随时间的变化规律,设定好内存峰值和低值及其对应的时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash

# 输入两位数字符串小时
read -p "请输入小时(例如\"03\"、\"14\"、\"23\"): " hr

# 已知点
h1=5; m1=28
h2=12; m2=14
h3=29; m3=28

# 转整数(避免前导零被当作八进制)
hr_int=$((10#$hr))
if [ "$hr_int" -lt "$h1" ]; then
hr_int=$((hr_int + 24))
fi

# 选择区间并线性插值(带四舍五入)
if [ "$hr_int" -ge "$h1" ] && [ "$hr_int" -le "$h2" ]; then
left=$h1; right=$h2; ml=$m1; mr=$m2
else
left=$h2; right=$h3; ml=$m2; mr=$m3
fi

den=$((right - left))
num=$(( ml * (right - hr_int) + mr * (hr_int - left) ))
# 四舍五入
memory=$(( (num + den/2) / den ))

# 输出字符串形式
printf "%d\n" "$memory"

测试结果

1
2
3
4
5
6
7
8
9
10
11
12
root@mail:~/code# ./dynamic_men.sh
请输入小时(例如"03""14""23"): 15
16
root@mail:~/code# ./dynamic_men.sh
请输入小时(例如"03""14""23"): 11
16
root@mail:~/code# ./dynamic_men.sh
请输入小时(例如"03""14""23"): 21
21
root@mail:~/code# ./dynamic_men.sh
请输入小时(例如"03""14""23"): 01
25