Nano Hash - криптовалюты, майнинг, программирование

CLFLUSH в среде виртуализации

Я прочитал документ об инструкции CLFLUSH для машины Intel x86. Я понимаю, что CLFLUSH m8 означает очистку строки кэша, содержащей линейный адрес m8, если я запускаю инструкцию внутри модуля Linux на «голом железе».

Однако что, если я хочу запустить инструкцию внутри виртуальной машины в среде виртуализации? Что такое параметр CLFLUSH? Чтобы быть конкретным, предположим, что я хочу очистить строку кеша, содержащую контент для виртуального адреса va программы на виртуальной машине. Виртуальный адрес va отображается на физический адрес pa в виртуальной машине, а pa будет сопоставлен с машинным адресом ma в VMM / гипервизоре. Какой адрес использовать для CLFLUSH инструкции, va, pa или ma?

Большое спасибо!


  • Ответим так. Я уверен, что вы согласитесь с тем, что программное обеспечение должно работать одинаково в виртуализированных и невиртуализированных средах, и что в идеале оно не должно определять, что оно виртуализировано. Сразу же следует ответ на ваш вопрос; Вы используете тот адрес, который вы бы использовали, если бы он работал на «голом железе», просто потому, что у вас (не должно) быть возможности определить, действительно ли вы работаете на «голом железе» или нет. 01.11.2015
  • Замечательное наблюдение! Я согласен. Однако причина, по которой программное обеспечение не знает, работает ли оно в виртуализированной или невиртуализированной среде, заключается в том, что VMM / гипервизор виртуализировал инструкцию. Если VMM не поддерживает эту инструкцию, и я хочу расширить гипервызов VMM для ее поддержки, мне нужно будет знать, какой адрес гипервизор должен использовать для инструкции CLFLUSH. Я прав? 01.11.2015
  • Если гипервизор может использовать адрес va, мне интересно, как оборудование может определить, какая строка кэша должна быть очищена на основе va? На голом железе я могу понять, что оборудование может использовать регистр CR3 для передачи va на адрес машины, чтобы найти строку кеша для очистки. Но в виртуализированной среде будет ли оборудование выполнять перевод с va на ma автоматически? 01.11.2015
  • Я просматриваю его прямо сейчас, но сильно подозреваю, что вы найдете мельчайшие подробности в Руководство разработчика программного обеспечения Intel, том 3, раздел 23-33, но особенно 28 ПОДДЕРЖКА VMX ДЛЯ АДРЕСНЫЙ ПЕРЕВОД. Короче говоря, процессор Intel имеет возможность поддерживать дополнительную бухгалтерскую информацию в форме VPID для каждой линейной трансляции адресов. Тогда может существовать несколько отображений для одного и того же линейного адреса, но они отличаются VPID. 01.11.2015
  • да, это правда ... Intel использует VPID, чтобы отличить линейный адрес от разных ВМ. Это может означать, что я должен выдать CLFLUSH, когда программа-владелец адреса все еще работает. В противном случае мне придется загрузить VPID и CR3, чтобы выдать CLFLUSH. Загрузка CR3 уже очистила кеш. 02.11.2015

Ответы:


1

clflush не является привилегированной инструкцией. Пользовательские процессы могут запускать его так же, как они могут выполнять инструкции загрузки, сохранения, предварительной выборки и movnt (сохранение с вытеснением кеша), которые также влияют на кеш.

Я ожидаю, что он отлично виртуализируется, без поддержки гипервизора, поскольку он использует адреса так же, как и другие ссылки на память.

Поскольку виртуализация оборудования позволяет ЦП выполнять полную трансляцию гостевых виртуальных адресов в физические адреса оборудования, желаемое поведение (строка кэша, синхронизированная с физической памятью) должно происходить без вмешательства гипервизора.

02.11.2015
  • Я не могу найти это в руководстве, vmcs имеет два поля 0x00006C06 и 0x00006C08, обычно называемых базами fs и gs, означает ли это MSR? или сегменты? Я смотрел другие источники гипервизора, и некоторые из них сегментируют, некоторые делают MSR 0x00006C0A - это база TR, которую все используют базу seg? 13.11.2020
  • Извините, что помечаю вас каждый раз, но вы мой бог спаситель 13.11.2020
  • @zerocool: Это не имеет ничего общего с этим вопросом или ответом. Но я бы предположил, что это для сегмента base, то есть виртуального адреса, как обычные MSR или wrfsbase. Само значение сегмента register (селектор) не является базовым, поэтому использование словарной базы исключает это. Кроме того, никто не использует значения сегментных регистров для чего-либо, обычно оставляя их 0 (нулевой селектор) в 64-битном режиме, даже не создавая для них запись в GDT. 16.11.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..