Как уменьшить время переключения контекста - PullRequest
1 голос
/ 15 января 2012

Все, что мы знаем, это то, что время переключения контекста является чисто служебным и бесполезным. Но я хотел бы знать, как можно сократить время переключения контекста. Помогает ли нам в этом использование большего количества регистров?

Ответы [ 3 ]

1 голос
/ 15 января 2012

Минимизируйте размер контекста и / или избегайте переключений контекста. Как именно вы это делаете, зависит от контекста (не контекста, который вы переключаете, а контекста проблемы, процессора, ОС и т. Д.).

На процессоре x86 вы можете избежать ненужного сохранения и восстановления состояния модуля с плавающей запятой, если он не изменяется. Это можно сделать, установив бит task switched в CR0 на 1 во время переключения контекста, а затем ожидая особого исключения CPU, возникающего из первой инструкции FPU нового потока. Когда это происходит, вы сохраняете состояние FPU старого потока, загружаете состояние FPU текущего потока, сбрасываете CR0.TS и возобновляете выполнение с этой инструкцией FPU. Если потоки приходят и уходят, но исключение не происходит, это означает, что потоки не выполняют работу FPU, и вы не делаете полных переключений контекста.

1 голос
/ 15 января 2012

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

0 голосов
/ 28 февраля 2016

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

Если этот вопрос был с точки зрения администратора Linux, вы можете сократить время, затрачиваемое на переключение контекста, увеличив минимальный временной интервал (см. Sched_latency_ns и sched_min_granularity_ns) или убедившись, что спрос на процессоры меньше или равен количествуиз доступных процессоров.Частота переключения контекста значительно ниже, если у вас есть запасные процессоры - для этого не нужно «переключать» существующие процессоры, он может использовать неработающий.

...