Bem-vindo ao Quark Container.
Este repositório é o lar do código do Quark Containers.
Quark Container é um tempo de execução de contêiner seguro de alto desempenho com os seguintes recursos:
As fatias de desempenho são performance.pdf. As etapas detalhadas do teste e o resultado estão aqui
O Quark Container adota a arquitetura clássica da máquina virtual Linux conforme abaixo. Inclui um HyperVisor denominado QVisor e um kernel convidado denominado QKernel. Ao contrário do design comum de máquina virtual Linux, no qual imagens de sistema operacional padrão, como Linux/Windows, podem ser executadas no Qemu. QVisor e QKernel estão fortemente acoplados. QVisor suporta apenas QKernel.
O design de alto nível do Quark Container é o seguinte. Ele lida com a solicitação do aplicativo Container com as etapas a seguir.
O Quark Container suporta a transferência do tráfego TCP da aplicação container com conexão RDMA, ou seja, TSoR. TSoR é um provedor de rede de contêineres no cluster K8S e o aplicativo de contêiner baseado em TCP existente pode transferir dados por meio de RDMA sem QUALQUER modificação. À medida que o TSoR descarrega a carga de trabalho da pilha do protocolo TCP/IP para a NIC RDMA. Ele pode atingir maior rendimento, baixa latência e menos espaço de CPU. O resultado do teste TSOR é o resultado do teste de benchmark Redis com comparação entre Quark + TSoR e RunC + Flannel. TSoR mostra uma melhoria de rendimento 5 vezes maior em relação ao Flannel. A arquitetura TSoR é a seguinte. A introdução está aqui
Quark suporta principalmente X86-64. O suporte aarch64 é preliminar e está em desenvolvimento ativo. Outra arquitetura estará disponível no futuro.
Quark é desenvolvido com a linguagem Rust. A compilação precisa instalar o Rust todas as noites. Por favor, use a versão atual conhecida nightly-2023-12-11-x86_64-unknown-linux-gnu
(substitua x86_64
por aarch64
para a compilação aarch64)
rustup toolchain install nightly-2023-12-11-x86_64-unknown-linux-gnu
rustup default nightly-2023-12-11-x86_64-unknown-linux-gnu
Adicione o componente ferrugem-src ao conjunto de ferramentas atual:
rustup component add rust-src
E instale "cargo-xbuild" para compilação cruzada do qkernel
cargo install cargo-xbuild
Instale a biblioteca libcap
sudo apt-get install libcap-dev
Além disso, algumas bibliotecas extras para compilar o módulo RDMA:
sudo apt-get install build-essential cmake gcc libudev-dev libnl-3-dev
libnl-route-3-dev ninja-build pkg-config valgrind python3-dev cython3
python3-docutils pandoc libclang-dev
E também algumas bibliotecas extras para compilar o módulo GPU:
(Observe que você pode executar os seguintes comandos mesmo em máquinas que não sejam da Nvidia para obter capacidade de compilar o módulo GPU.)
sudo apt-get install libelf-dev nvidia-driver-535
git clone [email protected]:QuarkContainer/Quark.git
cd Quark
make
make install
make cuda_all
make install
make install
. "quark" contém código QVisor e também implementa a interface OCI.sudo mkdir /var/log/quark
sudo systemctl restart docker
O aplicativo de exemplo hello-world docker pode ser executado conforme abaixo:
sudo systemctl restart docker
sudo systemctl restart docker.service
docker run --rm --runtime=quark hello-world
O arquivo de configuração do Quark Container está em /etc/quark/config.json . O detalhe da configuração é TBD...
O log de depuração do Quark Container é colocado em /var/log/quark/quark.log. Poderia ativar ou desativar por "DebugLevel" de /etc/quark/config.json. Existem 5 valores possíveis de "DebugLevel" conforme abaixo.
Off,
Error,
Warn,
Info,
Debug,
Trace,
Quando o log está habilitado, por exemplo, Debug. Após executar uma imagem docker com Quark Container, os logs serão gerados em /var/log/quark/quark.log. Consulte o wiki para obter mais dicas de depuração.
Consulte este link para configurar k8s usando contêiner quark e suporte RDMA.
Quark agora tem suporte preliminar para aarch64 (ainda em desenvolvimento ativo).
Notas sobre arquiteturas arm64 mais recentes :
As arquiteturas arm64 mais recentes adicionam o bit PAN (Privilege Access Never) no pstate que impede o kernel (el1) de acessar a memória do usuário (el0). O suporte total é WIP. Como solução temporária, simplesmente limpamos o PAN no qkernel. Para fazer isso, você precisa aplicar manualmente este patch
~quark/[email protected]
. Para se inscrever na lista, envie um e-mail vazio para ~quark/[email protected]
Para saber mais sobre como usar a lista de discussão, consulte Etiqueta da lista de discussão.