ID do artigo: 000058511 Tipo de conteúdo: Manutenção e desempenho Última revisão: 10/08/2021

A passagem de grandes estruturas para um Enclave não está causando paging no Cache de página do Enclave (EPC)

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Resumo

Como copiar todos os dados em estruturas do domínio não confiável para o domínio confiável dos enclaves de Intel® Software Guard Extensions (Intel® SGX)

Descrição

Chamado no arquivo Linguagem de definição de Enclave (EDL) como:

struct pair_t {
uint32_t chave;
uint32_t valor;
};

struct table_t {
struct pair_t* pares;
uint32_t num_pairs;
};

public sgx_status_t ecall_sort_table([in] struct table_t * rel);

A table_t é de 1,1 GB, que é muito maior do que o EPC de 128 MB. A memória usada no enclave é muito menor do que a memória alocada da estrutura na aplicação não falsa, e não há paging no EPC.

Resolução

A estrutura acima e as definições de função de ecall resultam em uma cópia sem cortes da estrutura. Uma cópia mimada copia apenas os endereços de ponteiro, e não os dados reais consultados pelos ponteiros. Neste caso, o endereço de ponteiro é copiado para o espaço de memória do enclave no EPC, ou domínio confiável, mas os dados permanecem no domínio não confiável. O EPC não está apresentando paging porque a maioria dos dados permanece no domínio não interpretado.

A seguir, estão definições e declarações de estrutura que alcançam uma cópia falsa e uma cópia profunda. Para copiar profundamente os dados da estrutura para o EPC, desarmem as estruturas no arquivo EDL usando contagem e tamanho, que são definidas pelo desenvolvedor.

struct pair_t {
uint32_t chave;
uint32_t valor;
};

Esta declaração de estrutura resulta em uma cópia sem cortes da estrutura de pares

struct table_t {
struct pair_t* pares;
uint32_t num_pairs;
};

Esta declaração de estrutura resulta em uma cópia profunda da estrutura de pares

struct deep_table_t {
[contagem = 1, tamanho = 12] struct pair_t* pares;
uint32_t num_pairs;
};

 

confiável {

Esta declaração de função resulta em uma cópia sem cortes da estrutura de rel

sgx_status_t ecall_sort_table(in) struct table_t* rel);

Esta declaração de função resulta em uma cópia profunda da estrutura de rel

sgx_status_t ecall_deep_sort_table([in, count = 1] struct deep_table_t* rel);
};

Após a compilação, verifique enclave_t.c ver as funções proxy geradas. A função sgx_ecall_deep_sort_table mostra a cópia profunda iterativa da estrutura, desde memória não confiável até memória confiável.

Outras informações

Consulte a seção Estruturas, Enums e Unions no guia de referência de desenvolvedores Intel® SGX para Linux* para obter uma explicação completa sobre como obter uma cópia profunda dos elementos da estrutura no domínio confiável.

NotaO guia de referência Intel® Software Guard Extensions (Intel® SGX) para desenvolvedores Linux* está na seção Documentação do mais recente Intel® Software Guard Extensions Linux*.

A ferramenta edger8 gera automaticamente as funções proxy que reúnem dados entre os domínios não confiáveis e confiáveis antes que o código seja compilado. Os parâmetros de contagem e tamanho do arquivo EDL dizem à ferramenta edger8 quanto de memória copiar nas funções proxy.

Produtos relacionados

Este artigo aplica-se a 1 produtos

O conteúdo desta página é uma combinação de tradução humana e por computador do conteúdo original em inglês. Este conteúdo é fornecido para sua conveniência e apenas para informação geral, e não deve ser considerado completo ou exato. Se houver alguma contradição entre a versão em inglês desta página e a tradução, a versão em inglês prevalecerá e será a determinante. Exibir a versão em inglês desta página.