ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Нужны ли виртуальной машине "шины"?


Нужны ли виртуальной машине "шины"?

Сообщений 1 страница 5 из 5

1

В машинах Фон Неймана и Гарвардской архитектуре шины есть. Вопрос, должна ли простая виртуальная машина моделировать наличие шин, или не должна? Начиная с поддержки какой функциональности обойтись без моделирования шин нельзя?

В виртуальной машине UEFI обошлись, кажется, без шин (но это неточно).

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

Можно сказать, что логику работы с шиной можно реализовать простыми операторами языка Си.
Чтение состояние входов - это получение какого-то значения (числа),
запись - это формирование значения (другого числа), выбор модуля памяти или другого элемента
описывается на Си условными операторами (if () {} else {}).

То есть, чтение процессором значения из памяти через шину, это просто строка кода типа
значение_на_шине_данных = память[адрес_на_шине_адреса];
нужно ли усложнять, и если да, то в каких случаях?

Когда в дело вступает необходимость обращаться к синхронизационным примитивам?

Отредактировано Лис (2022-07-30 14:24:10)

0

2

[html]<a href="https://stackoverflow.com/questions/42099924/is-multi-thread-memory-access-faster-than-single-threaded-memory-access">https://stackoverflow.com/questions/42099924/is-multi-thread-memory-access-faster-than-single-threaded-memory-access</a>[/html]

«Each core and device must share the same data bus to the memory.»
(четырёхканальный доступ - это про эти шины? или 4 канала это внутри одной шины?)

[html]<a href="https://en.wikipedia.org/wiki/Multi-channel_memory_architecture">https://en.wikipedia.org/wiki/Multi-channel_memory_architecture</a>[/html]

«On some systems (such as multi-socket servers or HEDTs with quad-channel DDR4),
it's no longer possible for a single thread to saturate all the memory bandwidth in the entire system.»

«with pthreads. 8GB of data took 0.83 seconds to copy unthreaded with memmove, 0.93 seconds with one pthread, and 0.35 seconds with four pthreads. (Thread creation and joining included.)»

«Raspberry Pi has multi-core CPU - will it copy RAM faster with multi core program?»

при помощи DMA  память в память не копируется (на Linux)
https://stackoverflow.com/questions/235 … 8#23582568
и вообще не копируется (на платформе "powerpc"):
https://stackoverflow.com/questions/429 … ram-to-ram
«DMA Engine may be used for generic memory copy (see DMA_PRIVATE flag),
and on x86 some controllers are capable for doing m2m transfers.»

SMP (Symmetric Multi Processing – Симметричная Многопроцессорная Обработка).
SMP – это архитектура, в которой процессоры соединены с общей системной памятью при помощи шины или подобного соединения)симметрично, и имеют к ней равный однородный доступ.
(когда контроллер памяти (MCH/MGCH), больше известный как «Северный Мост» (“NorthBridge”) находился в чипсете)
Именно поэтому SMP системы почти не масштабируются, два-три десятка процессоров для них – это уже теоретический предел.

MPP (Massive Parallel Processing).
MPP — архитектура, разделяющая систему на многочисленные узлы, процессоры в которых имеют доступ исключительно к локальным ресурсам.

«Another thing to think about is NUMA, if you have a multi socket system.»
https://habr.com/ru/company/intel/blog/165903/
NUMA (Non-Uniform Memory Access). Эта архитектура объединяет положительные черты SMP и MPP.

NUMA (Non-Uniform Memory Access или Non-Uniform Memory Architecture)
доступ к удаленной памяти оказывается гораздо медленнее, чем к локальной. Оттуда и название – «неоднородный доступ к памяти»
Intel NUMA дебютировала  на Intel Xeon с контроллерами памяти, интегрированными в CPU.

QPI — Intel QuickPath
Процессоры соединены соединением «точка-точка» с высокой пропускной способностью и низкой задержкой передачи.
NUMA, используемая в системах Intel, поддерживает когерентность кешей и разделяемой памяти
(то есть, соответствие данных между кешами разных CPU),
поэтому ее иногда называют ccNUMA — cache coherent NUMA.

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

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

следует избегать ситуаций, когда несколько процессоров сразу работают с одним блоком памяти

Отредактировано Лис (2022-07-30 15:11:55)

0

3

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

От запрета NUMA в Firmware при старте машины система не сообщит ОС и ПО о том, что она NUMA, а значит, распределение памяти и планировка потоков будут «обычными», такими как на симметричных многопроцессорных системах.

операционная система сможет узнать о конфигурации NUMA узлов из System Resource Affinity Table (SRAT) в
Advanced Configuration and Power Interface (ACPI).
Приложения могут получить такую информацию, используя библиотеку libnuma в Linux

Affinity — принудительная привязка потоков к конкретным процессорам,
предотвращающую возможную переброску операционной системой потоков между процессорами
и могущую вызвать потенциальный «отрыв» потоков от своей используемой локальной памяти.
Для установки Affinity имеются соответствующие API в Linux.

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

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

Отредактировано Лис (2022-07-30 15:00:36)

0

4

http://db4.sbras.ru/elbib/data/show_page.phtml?13+1131

Архитектура неоднородного доступа к памяти с обеспечением когерентности кэшей ccNUMA (Cache Coherent Non-Uniform Memory) реализуется на базе шины.Аппаратные средства следят за процессами на шине, главным образом, относящимися к операциям записи в кэш-память. При попытке какого-то процессора модифицировать содержимое в одном из блоков своей кэш-памяти, эти аппаратные средства либо таким же образом обновляют содержимое аналогичных блоков в кэш-памяти других процессоров, либо помечают эти блоки как недостоверные.

https://wiki.cologne/Non-Uniform_Memory_Access#NUMA_с_когерентностью_кеш-памяти

Хотя системы с некогерентным доступом к NUMA проще проектировать и создавать, становится предельно сложно создавать программы в классической модели архитектуры фон Неймана. В результате, все продаваемые NUMA-компьютеры используют специальные аппаратные решения для достижения когерентности кеша и классифицируются как кеш-когерентные системы с распределенной разделяемой памятью, или ccNUMA.

https://studme.org/94075/informatika/mu … ry_cc-numa

широко распространенный способ построения больших мультипроцессоров CC-NUMA (Cache Coherent NUMA – NUMA с согласованной кэш-памятью) на основе каталога. Каталог представляет собой базу данных, которая содержит информацию о том, где именно находится каждая строка кэш-памяти и каково ее состояние. При каждом обращении к кэш-памяти все необходимые данные о затребованной строке выводятся из базы данных. Для взаимодействия с базой данных используются высокоскоростные аппаратные средства, способные выдавать ответ на запрос за долю цикла шины.

Рассмотрим, как работает мультипроцессор на основе каталога, предполагая, что:
    • процессорный блок обращается к памяти с помощью команды load;
    • затребованная строка может содержаться только в одной кэш-памяти, т.е. других ее копий не существует.

В этом случае выполняется следующая последовательность действий:
    • процессорный блок (исходный узел А1) передает команду load в контроллер;
    • контроллер переводит команду в физический адрес, разделяя его на три части – адресуемый узел А2 (8 бит), адресуемая строка S1 (18 бит) и смещение С (6 бит);
    • поскольку в исходном узле А1 строка отсутствует, то узлу А2 через сеть направляется запрос;
    • запрос поступает в каталог, аппаратные средства которого индексируют таблицу из 218 элементов;
    • если строка S1 отсутствует в кэш-памяти, то аппаратное обеспечение вызывает строку S1 из локального ОЗУ, отправляет в исходный узел А1 и обновляет элемент каталога S1, чтобы показать, что эта строка находится в кэш-памяти узла А1.

Если разрешается иметь только одну копию строки кэш-памяти, то отсутствует необходимость в отслеживании изменений в строках кэш-памяти.
Об изменении строки необходимо сообщить в исходный процессорный блок даже в том случае, когда в кэш-памяти существует только одна копия строки.

При наличии нескольких копий изменение одной из них требует объявления всех остальных копий недействительными.

Отредактировано Лис (2022-07-30 15:18:17)

0

5

https://en.wikipedia.org/wiki/CPU_cache

«Most CPUs have a hierarchy of multiple cache levels (L1, L2, often L3, and rarely even L4),
with different instruction-specific and data-specific caches at level 1.»

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Нужны ли виртуальной машине "шины"?