Стоимость переключения контекста между потоками одного и того же процесса в Linux

Есть ли какие-нибудь хорошие эмпирические данные о стоимости переключения контекста между потоками одного и того же процесса в Linux (в основном представляют интерес x86 и x86_64)? Я говорю о количестве циклов или наносекунд между последней инструкцией, выполняемой одним потоком в пользовательском пространстве, прежде чем он будет переведен в спящий режим добровольно или непроизвольно, и первой инструкцией, выполняемой другим потоком того же процесса после пробуждения на том же процессоре / ядре. .

Я написал программу быстрой проверки, которая постоянно выполняет rdtsc в 2 потоках, назначенных одному и тому же процессору / ядру, сохраняет результат в изменчивой переменной и сравнивает с соответствующей изменчивой переменной своего дочернего потока. В первый раз, когда он обнаруживает изменение значения дочернего потока, он печатает разницу, а затем возвращается к циклу. Таким образом, на процессоре Atom D510 я получаю минимальное / среднее количество циклов около 8900/9600. Кажется ли эта процедура разумной, и кажутся ли цифры правдоподобными?

Моя цель - оценить, может ли в современных системах модель сервера «поток на соединение» быть конкурентоспособной или даже превзойти мультиплексирование выбранного типа. Теоретически это кажется правдоподобным, поскольку переход от выполнения операций ввода-вывода на fd X к fd Y включает в себя просто переход в спящий режим в одном потоке и пробуждение в другом, а не множественные системные вызовы, но это зависит от накладных расходов переключение контекста.

18
задан R.. 11 May 2011 в 03:36
поделиться