已开启
cubesandbox #11
QLiangong创建于  19 天前
QLiangong
QLiangong成员
19 天前 创建
全流程计划
阶段 0:环境检查
在 920B 和 9654 上分别运行以下检查命令:
# 基本信息
echo "架构: $(uname -m)"
echo "内核: $(uname -r)"
echo "内存: $(free -h | awk '/Mem/{print $2}')"

# KVM 检查
ls -la /dev/kvm || echo "❌ /dev/kvm 不存在"
lsmod | grep kvm || echo "❌ KVM 模块未加载"

# 虚拟化环境判断
grep -q 'hypervisor' /proc/cpuinfo && echo "云VM" || echo "可能裸金属"
lsmod | grep kvm_pvm && echo "PVM环境" || echo "非PVM"

# cgroup 检查
stat -fc %T /sys/fs/cgroup

# 文件系统检查
df -T / | awk 'NR==2{print "根分区类型:", $2}'
df -h / /home
which mkfs.xfs || echo "❌ mkfs.xfs 未安装"

# Docker 检查
docker --version 2>/dev/null || echo "❌ Docker 未安装"

# SELinux 检查
getenforce 2>/dev/null

# 必需命令
for cmd in curl ss findmnt awk lsmod modinfo docker mkfs.xfs losetup; do
    printf "  %-12s %s\n" "$cmd" "$(which $cmd 2>/dev/null || echo '❌ 未安装')"
done

# 代理检查
echo "终端代理: http_proxy=$http_proxy https_proxy=$https_proxy"

# 残留检查
mount | grep cubeletmnt && echo "⚠️ 有残留挂载" || echo "无残留挂载"
ls /usr/local/services/cubetoolbox/ 2>/dev/null && echo "⚠️ 有残留安装" || echo "无残留安装"
把以上输出贴给我,我帮你判断两台机器分别需要哪些额外配置。
阶段 1:环境准备
根据检查结果,以下是基于之前经验的全部可能需要的配置(不是每台都需要全部,取决于检查结果):
1.1 XFS Loop 挂载(如果根分区不是 XFS)
sudo su root
mkdir -p /data/cubelet
dd if=/dev/zero of=/home/xfs.img bs=1M count=0 seek=102400
mkfs.xfs /home/xfs.img
mount -o loop /home/xfs.img /data/cubelet
df -T /data/cubelet    # 确认 Type=xfs
1.2 关闭 SELinux
setenforce 0
1.3 清理残留
# 杀残留 shim 进程
pkill -9 -f containerd-shim-cube-rs 2>/dev/null

# 卸载残留挂载
umount -l /usr/local/services/cubetoolbox/cubeletmnt/mnt 2>/dev/null
umount -l /usr/local/services/cubetoolbox/cubeletmnt 2>/dev/null
rm -rf /usr/local/services/cubetoolbox/cubeletmnt 2>/dev/null
rm -rf /usr/local/services/cubetoolbox 2>/dev/null
1.4 配置 Docker 代理(如果需要代理访问外网)
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf << 'EOF'
[Service]
Environment="HTTP_PROXY=http://<代理地址>"
Environment="HTTPS_PROXY=http://<代理地址>"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF

systemctl daemon-reload
systemctl restart docker
1.5 预拉 Docker 镜像
docker pull cube-sandbox-image.tencentcloudcr.com/opensource/mysql:8.0
docker pull cube-sandbox-image.tencentcloudcr.com/opensource/redis:7-alpine
docker pull cube-sandbox-int.tencentcloudcr.com/cube-sandbox/cube-proxy:v0.6.0
docker pull cube-sandbox-image.tencentcloudcr.com/opensource/coredns/coredns:1.14.2
docker pull cube-sandbox-int.tencentcloudcr.com/cube-sandbox/cube-egress:v0.6.0
docker pull cube-sandbox-image.tencentcloudcr.com/opensource/openresty:1.21.4.1-6-alpine-fat
注意:v0.6.0 新增了 CubeOps 服务,可能需要额外镜像。安装时看报错补充。
阶段 2:安装 CubeSandbox v0.6.0
9654 (x86_64)
bash deploy/one-click/online-install.sh
# 或用 CN 镜像
MIRROR=cn bash deploy/one-click/online-install.sh
920B (aarch64)
online-install.sh 不支持自动发现 ARM64 包,需要手动下载:
# 从 GitHub Releases 下载 v0.6.0 ARM64 包
wget https://github.com/TencentCloud/CubeSandbox/releases/download/v0.6.0/cube-sandbox-one-click-v0.6.0-arm64.tar.gz

tar -xzf cube-sandbox-one-click-v0.6.0-arm64.tar.gz
cd cube-sandbox-one-click-v0.6.0-arm64
chmod +x install.sh
./install.sh
如果 v0.6.0 没有 ARM64 发布包,需要从 master 分支用 build-release-bundle-builder.sh 自行构建。
安装时如果提示 Existing installation detected → 回答 no。
阶段 3:安装后配置(之前遇到的所有问题)
3.1 创建软链接(根分区空间不足时)
mkdir -p /data/cubelet/cubebox_os_image
rm -rf /usr/local/services/cubetoolbox/cubebox_os_image
ln -s /data/cubelet/cubebox_os_image /usr/local/services/cubetoolbox/cubebox_os_image

mkdir -p /data/cubelet/cube-snapshot
rm -rf /usr/local/services/cubetoolbox/cube-snapshot
ln -s /data/cubelet/cube-snapshot /usr/local/services/cubetoolbox/cube-snapshot
3.2 配置 CubeMaster 代理
mkdir -p /etc/systemd/system/cube-sandbox-cubemaster.service.d
cat > /etc/systemd/system/cube-sandbox-cubemaster.service.d/http-proxy.conf << 'EOF'
[Service]
Environment="HTTP_PROXY=http://<代理地址>"
Environment="HTTPS_PROXY=http://<代理地址>"
Environment="NO_PROXY=localhost,127.0.0.1,<节点IP>"
Environment="CUBEMASTER_ROOTFS_ARTIFACT_STORE_DIR=/data/cubelet/cubemaster-storage"
EOF

mkdir -p /data/cubelet/cubemaster-storage
systemctl daemon-reload
systemctl restart cube-sandbox-cubemaster.service
3.3 手动启动有 pull 超时的容器
# 检查哪些容器没启动
docker ps -a | grep -E "cube-proxy|cube-egress|webui"

# 手动启动
docker compose -f /usr/local/services/cubetoolbox/cubeproxy/docker-compose.yaml up -d
docker compose -f /usr/local/services/cubetoolbox/webui/docker-compose.yaml up -d

# 禁用有 pull 超时问题的 systemd 服务
systemctl disable cube-sandbox-cube-proxy.service 2>/dev/null
systemctl disable cube-sandbox-webui.service 2>/dev/null
systemctl disable cube-sandbox-cube-egress.service 2>/dev/null

# 重新启动被杀掉的容器
docker compose -f /usr/local/services/cubetoolbox/cubeproxy/docker-compose.yaml up -d
docker compose -f /usr/local/services/cubetoolbox/webui/docker-compose.yaml up -d
3.4 设置终端环境变量
export NO_PROXY=localhost,127.0.0.1,0.0.0.0,<节点IP>
export no_proxy=localhost,127.0.0.1,0.0.0.0,<节点IP>
export CUBEMASTER_ADDR=127.0.0.1:8089
3.5 验证安装
# 健康检查
/usr/local/services/cubetoolbox/scripts/cube-diag/check-procs.sh

# 确认 CubeMaster 正常
curl -s http://127.0.0.1:8089/notify/health

# 确认 CubeAPI 正常
curl -s http://127.0.0.1:3000/health
阶段 4:创建 Template
cubemastercli tpl create-from-image \
  --image cube-sandbox-cn.tencentcloudcr.com/cube-sandbox/sandbox-code:latest \
  --writable-layer-size 1G \
  --expose-port 49999 \
  --expose-port 49983 \
  --probe 49999

# 获取 template ID
cubemastercli tpl list
阶段 5:验证沙箱创建(关键分水岭!)
export E2B_API_URL=http://127.0.0.1:3000
export E2B_API_KEY=e2b_000000
export CUBE_TEMPLATE_ID=tpl-xxxxxxxxxxxxxxxxxxxxxxxx
export SSL_CERT_FILE=/root/.local/share/mkcert/rootCA.pem

pip install e2b-code-interpreter

python -c "
import os
from e2b_code_interpreter import Sandbox
with Sandbox.create(template=os.environ['CUBE_TEMPLATE_ID']) as sb:
    print(sb.run_code('print(\"hello\")'))
print('Environment OK')
"
两种可能的结果:
结果	含义	下一步
hello + Environment OK	沙箱创建成功	→ 阶段 6 跑博客全部 benchmark
reset guest time failed	v0.6.0 仍有 bug	→ 阶段 7 跑 cubecow reflink_ops(唯一能跑的)
阶段 6:运行博客 benchmark(仅当阶段 5 成功)
按博客的 8 个 section 逐个运行:
3.2 冷启动延迟与并发扩展
cd examples/cube-bench
make

export E2B_API_URL=http://<server-ip>:3000
export E2B_API_KEY=e2b_000000
export CUBE_TEMPLATE_ID=tpl-xxx

./bin/cube-bench -c 1  -n 20  -w 3 -o ${HOSTNAME}_c1.json
./bin/cube-bench -c 10 -n 200 -w 3 -o ${HOSTNAME}_c10.json
./bin/cube-bench -c 20 -n 300 -w 3 -o ${HOSTNAME}_c20.json
3.3 单机部署密度
./bin/cube-bench -c 1  -n 1  -m create-only && free -m
./bin/cube-bench -c 4  -n 4  -m create-only && free -m
./bin/cube-bench -c 5  -n 5  -m create-only && free -m
./bin/cube-bench -c 10 -n 10 -m create-only && free -m
4.1 快照创建 vs 并发
cd examples/snapshot-rollback-clone
pip install -r requirements.txt

export CUBE_API_URL=http://<server-ip>:3000
export CUBE_TEMPLATE_ID=tpl-xxx
export CUBE_PROXY_NODE_IP=127.0.0.1
export CUBE_PROXY_PORT_HTTP=80

python bench_snapshot_concurrency.py -c 1  -n 5
python bench_snapshot_concurrency.py -c 5  -n 5 --no-header
python bench_snapshot_concurrency.py -c 10 -n 5 --no-header
4.2 快照创建 vs 脏页
python bench_snapshot_dirty.py -d 0    -n 3
python bench_snapshot_dirty.py -d 10   -n 3 --no-header
python bench_snapshot_dirty.py -d 50   -n 3 --no-header
python bench_snapshot_dirty.py -d 100  -n 3 --no-header
python bench_snapshot_dirty.py -d 200  -n 3 --no-header
python bench_snapshot_dirty.py -d 500  -n 3 --no-header
python bench_snapshot_dirty.py -d 800  -n 3 --no-header
python bench_snapshot_dirty.py -d 1024 -n 3 --no-header
4.3 从快照创建沙箱
python bench_create_concurrency.py -c 1  -n 3
python bench_create_concurrency.py -c 10 -n 3 --no-header
python bench_create_concurrency.py -c 20 -n 3 --no-header
4.4 Rollback
python bench_rollback_concurrency.py -c 1  -n 5
python bench_rollback_concurrency.py -c 5  -n 5 --no-header
python bench_rollback_concurrency.py -c 10 -n 5 --no-header
4.5 Clone
python bench_clone_concurrency.py -n 1  -c 1  --rounds 5
python bench_clone_concurrency.py -n 10 -c 5  --rounds 3 --no-header
python bench_clone_concurrency.py -n 20 -c 10 --rounds 3 --no-header
4.6 Pause/Resume
python bench_pause_resume_concurrency.py -c 1  -n 5
python bench_pause_resume_concurrency.py -c 10 -n 5 --no-header
阶段 7:运行 cubecow reflink_ops(始终可跑,不依赖沙箱)
cd CubeSandbox
sudo bash run_benches.sh
阶段 8:解析结果
python parse_cubecow_results.py -i bench-results -o ${HOSTNAME}_cubecow.xlsx
likedislike
QLiangong
QLiangong成员
19 天前 评论:
(/home/y30075072/env) [root@localhost CubeSandbox]# 阶段 0:环境检查
在 920B 和 9654 上分别运行以下检查命令:
# 基本信息
echo "架构: $(uname -m)"
echo "内核: $(uname -r)"
echo "内存: $(free -h | awk '/Mem/{print $2}')"

# KVM 检查
ls -la /dev/kvm || echo "❌ /dev/kvm 不存在"
lsmod | grep kvm || echo "❌ KVM 模块未加载"

# 虚拟化环境判断
grep -q 'hypervisor' /proc/cpuinfo && echo "云VM" || echo "可能裸金属"
lsmod | grep kvm_pvm && echo "PVM环境" || echo "非PVM"

# cgroup 检查
stat -fc %T /sys/fs/cgroup

# 文件系统检查
df -T / | awk 'NR==2{print "根分区类型:", $2}'
df -h / /home
which mkfs.xfs || echo "❌ mkfs.xfs 未安装"

# Docker 检查
ls /usr/local/services/cubetoolbox/ 2>/dev/null && echo "⚠️ 有残留安装" || echo "无残留安装"
bash: 阶段: command not found
bash: 在: command not found
架构: aarch64
内核: 6.6.0-132.0.0.111.oe2403sp3.aarch64
内存: 249Gi
crw-rw----. 1 root kvm 10, 232 Aug 13 18:21 /dev/kvm
❌ KVM 模块未加载
可能裸金属
非PVM
tmpfs
根分区类型: ext4
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/openeuler-root   69G   49G   16G  76% /
/dev/mapper/openeuler-home  6.9T  2.9T  3.7T  45% /home
/usr/sbin/mkfs.xfs
Docker version 26.1.3, build b72abbb
Permissive
  curl         /usr/bin/curl
  ss           /usr/sbin/ss
  findmnt      /usr/bin/findmnt
  awk          /usr/bin/awk
  lsmod        /usr/sbin/lsmod
  modinfo      /usr/sbin/modinfo
  docker       /usr/bin/docker
  mkfs.xfs     /usr/sbin/mkfs.xfs
  losetup      /usr/sbin/losetup
终端代理: http_proxy=http://141.1.24.133:3129 https_proxy=http://141.1.24.133:3129
无残留挂载
无残留安装
likedislike
QLiangong
QLiangong成员
19 天前 评论:
# 检查 KVM 是否编译进内核
ls -la /dev/kvm
cat /proc/modules | grep kvm
modprobe kvm 2>&1
lsmod | grep kvm
likedislike
QLiangong
QLiangong成员
19 天前 评论:
(/home/y30075072/env) [root@localhost CubeSandbox]# ls -la /dev/kvm
crw-rw----. 1 root kvm 10, 232 Aug 13 18:21 /dev/kvm
(/home/y30075072/env) [root@localhost CubeSandbox]# cat /proc/modules | grep kvm
(/home/y30075072/env) [root@localhost CubeSandbox]# modprobe kvm 2>&1
(/home/y30075072/env) [root@localhost CubeSandbox]# lsmod | grep kvm
likedislike
QLiangong
QLiangong成员
19 天前 评论:

确认能打开 /dev/kvm

python3 -c "import os; fd=os.open('/dev/kvm', os.O_RDWR); print('KVM 可用, fd=', fd); os.close(fd)"

likedislike
QLiangong
QLiangong成员
19 天前 评论:
[root@localhost y30075072]# 阶段 0:环境检查
在 920B 和 9654 上分别运行以下检查命令:
# 基本信息
echo "架构: $(uname -m)"
echo "内核: $(uname -r)"
echo "内存: $(free -h | awk '/Mem/{print $2}')"

# KVM 检查
ls -la /dev/kvm || echo "❌ /dev/kvm 不存在"
lsmod | grep kvm || echo "❌ KVM 模块未加载"

# 虚拟化环境判断
grep -q 'hypervisor' /proc/cpuinfo && echo "云VM" || echo "可能裸金属"
lsmod | grep kvm_pvm && echo "PVM环境" || echo "非PVM"

# cgroup 检查
stat -fc %T /sys/fs/cgroup

# 文件系统检查
df -T / | awk 'NR==2{print "根分区类型:", $2}'
df -h / /home
which mkfs.xfs || echo "❌ mkfs.xfs 未安装"

# Docker 检查
ls /usr/local/services/cubetoolbox/ 2>/dev/null && echo "⚠️ 有残留安装" || echo "无残留安装"
bash: 阶段: 未找到命令
bash: 在: 未找到命令
架构: x86_64
内核: 6.6.0-132.0.0.111.oe2403sp3.x86_64
内存: 1.5Ti
crw-rw----. 1 root kvm 10, 232  8月12日 21:40 /dev/kvm
kvm_amd               237568  0
kvm                  1388544  1 kvm_amd
irqbypass              12288  1 kvm
ccp                   417792  1 kvm_amd
可能裸金属
非PVM
tmpfs
根分区类型: ext4
文件系统                    大小  已用  可用 已用% 挂载点
/dev/mapper/openeuler-root   69G  3.2G   62G    5% /
/dev/mapper/openeuler-home  365G   29G  318G    9% /home
/usr/sbin/mkfs.xfs
❌ Docker 未安装
Enforcing
  curl         /usr/bin/curl
  ss           /usr/sbin/ss
  findmnt      /usr/bin/findmnt
  awk          /usr/bin/awk
  lsmod        /usr/sbin/lsmod
  modinfo      /usr/sbin/modinfo
  docker       ❌ 未安装
  mkfs.xfs     /usr/sbin/mkfs.xfs
  losetup      /usr/sbin/losetup
终端代理: http_proxy= https_proxy=
无残留挂载
无残留安装
likedislike
此处折叠了55条消息 查看更多
QLiangong
QLiangong成员
14 天前 评论:
[root@localhost CubeSandbox]# cd examples/cube-bench
[root@localhost cube-bench]# make
go build  -o bin/cube-bench .
make: go: No such file or directory
make: *** [Makefile:13:bin/cube-bench] 错误 127
likedislike
QLiangong
QLiangong成员
13 天前 评论:
QLiangong
QLiangong成员
13 天前 评论:
QLiangong
QLiangong成员
13 天前 评论:
Function Name	Category	Shared Object	Total Time (%)	Call Count
cpuidle_enter_state	kernel	[kernel.kallsyms]	97.01	1
finish_task_switch.isra.0	kernel	[kernel.kallsyms]	0.23	42
poll_idle	kernel	[kernel.kallsyms]	0.12	1
srso_alias_return_thunk	kernel	[kernel.kallsyms]	0.09	65
smp_call_function_many_cond	kernel	[kernel.kallsyms]	0.06	9
0x000000000003699b	cubemaster	cubemaster	0.05	1
0x000000000014859a	cubemaster	cubemaster	0.04	1
update_blocked_averages	kernel	[kernel.kallsyms]	0.04	2
tg_cfs_schedulable_down	kernel	[kernel.kallsyms]	0.04	1
zap_pte_range	kernel	[kernel.kallsyms]	0.03	10

likedislike
QLiangong
QLiangong成员
12 天前 评论:
Shared Object
cubemaster
[kernel.kallsyms]
network-agent
python3.14
watcher.node
libc.so.6
[vdso]
containerd-shim-cube-rs
cube-bench
cubelet
libgobject-2.0.so.0.7800.3
mysqld
docker-proxy
NetworkManager
libglib-2.0.so.0.7800.3
ld-linux-x86-64.so.2
dockerd
htop
perf
_json.cpython-314-x86_64-linux-gnu.so
libcrypto.so.3
node
libsystemd-shared-255.so
docker-compose
libstdc++.so.6.0.30
ld-musl-x86_64.so.1
libseccomp.so.2.5.4
libcrypto.so.3.0.12
runc
[JIT]
docker
libm.so.6
redis-server
ip
cube-lifecycle-manager
libselinux.so.1
gawk
libffi.so.8.1.2
libdbus-1.so.3.32.3
containerd-shim-runc-v2
libproc2.so.0.0.2
libtinfo.so.6.4
libncursesw.so.6.4
cube-api
bindings.cpython-314-x86_64-linux-gnu.so
_pydantic_core.cpython-314-x86_64-linux-gnu.so
_csv.cpython-314-x86_64-linux-gnu.so
_rust.abi3.so
libmamba.so.4.0.1
ps
[unknown]
udevadm
bash
systemd-journald
_ruamel_yaml.cpython-314-x86_64-linux-gnu.so
libssl.so.3
libjvm.so
libsystemd-core-255.so
systemd
rsyslogd
imjournal.so
libgio-2.0.so.0.7800.3
sshd
dbus-daemon
libnio.so
_ssl.cpython-314-x86_64-linux-gnu.so
Q:Reg
libsystemd.so.0.38.0
libpython3.11.so.1.0
_asyncio.cpython-314-x86_64-linux-gnu.so
_ctypes.cpython-314-x86_64-linux-gnu.so
rattler.abi3.so
bpf_prog_9c492a311bb5a0bd_from_envoy
bpf_prog_d3722b93ef96ed4e_from_cube
libfastjson.so.4.3.0
libpcre2-8.so.0.11.2
pty.node
zlib.cpython-314-x86_64-linux-gnu.so
_brotlicffi.abi3.so
_cffi_backend.cpython-314-x86_64-linux-gnu.so
_socket.cpython-314-x86_64-linux-gnu.so
_struct.cpython-314-x86_64-linux-gnu.so
Refine#0
exe
df
libcrypto.so.3.5.1
grep
Deflati
libcap-ng.so.0.0.0
ls
libnss_systemd.so.2
containerd
cat
cubeops
find
coredns
systemd-executor
sed
ss
curl
libcurl.so.4.8.0
libssl.so.3.0.12
libreadline.so.8.2
auditd
irqbalance
liblzma.so.5.4.7

likedislike