ID de l'article: 000058511 Type de contenu: Maintenance et performances Dernière révision: 10/08/2021

Le fait de passer de grandes structures à une enclave n’entraîne pas de pagination dans le cache de page d’enclave (EPC)

BUILT IN - ARTICLE INTRO SECOND COMPONENT
En bref

Comment copier toutes les données dans les structures du domaine nontrus au domaine de confiance des enclaves Intel® Software Guard Extensions (Intel® SGX)

Descriptif

Fichier EDL (EDL) resserrant l’EDL sur la langue de la définition de l’enclave comme :

struct pair_t {
uint32_t clé ;
uint32_t valeur ajoutée ;
};

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

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

La table_t structure est de 1,1 Go, ce qui est beaucoup plus grand que l’EPC de 128 Mo. La mémoire utilisée dans l’enclave est beaucoup moins que la mémoire allouée de la structure dans l’application nontrus, et il n’y a pas de pagination dans l’EPC.

Résolution

Les définitions de la structure ci-dessus et de la fonction e ne se rapportent qu’à une copie restructurant la structure. Une copie resserrée copie uniquement les adresses du pointeur, pas les données réelles référencés par les pointeurs. Dans ce cas, l’adresse du pointeur est copiée sur l’espace mémoire de l’enclave dans le domaine EPC, ou domaine de confiance, mais les données restent dans le domaine nontrusté. L’EPC ne vit pas de pagination car la majorité des données reste dans le domaine nontrus.

Vous trouverez ci-dessous les définitions et déclarations de structure qui atteignent une copie restructurant l’image et une copie approfondie. Pour copier en profondeur les données de structure sur l’EPC, il s’adresse aux structures du fichier EDL en utilisant le nombre et la taille qui sont définies par le développeur.

struct pair_t {
uint32_t clé ;
uint32_t valeur ajoutée ;
};

Cette déclaration de structure permet d’obtenir une copie restructurant la structure des paires

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

Cette déclaration de structure permet d’obtenir une copie approfondie de la structure des paires

struct deep_table_t {
[nombre = 1, taille = 12] paires pair_t* ;
uint32_t num_pairs;
};

 

confiance {

Cette déclaration de fonction se traduit par une copie restructurant la structure rel

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

Cette déclaration de fonction entraîne une copie approfondie de la structure rel

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

Après la compilation, cochez enclave_t.c pour voir les fonctions proxy générées. La fonction sgx_ecall_deep_sort_table la copie itérative en profondeur de la structure, de la mémoire non fiable à la mémoire fiable.

Informations complémentaires

Reportez-vous à la section Structures, Œms et Gestion de l’informatique dans le Guide de référence des développeurs Intel® SGX pour Linux* pour obtenir une copie complète des éléments de structure dans le domaine de confiance.

NoteLe guide de référence des Intel® Software Guard Extensions (Intel® SGX) pour développeurs le plus récent pour Linux* se trouve dans la section documentation de la dernière version Intel® Software Guard Extensions Linux*.

L’outil edger8 génère automatiquement les fonctions de proxy qui compilent les données entre les domaines confiance et nontrus avant la compilation du code. Le nombre et la taille des paramètres du fichier EDL indiquent à l’outil edger8 combien de mémoire copier dans les fonctions du proxy.

Produits associés

Cet article concerne 1 produits

Le contenu de cette page est une combinaison de traduction humaine et informatique du contenu original en anglais. Ce contenu vous est fourni pour votre commodité et à titre informatif seulement et ne saurait être totalement exact ou complet. En cas de contradiction entre la version anglaise de cette page et la traduction, c'est la version anglaise qui prévaut. Afficher la version anglaise de cette page.