Процессор, связывание

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

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

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

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