Как работает кэш на многопоточных процессорах Intel Xeon

Я провожу некоторые эксперименты с исследовательской базой данных на EC2 с использованием экземпляра c1.xlarge. Насколько я могу судить, c1.xlarge использует 8 виртуальных процессоров с гиперпоточностью. Amazon также сообщает, что этот экземпляр использует физический процессор из "семейства Intel Xeon".

Опять же, система имеет 8 процессоров, 4 рабочих и 4 других (менеджер блокировок, коммуникатор, 2 секвенсора). Поэтому у нас есть 1 к 1 поток к соответствию ЦП. Эксперимент проводится на контрольной точке. Мы создаем 9-й поток, чтобы взять контрольную точку и оцениваем ее влияние на пропускную способность. Результаты предсказуемы, когда этот 9-й поток назначается одному из процессоров, содержащих одного из 4 рабочих или менеджера блокировок - пропускная способность падает. Однако, когда мы помещаем этот 9-й поток в один из оставшихся процессоров, мы ожидаем, что не увидим никакого эффекта, поскольку эти потоки не являются узкими местами системы и не должны влиять на рабочие потоки. Тем не менее, я вижу падение пропускной способности, и я ищу объяснение.

Я начал подозревать, что может возникнуть проблема, если поток контрольных точек, созданный в неработающем потоке, каким-то образом лишает законной силы кэш рабочих потоков. У меня нет хорошего понимания того, как работает кэширование на данном конкретном экземпляре EC2 или на процессоре Intel Xeon, и поэтому я ищу объяснение того, как работает это кэширование, в частности, как оно работает в гиперпоточной системе. Есть ли оба процессора на разделяемом процессоре с кэш-памятью? Разделяют ли потоки кэш-память между процессорами?

Мне удалось найти руководство Intel, в котором говорится, что процессоры Intel Xeon серии 3000 и 5000 используют "интеллектуальный кэш второго уровня, который позволяет обмениваться данными между двумя ядрами, чтобы уменьшить трафик памяти". Это то, что экземпляр может использовать, и если это так, это означает, что все 8 кэш-памяти vCPU?

1 ответ

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

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

Другие вопросы по тегам