Я пытаюсь оценить объем работы, выполняемой многопоточным приложением. Это довольно простая задача с реальными процессорами / ядрами, так как я могу просто взять процессорное время из proc, и это будет оценка того, сколько процессорного времени занимает приложение.

Но как насчет процессоров с поддержкой HT? Как отсчитывается время? Если поток просто ожидает освобождения канала процессора в случае гонки HT - считается ли он временем, проведенным в ЦП? Или, если поток может использовать 10% преимущество HT, он будет считать 10% фактического времени работы процессора?

1 ответ1

1

Извините, но это очень не определено.

Если у вас включен HT, у вас есть два логических процессора на ядро. Если он отключен, у вас есть только один. (Это позволяет нам говорить о том, как работает планировщик, не уточняя, что мы подразумеваем под "процессором".) В любом случае, логический процессор воспринимается ОС как процессор, и, за исключением некоторых попыток оптимизации расписаний *, ОС больше ничего не делает из-за или из-за гиперпоточности.

Со времени, когда контекст LP переключается на поток, и до того момента, когда он переключается на какой-то другой поток, этот поток считается полностью используемым этим потоком. ОС не может узнать, использует ли поток в LP 10% ядра, или 90% ядра, или застопорился полностью из-за того, что делает поток в другом LP. ОС просто думает, что работает.

Кроме того, HT не реализует ничего подобного приоритетам потоков. Так что, если два потока пытаются запустить в двух LP на одном ядре, и один из них в ОС имеет более высокий приоритет, чем другой, ядро ничего не может с этим поделать - нет способа узнать об этом. Ядро будет обрабатывать два потока с одинаковым приоритетом и соответственно назначать ресурсы микроархитектуры.

* Оптимизация: Современные ОС знают о взаимосвязи LP с ядрами и будут пытаться, например, использовать только один LP из каждого ядра, пока потоки number_of_cores не захотят работать; два LP ядра считаются эквивалентными с точки зрения инвестиций в кэш; и т.п.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .