#! /bin/bash
# Copyright Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
# 视频流云手机启动脚本配置文件，可配置云手机绑定的GPU、CPU、NUMA、编码卡、数据卷存放位置等

# 默认镜像名称，可根据需要自行修改
DOCKER_IMAGE=video:latest

# 云手机运行内存
RAM_SIZE_GB=6
# 云手机存储大小
STORAGE_SIZE_GB=16

# 云手机屏幕宽、高、密度三者要匹配，720p(720 1280 320)，1080p(1080 1920 480)
# 云手机屏幕宽度
BUILD_WIDTH=720
# 云手机屏幕高度
BUILD_HEIGHT=1280
# 云手机屏幕密度
BUILD_DENSITY=320
# 云手机屏幕刷新帧率
BUILD_FPS=30

# 云手机绑核方式 0：2容器3核；1：绑NUMA，每NUMA空前2个核；2：2容器2核
CPU_BIND_MODE=0

# GPU设备节点
GPUS=(
    "/dev/dri/renderD128"
    "/dev/dri/renderD129"
    "/dev/dri/renderD130"
    "/dev/dri/renderD131"
)

# NETINT编码卡设备节点
NETINT0="/dev/nvme0,/dev/nvme0n1,/dev/nvme1,/dev/nvme1n1,/dev/nvme2,/dev/nvme2n1,/dev/nvme3,/dev/nvme3n1"
NETINT1="/dev/nvme4,/dev/nvme4n1,/dev/nvme5,/dev/nvme5n1,/dev/nvme6,/dev/nvme6n1,/dev/nvme7,/dev/nvme7n1"

# 数据卷存放位置
USERDATA="/home/mount"

# 各NUMA内CPU核定义，用于云手机绑核策略中2容器3核的方式
MODE0_CPUS0=("2,3" "5,6" "8,9" "11,12" "14,15" "17,18" "20,21" "23,24" "26,27" "29,30" "3,4" "6,7" "9,10" "12,13" "15,16" "18,19" "21,22" "24,25" "27,28" "30,31")
MODE0_CPUS1=("34,35" "37,38" "40,41" "43,44" "46,47" "49,50" "52,53" "55,56" "58,59" "61,62" "35,36" "38,39" "41,42" "44,45" "47,48" "50,51" "53,54" "56,57" "59,60" "62,63")
MODE0_CPUS2=("66,67" "69,70" "72,73" "75,76" "78,79" "81,82" "84,85" "87,88" "90,91" "93,94" "67,68" "70,71" "73,74" "76,77" "79,80" "82,83" "85,86" "88,89" "91,92" "94,95")
MODE0_CPUS3=("98,99" "101,102" "104,105" "107,108" "110,111" "113,114" "116,117" "119,120" "122,123" "125,126" "99,100" "102,103" "105,106" "108,109" "111,112" "114,115" "117,118" "120,121" "123,124" "126,127")

# 各NUMA内CPU核定义，用于云手机绑核策略中仅绑定NUMA的方式
MODE1_CPUS0="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,31"
MODE1_CPUS1="34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63"
MODE1_CPUS2="66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95"
MODE1_CPUS3="98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127"

# 各NUMA内CPU核定义，用于云手机绑核策略中2容器2核的方式
MODE2_CPUS0=("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,31")
MODE2_CPUS1=("34,35" "36,37" "38,39" "40,41" "42,43" "44,45" "46,47" "48,49" "50,51" "52,53" "54,55" "56,57" "58,59" "60,61" "62,63")
MODE2_CPUS2=("66,67" "68,69" "70,71" "72,73" "74,75" "76,77" "78,79" "80,81" "82,83" "84,85" "86,87" "88,89" "90,91" "92,93" "94,95")
MODE2_CPUS3=("98,99" "100,101" "102,103" "104,105" "106,107" "108,109" "110,111" "112,113" "114,115" "116,117" "118,119" "120,121" "122,123" "124,125" "126,127")

# Vsync信号偏移量定义，用于Vsync信号均衡优化
VSYNC_OFFSET0="0"
VSYNC_OFFSET1="16000000"
VSYNC_OFFSET2="8000000"
VSYNC_OFFSET3="24000000"

VIDEO_CPU_MAP_128CORE_MODE0=(
    "${MODE0_CPUS0[0]}"
    "${MODE0_CPUS2[0]}"
    "${MODE0_CPUS1[0]}"
    "${MODE0_CPUS3[0]}"
    "${MODE0_CPUS0[1]}"
    "${MODE0_CPUS2[1]}"
    "${MODE0_CPUS1[1]}"
    "${MODE0_CPUS3[1]}"
    "${MODE0_CPUS0[2]}"
    "${MODE0_CPUS2[2]}"
    "${MODE0_CPUS1[2]}"
    "${MODE0_CPUS3[2]}"
    "${MODE0_CPUS0[3]}"
    "${MODE0_CPUS2[3]}"
    "${MODE0_CPUS1[3]}"
    "${MODE0_CPUS3[3]}"
    "${MODE0_CPUS0[4]}"
    "${MODE0_CPUS2[4]}"
    "${MODE0_CPUS1[4]}"
    "${MODE0_CPUS3[4]}"
    "${MODE0_CPUS0[5]}"
    "${MODE0_CPUS2[5]}"
    "${MODE0_CPUS1[5]}"
    "${MODE0_CPUS3[5]}"
    "${MODE0_CPUS0[6]}"
    "${MODE0_CPUS2[6]}"
    "${MODE0_CPUS1[6]}"
    "${MODE0_CPUS3[6]}"
    "${MODE0_CPUS0[7]}"
    "${MODE0_CPUS2[7]}"
    "${MODE0_CPUS1[7]}"
    "${MODE0_CPUS3[7]}"
    "${MODE0_CPUS0[8]}"
    "${MODE0_CPUS2[8]}"
    "${MODE0_CPUS1[8]}"
    "${MODE0_CPUS3[8]}"
    "${MODE0_CPUS0[9]}"
    "${MODE0_CPUS2[9]}"
    "${MODE0_CPUS1[9]}"
    "${MODE0_CPUS3[9]}"
    "${MODE0_CPUS0[10]}"
    "${MODE0_CPUS2[10]}"
    "${MODE0_CPUS1[10]}"
    "${MODE0_CPUS3[10]}"
    "${MODE0_CPUS0[11]}"
    "${MODE0_CPUS2[11]}"
    "${MODE0_CPUS1[11]}"
    "${MODE0_CPUS3[11]}"
    "${MODE0_CPUS0[12]}"
    "${MODE0_CPUS2[12]}"
    "${MODE0_CPUS1[12]}"
    "${MODE0_CPUS3[12]}"
    "${MODE0_CPUS0[13]}"
    "${MODE0_CPUS2[13]}"
    "${MODE0_CPUS1[13]}"
    "${MODE0_CPUS3[13]}"
    "${MODE0_CPUS0[14]}"
    "${MODE0_CPUS2[14]}"
    "${MODE0_CPUS1[14]}"
    "${MODE0_CPUS3[14]}"
    "${MODE0_CPUS0[15]}"
    "${MODE0_CPUS2[15]}"
    "${MODE0_CPUS1[15]}"
    "${MODE0_CPUS3[15]}"
    "${MODE0_CPUS0[16]}"
    "${MODE0_CPUS2[16]}"
    "${MODE0_CPUS1[16]}"
    "${MODE0_CPUS3[16]}"
    "${MODE0_CPUS0[17]}"
    "${MODE0_CPUS2[17]}"
    "${MODE0_CPUS1[17]}"
    "${MODE0_CPUS3[17]}"
    "${MODE0_CPUS0[18]}"
    "${MODE0_CPUS2[18]}"
    "${MODE0_CPUS1[18]}"
    "${MODE0_CPUS3[18]}"
    "${MODE0_CPUS0[19]}"
    "${MODE0_CPUS2[19]}"
    "${MODE0_CPUS1[19]}"
    "${MODE0_CPUS3[19]}"
)

VIDEO_CPU_MAP_128CORE_MODE1=(
    "${MODE1_CPUS0}"
    "${MODE1_CPUS2}"
    "${MODE1_CPUS1}"
    "${MODE1_CPUS3}"
)

VIDEO_CPU_MAP_128CORE_MODE2=(
    "${MODE2_CPUS0[0]}"
    "${MODE2_CPUS2[0]}"
    "${MODE2_CPUS1[0]}"
    "${MODE2_CPUS3[0]}"
    "${MODE2_CPUS0[1]}"
    "${MODE2_CPUS2[1]}"
    "${MODE2_CPUS1[1]}"
    "${MODE2_CPUS3[1]}"
    "${MODE2_CPUS0[2]}"
    "${MODE2_CPUS2[2]}"
    "${MODE2_CPUS1[2]}"
    "${MODE2_CPUS3[2]}"
    "${MODE2_CPUS0[3]}"
    "${MODE2_CPUS2[3]}"
    "${MODE2_CPUS1[3]}"
    "${MODE2_CPUS3[3]}"
    "${MODE2_CPUS0[4]}"
    "${MODE2_CPUS2[4]}"
    "${MODE2_CPUS1[4]}"
    "${MODE2_CPUS3[4]}"
    "${MODE2_CPUS0[5]}"
    "${MODE2_CPUS2[5]}"
    "${MODE2_CPUS1[5]}"
    "${MODE2_CPUS3[5]}"
    "${MODE2_CPUS0[6]}"
    "${MODE2_CPUS2[6]}"
    "${MODE2_CPUS1[6]}"
    "${MODE2_CPUS3[6]}"
    "${MODE2_CPUS0[7]}"
    "${MODE2_CPUS2[7]}"
    "${MODE2_CPUS1[7]}"
    "${MODE2_CPUS3[7]}"
    "${MODE2_CPUS0[8]}"
    "${MODE2_CPUS2[8]}"
    "${MODE2_CPUS1[8]}"
    "${MODE2_CPUS3[8]}"
    "${MODE2_CPUS0[9]}"
    "${MODE2_CPUS2[9]}"
    "${MODE2_CPUS1[9]}"
    "${MODE2_CPUS3[9]}"
    "${MODE2_CPUS0[10]}"
    "${MODE2_CPUS2[10]}"
    "${MODE2_CPUS1[10]}"
    "${MODE2_CPUS3[10]}"
    "${MODE2_CPUS0[11]}"
    "${MODE2_CPUS2[11]}"
    "${MODE2_CPUS1[11]}"
    "${MODE2_CPUS3[11]}"
    "${MODE2_CPUS0[12]}"
    "${MODE2_CPUS2[12]}"
    "${MODE2_CPUS1[12]}"
    "${MODE2_CPUS3[12]}"
    "${MODE2_CPUS0[13]}"
    "${MODE2_CPUS2[13]}"
    "${MODE2_CPUS1[13]}"
    "${MODE2_CPUS3[13]}"
    "${MODE2_CPUS0[14]}"
    "${MODE2_CPUS2[14]}"
    "${MODE2_CPUS1[14]}"
    "${MODE2_CPUS3[14]}"
)

# 7260(128核) AMD GPU 2张卡配置，对应2个设备节点，循环使用
VIDEO_GPU_MAP_AMD2_128CORE=(
    "${GPUS[0]}"
    "${GPUS[1]}"
)

# 7260(128核) AMD GPU 1张卡配置，对应1个设备节点
VIDEO_GPU_MAP_AMD1_128CORE=(
    "${GPUS[0]}"
)

VIDEO_ENC_MAP_128CORE=(
    "${NETINT0}"
    "${NETINT1}"
)

VIDEO_USERDATA_MAP_128CORE=(
    "${USERDATA}"
)

VIDEO_VSYNC_OFFSET_MAP_AMD2_128CORE=(
    "${VSYNC_OFFSET0}"
    "${VSYNC_OFFSET2}"
    "${VSYNC_OFFSET1}"
    "${VSYNC_OFFSET3}"
)

VIDEO_VSYNC_OFFSET_MAP_AMD1_128CORE=(
    "${VSYNC_OFFSET0}"
    "${VSYNC_OFFSET1}"
)

VIDEO_CPU_MAP_64CORE_MODE0=(
    "${MODE0_CPUS0[0]}"
    "${MODE0_CPUS1[0]}"
    "${MODE0_CPUS0[1]}"
    "${MODE0_CPUS1[1]}"
    "${MODE0_CPUS0[2]}"
    "${MODE0_CPUS1[2]}"
    "${MODE0_CPUS0[3]}"
    "${MODE0_CPUS1[3]}"
    "${MODE0_CPUS0[4]}"
    "${MODE0_CPUS1[4]}"
    "${MODE0_CPUS0[5]}"
    "${MODE0_CPUS1[5]}"
    "${MODE0_CPUS0[6]}"
    "${MODE0_CPUS1[6]}"
    "${MODE0_CPUS0[7]}"
    "${MODE0_CPUS1[7]}"
    "${MODE0_CPUS0[8]}"
    "${MODE0_CPUS1[8]}"
    "${MODE0_CPUS0[9]}"
    "${MODE0_CPUS1[9]}"
    "${MODE0_CPUS0[10]}"
    "${MODE0_CPUS1[10]}"
    "${MODE0_CPUS0[11]}"
    "${MODE0_CPUS1[11]}"
    "${MODE0_CPUS0[12]}"
    "${MODE0_CPUS1[12]}"
    "${MODE0_CPUS0[13]}"
    "${MODE0_CPUS1[13]}"
    "${MODE0_CPUS0[14]}"
    "${MODE0_CPUS1[14]}"
    "${MODE0_CPUS0[15]}"
    "${MODE0_CPUS1[15]}"
    "${MODE0_CPUS0[16]}"
    "${MODE0_CPUS1[16]}"
    "${MODE0_CPUS0[17]}"
    "${MODE0_CPUS1[17]}"
    "${MODE0_CPUS0[18]}"
    "${MODE0_CPUS1[18]}"
    "${MODE0_CPUS0[19]}"
    "${MODE0_CPUS1[19]}"
)

VIDEO_CPU_MAP_64CORE_MODE1=(
    "${MODE1_CPUS0}"
    "${MODE1_CPUS1}"
)

VIDEO_CPU_MAP_64CORE_MODE2=(
    "${MODE2_CPUS0[0]}"
    "${MODE2_CPUS1[0]}"
    "${MODE2_CPUS0[1]}"
    "${MODE2_CPUS1[1]}"
    "${MODE2_CPUS0[2]}"
    "${MODE2_CPUS1[2]}"
    "${MODE2_CPUS0[3]}"
    "${MODE2_CPUS1[3]}"
    "${MODE2_CPUS0[4]}"
    "${MODE2_CPUS1[4]}"
    "${MODE2_CPUS0[5]}"
    "${MODE2_CPUS1[5]}"
    "${MODE2_CPUS0[6]}"
    "${MODE2_CPUS1[6]}"
    "${MODE2_CPUS0[7]}"
    "${MODE2_CPUS1[7]}"
    "${MODE2_CPUS0[8]}"
    "${MODE2_CPUS1[8]}"
    "${MODE2_CPUS0[9]}"
    "${MODE2_CPUS1[9]}"
    "${MODE2_CPUS0[10]}"
    "${MODE2_CPUS1[10]}"
    "${MODE2_CPUS0[11]}"
    "${MODE2_CPUS1[11]}"
    "${MODE2_CPUS0[12]}"
    "${MODE2_CPUS1[12]}"
    "${MODE2_CPUS0[13]}"
    "${MODE2_CPUS1[13]}"
    "${MODE2_CPUS0[14]}"
    "${MODE2_CPUS1[14]}"
)

# 5220(64核) AMD GPU 1张卡配置，对应1个设备节点
VIDEO_GPU_MAP_64CORE=(
    "${GPUS[0]}"
)
# 5220(64核) NETINT编码卡 1张卡配置，对应1组设备节点
VIDEO_ENC_MAP_64CORE=(
    "${NETINT0}"
)

VIDEO_USERDATA_MAP_64CORE=(
    "${USERDATA}"
)

VIDEO_VSYNC_OFFSET_MAP_64CORE=(
    "${VSYNC_OFFSET0}"
    "${VSYNC_OFFSET1}"
)
