2016-03-23 3 views
4

Можно ли загрузить программу, большую, чем память EPC, в анклав? Я чувствую, что в теории это допустимо, так какПодробнее о загрузке SGX

  • OS может поменять страницы из свободно
  • EEXTEND меры анклав приращением по 256 байт

Таким образом, в теории, по-видимому, можно загрузить большую программу используя только одну страницу EPC памяти:

  1. нагрузки 4К байт на странице EPC
  2. измерения загруженного р возраст
  3. выселить загруженная страница
  4. нагрузки следующий байт 4K на одной и той же странице, как EPC один в (1)

Могу ли я правильно понять в теории? Хотя на практике я сразу же получил ошибку при загрузке больших программ.

ответ

3

Я задал аналогичный вопрос на форумах Intel. Резюме [1] полезно.

Короткий ответ: Нет, вы не можете в это время загрузить анклав, который больше, чем EPC.

В связи с отсутствием в настоящее время поддержки подкачки (и отсутствие динамического выделения страниц, что v2 будет предоставлять) это означает, что в сочетании HeapMaxSize всех анклавах, загруженных в то же время не может превышать сказал ~ 90MB. [1]

Длинный ответ: В SGX есть два механизма динамического управления памятью:

  1. анклав может запросить дополнительные страницы через EAUG - это поддерживается только в SGXv2, для которого нет аппаратного обеспечения в настоящее время доступна
  2. ОС может поменять EPC страницы на регулярной оперативной памяти (инструкции EWB/ELD), но Windows, в настоящее время не поддерживает эту

Итак, почему вы не можете загрузить анклав больше, чем EPC?

  • размера EPC ограничен на существующих системы примерно 90MB
  • Windows, не поддерживает обмен этих страниц
  • анклав должны запросить все страницы он желает использовать перед выполнением (EINIT) на SGXv1 аппаратных
  • размер всех анклавов не должен превышать размер EPC
  • Intel оставляет некоторый EPC пространства для своих анклавов управления (цитирует, выделение ресурсов, погрузка анклавы)

Таким образом, ваш анклав должен будет использовать значительно меньше 90 Мбайт кучи на текущем оборудовании. Я экспериментировал с эмуляцией SDK и обнаружил, что он позволяет получить максимальный размер кучи примерно 1GiB [2].Будущие версии ОС, как мы надеемся, поддерживают замену страниц EPC, позволяя увеличить размеры статического анклава. Будущее аппаратное обеспечение SGX позволит динамически распределять страницы, позволяя динамические размеры анклавов.

[1] https://software.intel.com/en-us/forums/intel-isa-extensions/topic/607004#comment-1857071

[2] 1GiB - по 64Kb - TCSnum * 128KiB, где TCSnum это количество нитей. Превышение этого значения HeapMaxSize приводит к ошибке моделирования

+0

Очень полезно. Благодарю. – qweruiop

+0

@Freddy - Я пытался увеличить параметр MaxHeapSize Enclave, но я не мог инициализировать анклавы более чем на 70 МБ. Для меня параметр TCSnum равен 1, а моя виртуальная машина имеет 2 ГБ памяти с двумя виртуальными ядрами. Вы знаете, в чем проблема? – hmofrad

Смежные вопросы