【QingTian Enclave】系统时间漂移问题

举报
heathjay 发表于 2025/11/17 16:34:19 2025/11/17
【摘要】 QingTian Enclave时间漂移修复

问题描述

在业务稳定运行一段时间后,发现Enclave内部的系统时间出现漂移(enclave内部时间与primary VM系统时间不一致)。

问题上报

目前和QingTian Enclave开发团队沟通后,认为通过vsock通道,将Enclave的系统时间和primary VM的系统时间进行同步是一个比较可行的方案。

问题修复方案概述

image.png

在开源huawei-qingtian源码的基础上,做了以下两点修改:

  1. 对enclave内部的第一个进程(init)做了定制化修改,他可以fork出一个time_sync进程,作为vsock的server端,通过9000端口,监听来自primary VM的时间同步信息。
  2. qt-enclave常驻进程原本是被用来管理enclave的生命周期的。为了修复时间漂移问题,我们修改了这部分的源码,让他作为vsock的client端,每隔180s发送一次时间同步请求到enclave的time_sync进程,由time_sync进程完成enclave系统时间同步。

修复验证

环境部署

1、购买一台c7t实例虚机,勾选Enclave选项
目前Enclave只在上海一、新加坡、土耳其局点支持
2、下载必要外围组件 (如果您使用ubuntu镜像的话,按照[ubuntu镜像必要包安装])
(https://bbs.huaweicloud.com/blogs/451439))
yum install qingtian-tool virtio-qtbox qt-enclave-bootstrap -y
● qingtian-tools用于管理enclave生命周期
● virtio-qtbox 安装enclave相关驱动
● qt-enclave-bootstrap 包含enclave镜像文件制作的必要文件
3、配置enclave隔离资源,并进行资源隔离
vim /etc/qingtian/enclave/qt-enclave-env.conf
建议一次性隔离出较大内存资源预留给Enclave使用,避免反复隔离,造成系统内存碎片化,隔离服务重启失败
启动资源隔离服务:
systemctl start qt-enclave-env
如果出现隔离服务失败,无法申请到足够内存,可能存在内存碎片,推荐重启虚拟机,再执行隔离服务
4、安装必要python包
pip3 install docker knack
5、安装docker和git
yum install docker git -y
Note: 如果您使用ubuntu: apt-get install docker git -y
6、安装文件编译时需要的依赖包
yum install gnutls-devel cjson-devel glib2-devel -y
● gnutls-devel用于提供加密通信能力
● cjson-devel提供 JSON 解析 / 生成能力
● glib2-devel提供基础工具集(数据结构、内存 / 线程管理)

修复步骤

1.从gitee仓库下载huawei-qingtian-enclave代码
cd /home git clone https://gitee.com/HuaweiCloudDeveloper/huawei-qingtian.git
本实例用于实践修复时间漂移现象,请切到dev分支
cd /home/huawei-qingtian git checkout dev
参考该提交:https://gitee.com/HuaweiCloudDeveloper/huawei-qingtian/pulls/27
2.编译并替换init文件
cd /home/huawei-qingtian/enclave/init
执行编译命令
make
替换原有的init文件
cp -rf init /usr/local/share/qingtian/enclave/init
3.编译并替换qingtian-tool相关的二进制文件
本因为使用Git命令下载大文件时会出现下载不完整的现象,需要手动下载并替换相关文件
cd /home/huawei-qingtian/qingtian-tools/platform/linuxkit/
删除此文件下所有文件
rm -rf ./*
使用wget命令下载对应文件linuxkit-linux-amd64
wget https://gitee.com/HuaweiCloudDeveloper/huawei-qingtian/raw/dev/qingtian-tools/platform/linuxkit/linuxkit-linux-amd64?lfs=1
下载文件名字为linuxkit-linux-amd64?lfs=1,需要对其进行改名操作
mv linuxkit-linux-amd64\?lfs\=1 linuxkit-linux-amd64
编译并替换qingtian-tool相关文件

cd /home/huawei-qingtian/qingtian-tools
make
make install

如果认为180s时间不合适,可以修改qingtian-tools/include/enclave.h文件中的INTERVAL数值

修复验证

测试镜像制作

cd /home/huawei-qingtian/enclave/qtsm-sdk-c/tests/vsock_shell
1、编写一个调测DockerfileTest

FROM ubuntu:22.04 AS base-img

# COPY debug tool source code
COPY ./vsock_shell.c /root/vsock_shell.c

RUN apt-get update -y && \
    apt-get install gcc -y
RUN cd /root && \
    gcc vsock_shell.c -o directShell && \
    chmod 777 /root/directShell

# COPY your enclave app
# eg. hello_world.sh
#COPY ./hello_world.sh /root/

RUN echo "#!/bin/bash" >> hello_world.sh && \
    echo "echo hello" >> hello_world.sh

# Let launch the debug tool firstly
CMD ["/root/directShell"]

该directShell默认监听9999端口;
2、生成docker image并转换为Enclave的镜像

docker build -f DockerfileTest -t test .
qt enclave make-img --docker-uri test --eif test.eif

使用nc-vsock调试

1、获取并编译vsock_client

cd /home
git clone https://github.com/stefanha/nc-vsock.git

cd /home/nc-vsock && make

2、启动Enclave,并使用vsock_client登录
启动Enclave
qt enclave start --cpus 2 --mem 8192 --eif test.eif --cid 4
使用vsock_client登录
/home/nc-vsock/nc-vsock 4 9999
3、调试修正时间漂移
查看Enclave内当前时间
date
修改时间
date -s 2027-01-01
过一段时间后重新执行,查看时间是否修正(代码中规定时间为180秒)
date
观察到时间修正,调试成功
这里的4 和Enclave 的Cid一致
这种方式仅仅推荐使用在调测阶段,不要在生产环境中使用

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。