更新时间:2026-01-23 GMT+08:00
分享

QingTian Enclave系统时间校准最佳实践

操作场景

业务稳定运行一段时间后,在QingTian Enclave系统内部出现时间漂移问题,即QingTian Enclave内部时间与Primary VM系统时间不一致。

本文介绍如何通过Vsock通道,将QingTian Enclave的系统时间与Primary VM的系统时间进行同步,实现QingTian Enclave系统时间校准。

背景知识

图1 时间校准方案

本方案实现方式:

  1. 定制化修改QingTian Enclave内部的第一个进程init,使之fork出一个time_sync进程,作为Vsock的服务器端(server),通过9000端口,监听来自Primary VM的时间同步信息。
  2. 修改qt-enclave常驻进程源码,作为Vsock的客户端(client),每隔180s发送一次时间同步请求到QingTian Enclave的time_sync进程,由time_sync进程完成enclave系统时间同步。

操作步骤

  1. 环境部署。

    1. 购买一台C7t规格的ECS,在购买时设置“可行系统”并勾选“Enclave”。
    2. 执行以下命令,下载必要外围组件。
      yum install qingtian-tool virtio-qtbox qt-enclave-bootstrap -y

      如果ECS使用Ubuntu操作系统,请参考快速入门进行必要包安装。

      • qingtian-tools:用于管理QingTian Enclave生命周期
      • virtio-qtbox:安装QingTian Enclave相关驱动
      • qt-enclave-bootstrap:包含QingTian Enclave镜像文件制作的必要文件
    3. 执行以下命令,配置QingTian Enclave隔离资源,并进行资源隔离。
      vim /etc/qingtian/enclave/qt-enclave-env.conf

      建议一次性隔离出较大内存资源预留给QingTian Enclave使用,避免反复隔离,造成系统内存碎片化,隔离服务重启失败。

    4. 执行以下命令,启动资源隔离服务。
      systemctl start qt-enclave-env

      如果出现隔离服务失败,无法申请到足够内存,可能存在内存碎片,推荐重启虚拟机,再执行隔离服务。

    5. 执行以下命令,安装必要python包。
      pip3 install docker knack
    6. 执行以下命令,安装docker和git。
      yum install docker git -y

      如果ECS使用Ubuntu操作系统,请执行命令:

      apt-get install docker git -y
    7. 执行以下命令,安装文件编译时需要的依赖包。
      yum install gnutls-devel cjson-devel glib2-devel -y
      • gnutls-devel:用于提供加密通信能力
      • cjson-devel:提供JSON解析/生成能力
      • glib2-devel:提供基础工具集,包含数据结构、内存/线程管理

  2. 修复步骤。

    1. 执行以下命令,从gitee仓库下载huawei-qingtian-enclave代码。
      cd /home git clone https://gitee.com/HuaweiCloudDeveloper/huawei-qingtian.git
    2. 本示例用于修复时间漂移问题,执行以下命令,切到dev分支。
      cd /home/huawei-qingtian 
      git checkout dev
    3. 执行以下命令,编译并替换init文件。
      cd /home/huawei-qingtian/enclave/init
    4. 执行以下命令,执行编译命令。
      make
    5. 执行以下命令,替换原有的init文件。
      cp -rf init /usr/local/share/qingtian/enclave/init
    6. 执行以下命令,编译并替换qingtian-tool相关的二进制文件。

      由于使用Git命令下载大文件时可能会出现下载不完整的现象,需要手动下载并替换相关文件。

      cd /home/huawei-qingtian/qingtian-tools/platform/linuxkit/
    7. 执行以下命令,删除此文件下所有文件。
      rm -rf ./*
    8. 执行以下命令,下载对应文件linuxkit-linux-amd64。
      wget https://gitee.com/HuaweiCloudDeveloper/huawei-qingtian/raw/dev/qingtian-tools/platform/linuxkit/linuxkit-linux-amd64?lfs=1
    9. 执行以下命令,修改文件名。
      mv linuxkit-linux-amd64\?lfs\=1 linuxkit-linux-amd64
    10. 执行以下命令,编译并替换qingtian-tool相关文件。
      cd /home/huawei-qingtian/qingtian-tools
      make 
      make install

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

  3. 修复验证。

    测试镜像制作。

    1. 编写一个调测DockerfileTest。
      cd /home/huawei-qingtian/enclave/qtsm-sdk-c/tests/vsock_shell
      该directShell默认监听9999端口。
      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"]
    2. 执行以下命令,生成docker image并转换为QingTian 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. 执行以下命令,启动QingTian Enclave。
      qt enclave start --cpus 2 --mem 8192 --eif test.eif --cid 4
    3. 执行以下命令,使用vsock_client登录。
      /home/nc-vsock/nc-vsock 4 9999
    4. 执行以下命令,查看QingTian Enclave内当前时间。
      date
    5. 执行以下命令,修改QingTian Enclave时间。
      date -s 2027-01-01
    6. 一段时间后重新执行以下命令,查看QingTian时间是否修订。
      代码中规定时间为180秒。
      date

      若观察到时间修正,则调试成功

相关文档