Научная статья на тему 'Анатомия стоимости переключения потоков'

Анатомия стоимости переключения потоков Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
137
24
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПОТОК / ПЕРЕКЛЮЧЕНИЕ ПОТОКОВ / КОНТЕКСТ ПРОЦЕССОРА / X86

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Клименков Е. И.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Клименков Е. И.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Анатомия стоимости переключения потоков»

АНАТОМИЯ СТОИМОСТИ ПЕРЕКЛЮЧЕНИЯ ПОТОКОВ

© Клименков Е.И.*

Белорусский государственный университет информатики и радиоэлектроники, Республика Беларусь, г. Минск

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

Ключевые слова поток, переключение потоков, контекст процессора, x86.

Поток управления (ПУ) является базовой абстракцией планирования характерной для большинства современных процессоров построенных на базе стековой организации вычислений. Под ПУ понимается поток инструкций (ПИ), выполняющийся в контексте определенного стека. Поток управления может быть выражен парой из связанных указателей: указателя следующей инструкции и указателя вершины стека. В контексте архитектуры процессоров семейства Intel x86 ПУ реализуется регистрами EIP, ESP и EFLAGS. Состояние последнего напрямую влияет на работу инструкций из набора инструкций ветвления ПИ. Основой переключений потоков любого уровня абстракции, является переключение потоков управления.

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

Все регистры процессора с архитектурой x86 можно разделить на несколько групп:

- Устаревшие регистры - сегментные регистры;

* Аспирант, магистр технических наук.

- Регистры глобального состояния процессора - регистры управления и, практически все регистры, зависимые от модели процессора.

- Опциональные - регистры FPU/MMX, регистры SSE и отладочные регистры;

- Обязательные - регистры общего назначения и регистры потока управления.

Переключение аппаратных потоков может быть реализовано следующим образом:

void_declspec(naked) switch_hw_thread(hw_thread* outgoing, hw_thread* incoming)

{

// store CPU context of outgoing thread

__asm mov [outgoing].stack_pointer, esp; // stack switch __asm mov esp, [incoming].stack_pointer;

// restore CPU context of incoming thread

__asm ret; // instruction stream switch

}

Не все группы регистров процессора входят в состав контекста процессора. В контекст процессора входят все регистры из группы обязательных, а также в зависимости от природы потока управления лежащего в основе аппаратного потока, могут входить регистры из группы опциональных регистров.

Результаты ряда проведенных экспериментов показали удельную стоимость различных составных частей процесса переключения потоков. Эксперименты проводились на компьютерной системе, на базе процессора Pentium III Xeon [1]. Все измерения проводились при работе процессора в режиме ядра при отключенных прерываниях, с помощью ассемблерной инструкции процессоров архитектуры Intel x86, читающей счётчик TSC (Time Stamp Counter, Счетчик Метки Времени). TSC был выбран в качестве средства измерения, так как он является таймером с самым высоким разрешением доступным в компьютерных системах на базе процессора архитектуры Intel x86 [2]. Разрешение TSC равно одному такту внутреннего тактового генератора процессора. Для нашей экспериментальной платформы частота TSC 500MHz, что соответствует разрешающей способности в 2Нс. Все приведенные ниже результаты измерений получены вычислением среднего арифметического от результатов 0x10000 измерительных прогонов и нормализованы, путем вычета накладных расходов на чтение TSC из полученных результатов.

Измерения показали, что вызов функции соответствующий выполнению пары инструкций call/iret потребляет 4 такта процессорного времени. Вызов функции с передачей двух параметров в соответствии с соглашением вызова fastcall потребляет на 2 такта больше. Добавление в функцию пере-

ключение потоков управления, являющегося основой переключения абстракций потоков любого уровня сложности доводит стоимость вызова до 20 тактов. Переключение аппаратных потоков в минимальной конфигурации, состоящей из потока управления в совокупности с регистрами общего назначения, потребляет 36 тактов. Добавление в контекст процессора содержимого регистра CR2, содержащего линейный адрес отказа страницы добавляет к накладным расходам на переключение 26 тактов. Таким образом, переключение аппаратных потоков в минимальной конфигурации с поддержкой целостности обслуживания страничной памяти потребляет 62 такта процессорного времени или 124Нс.

Переключение регистров FPU/MMX и регистров SSE в процессорах архитектуры x86 может осуществляться двумя способами. Первый способ заключается в использовании старой пары инструкций FNSAVE/FRSTOR, которые соответственно сохраняют / восстанавливают состояние регистров FPU/MMX. Второй способ опирается на использование более новой пары инструкций FXSAVE/FXRSTOR, введенных в состав ISA процессоров архитектуры x86 вместе с введением расширения SSE при появлении процессоров Pentium III. В отличие от пары инструкций FNSAVE/FRSTOR, новая пара инструкций оперирует над регистрами FPU/MMX и регистрами SSE одновременно, и соответственно является единственной парой инструкций, с помощью которой можно сохранять и восстанавливать состояние регистров SSE. Хотя логичным было бы предположить, что новая пара инструкций является более дорогой чем старая, так как в процессе ее выполнения процессор должен осуществить доступ к большему количеству регистров и, что еще более важно, к большему объему оперативной памяти, компания Intel в своей документации [3] заявляет обратное, а именно, что FXSAVE/FXRSTOR является более эффективной парой инструкций, чем FNSAVE/FRSTOR. Проведенные измерения подтвердили заявление компании Intel и показали, что переключение контекста FPU/MMX с помощью FNSAVE/FRSTOR обходится в 226 тактов, в то время как переключение контекстов FPU/MMX вместе с контекстом SSE с помощью пары инструкций FXSAVE/FXRSTOR обходиться существенно дешевле - 131 такт.

Одним из наборов регистров, который может быть включен в контекст процессора, является набор отладочных регистров, которые предоставляют уникальные возможности в отладке приложений, такие, например, как срабатывание точки останова при доступе к определенной ячейке памяти. Измерения показали, что переключение контекстов отладочных регистров является весьма дорогой операцией требующей 1138 тактов.

Переключение адресных пространств, являющееся обязательным атрибутом переключения процессов согласно результатам измерений требует 77 тактов. Однако не стоит забывать, что переключение адресных пространств имеет высокую отложенную стоимость, вызванную сбросом TLB-кэша [4].

Нормализованные результаты проведенных измерений стоимости переключения контекстов процессоров приведены в табл. 1.

Таблица 1

Сводная таблица стоимости операций, входящих в переключение контекстов

Операция Стоимость, тактов Стоимость, цс

Извлечение адреса дескриптора задачи из указателя вершины стека 3 0.006

Переключение регистров общего назначения 16 0.032

Переключение потоков управления 20 0.04

Переключение контекста регистра линейного адреса отказа страницы 26 0.052

Переключение адресных пространств 77 0.154

Переключение контекстов регистров FPU/MMX и регистров SSE с помощью инструкций FXSAVE/FXRSTOR 131 0.262

Переключение контекстов регистров FPU/MMX с помощью инструкций FNSAVE/FRSTOR 226 0.452

Переключение контекстов отладочных регистров 1138 2.276

Как видно из данных приведенных в таблице, стоимость переключения контекстов процессоров может сильно варьироваться в зависимости от наборов регистров включенных в контекст и составляет минимум 36 тактов для набора Min = (CF + GPR), что примерно сопоставимо со стоимостью выполнения операции деления [5], и максимум 1331 такт для набора Max = = (CF + GPR + CR2 + FPU/MMX + SSE + DR). Max/Min = ~37. Если отбросить отладочные регистры, то разница становиться не столь разительной ~5,4 раза, так как Max - DE = 193 такта.

Переключение контекстов отладочных регистров является на удивление дорогой операцией сопоставимой с двумя «холостыми» системными вызовами [6].

Переключение контекстов FPU/MMX лучше производить с помощью пары инструкций FXSAVE/FXRSTOR, так как, во-первых, использование инструкций FNSAVE/FRSTOR обходится на 72,5 % дороже, и, во-вторых, позволяет переключать контексты регистров SSE.

Само по себе, переключение контекстов процессора (без отладочных регистров) обходится минимум в 2 раза дешевле, чем «холостой» системный вызов и стоит не больше чем переход из режима пользователя в режим ядра и обратно с помощью пары инструкций INT/IRET. Однако, не стоит забывать, что переключение потоков, обычно инициируется во время выполнения программы в режиме пользователя и соответственно включает в себе стоимость переходов в режим ядра и обратно в дополнение к стоимости переключения контекстов процессора.

Непосредственно операция переключения адресных пространств имеет не такую высокую стоимость как это принято считать. Эта стоимость сопо-

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

Список литературы:

1. Pentium® III Xeon™ Processor at 500 and 550 MHz. Datasheet [Электронный ресурс] / Intel corp. - Электрон. текстовые дан. - 2013. - Режим доступа: itp://download.intel.com/design/PentiumIII/xeon/datashts/24509402.pdf.

2. Gabriele Paoloni. How to Benchmark Code Execution Times on Intel ® IA-32 and IA-64 Instruction Set Architectures. White Paper [Электронный ресурс] / Intel corp. - Электронные текстовые дан. - 2013. - Режим доступа: http://download.intel.com/embedded/software/IA/324264.pdf.

3. Gabriele Paoloni. How to Benchmark Code Execution Times on Intel ® IA-32 and IA-64 Instruction Set Architectures. White Paper [Электронный ресурс] / Intel corp. - Электронные текстовые дан. - 2013. - Режим доступа: http://download.intel.com/embedded/software/IA/324264.pdf.

4. Chuanpeng Li, Chen Ding, Kai Shen. Quantifying The Cost of Context Switch [Электронный ресурс] / Chuanpeng Li. - Электрон. текстовые дан. -2013. - Режим доступа: http://www.cs.rochester.edu/u/cli/research/switch.pdf.

5. Agner Fog. Optimization manuals. Vol. 4. Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs [Электронный ресурс] / Agner Fog. - Электрон. текстовые дан. - 2013. - Режим доступа: http://agner.org/optimize/instruction_tables.pdf.

6. Alessandro Rubini. Kernel System Calls [Электронный ресурс] / Ales-sandro Rubini. - Электрон. текстовые дан. - 2013 - Режим доступа: www.li-nux.it/~rubini/docs/ksys.

АНАЛИЗ ТОНАЛЬНОСТИ ТЕКСТОВ С ПРИМЕНЕНИЕМ ДСМ-МЕТОДА

© Котельников Е.В.*, Котельникова А.В.Ф

Вятский государственный гуманитарный университет, г. Киров

В статье рассматривается использование ДСМ-метода автоматического порождения гипотез для решения задачи анализа тональности текстов. ДСМ-метод предложен В.К. Финном и представляет собой мощный метод интеллектуального анализа данных и машинного обучения. Описываются ключевые процедуры ДСМ-метода - индукция и

* Старший научный сотрудник кафедры Прикладной математики и информатики.

* Доцент кафедры Прикладной математики и информатики.

i Надоели баннеры? Вы всегда можете отключить рекламу.