• Тестовые конфигурации
  • Приложения
  • Хост-системы
  • Измерение производительности
  • Копирование файлов
  • Преобразование символов из кодировки ASCII в Unicode
  • Поиск заданных комбинаций символов
  • Сортировка файлов
  • Множество потоков, соревнующихся между собой за обладание единственным ресурсом
  • Выполнение тестов
  • ПРИЛОЖЕНИЕ В

    Результаты измерения производительности

    В примерах программ представлено широкое разнообразие альтернативных методик решения одних и тех же задач, как это было, например, при рассмотрении копирования файлов или преобразования текстовых файлов из кодировки ASCII в Unicode, и поэтому рассуждения о сравнительных преимуществах этих методик в отношении производительности являются вполне уместными. Однако в процессе создания приложений одних рассуждений подобного рода мало, и требуется точное знание количественных характеристик, позволяющих судить о влиянии того или иного выбора варианта реализации на производительность, а также о том, каковы в этом смысле потенциальные преимущества той или иной версии Windows, конфигурации оборудования или средств Windows, таких как потоки или асинхронный ввод/вывод. Программа timep (программа 6.2) позволяет измерять реальное (истекшее), пользовательское и системное (затраченное функциями ядра) время, необходимое для выполнения программ, и предоставляет удобный способ измерения производительности и определения ее зависимости от выбора методик и принципов программирования.

    Тестовые конфигурации

    Тестирование производилось путем выполнения на ряде хост-систем репрезентативного набора приложений из числа приведенных в данной книге примеров программ.

    Приложения

    В приведенных ниже таблицах приведены временные характеристики, полученные с использованием программы timep при выполнении тестовых программ на нескольких различных системах. Для этой цели были выбраны следующие функциональные области:

    1. Копирование файлов. Показатели производительности определялись для нескольких различных методик, с помощью которых выполнялась эта операция, включая использование библиотеки С и Windows-функции CopyFile. Копирование файлов позволяет сосредоточить внимание на операциях ввода/вывода, не сопровождаемых обработкой данных.

    2. Преобразование символов из кодировки ASCII в кодировку Unicode. В этой серии тестов выяснялась зависимость производительности от использования отображения файлов, буферов большого размера, флагов Windows, задающих последовательный режим обработки, и операций асинхронного ввода/вывода. Преобразование символов позволяет сосредоточить внимание на операциях ввода/вывода, сопровождаемых незначительной обработкой данных в процессе их перемещения из одного буфера в другой.

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

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

    5. Многопоточная система "производитель/потребитель". Эта серия тестов позволила исследовать влияние на производительность различных методов синхронизации, используемых для реализации системы с многопоточной очередизацией, что дало возможность оценить сравнительные достоинства и недостатки обсуждавшихся в главах 8-10 моделей, основанных на применении объектов CRITICAL_SECTION, мьютексов и функции SignalObjectAndWait, а также сигнальной и широковещательной моделей переменных условий.

    Программы для всех перечисленных приложений компоновались с использованием Microsoft Visual C++ 7.0 и 6.0 в виде окончательных (release), а не отладочных (debug) версий. Выполнение отладочных версий программ привело бы к заметному искажению картины показателей производительности. Специально проведенные тесты с интенсивной загрузкой процессора показали, что в этом случае доля дополнительных накладных расходов может достигать 80%, не говоря уже о том, что размеры отладочных исполняемых модулей превышают размеры модулей окончательных версий в два-три раза.

    Хост-системы

    Показатели производительности измерялись на четырех современных (по состоянию на 2004 год) системах, характеризующихся широким разнообразием конфигураций ЦП, памяти и ОС. Во всех случаях использовалась файловая система NTFS. В некоторых случаях приводятся также данные, полученные на устаревших системах.

    1. Лэптоп, процессор Pentium с частотой 1 ГГц, ОС Windows 2000 Professional.

    2. Лэптоп, процессор Intel Celeron с частотой 2 ГГц, ОС Windows XP.

    3. PC с процессором Pentium, ОС Windows 2000.

    4. Четырехпроцессорная система Windows 2000 Server с ОС NT 5.0. В качестве процессоров были использованы четыре процессора Intel Xeon с частотой 1,8 ГГц. Эта система позволила исследовать, насколько увеличиваются показатели производительности в результате применения нескольких высокопроизводительных процессоров.

    В примерах, связанных с обработкой файлов, представлены также результаты, полученные на устаревшей NT-системе на основе PC, в которой использовался процессор Pentium III с частотой 500 МГц, что позволило сравнить между собой показатели производительности для файловых систем FAT и NTFS, хотя файловая система FAT уже не так распространена, как прежде. Во всех случаях файловые системы были заполнены не более чем на 50% и характеризовались лишь незначительной фрагментацией.

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

    Измерение производительности

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

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

    Монитор производительности Windows, доступный через пиктограмму Administrative Tools (Администрирование), находящуюся в панели управления, отображает данные о работе процессора, ядра, пользовательских и других процессов в графическом виде. Это средство предоставляет отличные дополнительные возможности для изучения свойств программ помимо тех, которые обеспечиваются приведенными здесь результатами измерений.

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

    Копирование файлов

    Пять различных вариантов реализации программ копирования файлов использовались для копирования файла размером 25,6 Мбайт (400 000 записей размером 64 байта каждая, сгенерированных с помощью программы RandFile из главы 5). В первых двух столбцах табл. В.1 представлены результаты, полученные на лэптопе (LT) устаревшей модели, в котором установлен процессор Pentium с частотой 500 МГц, что позволяет сопоставить между собой показатели производительности в случае файловых систем NTFS и FAT.

    1. Программа cpC (программа 1.1) использует библиотеку С. В этом тесте измеряется эффект варианта реализации, выполняющегося поверх Windows, хотя библиотека и предоставляет возможность использования эффективной буферизации или применения других методик.

    2. Программа cpW (программа 1.2) является реализацией, в которой используются непосредственно средства Windows с буфером небольшого размера (256 байт).

    3. Программа cpwFA — "быстрый" вариант реализации с использованием буфера большого размера (8192 байта, что кратно размеру сектора диска на всех хост-системах) и флагов Windows, задающих последовательный режим обработки как для входных, так и для выходных файлов.

    4. Программа cpCF (программа 1.3) использует функцию Windows CopyFile для выяснения того, является ли реализация, ограничивающаяся единственным системным вызовом, более эффективной по сравнению с другими методиками.

    5. Программа cpUC (программа 1.1) — реализация в стиле UNIX, использующая буфер небольшого размера (аналогично программе cpW). Эта программа была незначительно изменена, чтобы обеспечить возможность использования библиотеки совместимости с UNIX, входящей в состав Visual C++.

    В то время как приведенные результаты представляют величины, усредненные по пяти тестовым запускам, сами значения истекшего времени могут меняться в широких пределах. Так, для программы cpUC (последний ряд) среднее значение истекшего времени в третьем столбце данных (Pentium LT, W2000) составило 7,77 секунды, тогда как минимальное и максимальное значения составляли соответственно 1,87 и 11,71 секунды. Такая широкая вариация значений была типичной почти во всех случаях и на всех системах.

    Комментарии

    1. Применение файловой системы NTFS вовсе не гарантирует лучшую по сравнению с системой FAT производительность. Более того, иногда более быстрой оказывается именно FAT, в чем можно убедиться, сравнивая данные, приведенные в столбцах 1 и 2.

    2. Библиотеки совместимости С и UNIX обеспечивают сопоставимую производительность, которая во многих случаях превосходит производительность простейших вариантов реализации, использующих средства Windows.

    3. Процессорное время, потребляемое как функциями ядра ("Системное время"), так и пользовательскими функциями ("Пользовательское время"), является минимальным. Следовательно, быстродействие процессора оказывает лишь самое незначительное влияние на производительность, оцениваемую по истекшему времени.

    4. Как и следовало ожидать, высокопроизводительные серверные SMP-системы действительно обеспечивают гораздо более быструю обработку файлов, чем лэптопы и PC. Дополнительные тесты, выполненные в системе Windows Server 2003, обладающей еще более высоким быстродействием, показали еще лучшие результаты (здесь они не представлены), причем значения истекшего времени оказались примерно в два раза меньшими по сравнению со значениями, приведенными в крайнем справа столбце таблицы.

    5. Использование буферов большого размера, флагов последовательной обработки или функции CopyFile не обеспечивают систематического или существенного выигрыша в производительности, оцениваемой по истекшему времени. Вместе с тем, весьма небольшие значения показателей пользовательского времени для программ cpwFA и cpCF представляют интерес, и этим можно воспользоваться в некоторых ситуациях, даже если показатели истекшего времени при этом не улучшатся. Одна из систем, а именно, лэптоп с процессором Pentium, не подходит под данное обобщение. Как ранее уже отмечалось, процессорное время составляет лишь небольшую долю истекшего времени.

    6. Показатели истекшего времени являются в высшей степени переменчивыми, причем в некоторых случаях отношение результатов, полученных в идентичных тестах, которые выполнялись в идентичных условиях, достигало значения 10:1.


    Таблица В.1. Показатели производительности программ копирования файлов

    ЦП Pentium III Pentium III Pentium LT Celeron LT Xeon 4×Xeon
    ОС W2000 W2000 W2000 XP W2000 W2000
    Файловая система FAT NTFS NTFS NTFS NTFS NTFS
    cpC Реальное время 8,62 14,69 12,75 7,23 6,03 2,67
    Пользовательское время 0,12 0,12 0,10 0,10 0,09 0,06
    Системное время 0,24 0,52 1,39 0,39 0,25 0,36
    cpW Реальное время 8,49 13,35 25,48 7,10 8,94 2,95
    Пользовательское время 0,13 0,12 0,06 0,04 0,04 0,13
    Системное время 0,88 1,37 4,61 0,62 0,56 0,13
    cpwFA Реальное время 8,35 12,59 7,35 8,25 9,10 2,36
    Пользовательское время 0,01 0,02 0,03 0,01 0,01 0,02
    Системное время 0,40 0,50 0,82 0,29 0,20 0,19
    cpCF Реальное время 8,00 11,69 2,57 6,50 7,62 2,97
    Пользовательское время 0,02 0,01 0,02 0,02 0,01 0,02
    Системное время 0,19 0,25 0,53 0,19 0,12 0,17
    cpUC Реальное время 7,84 13,14 21,01 9,98 7,77 3,53
    Пользовательское время 0,72 0,66 0,47 0,34 0,34 0,42
    Системное время 0,40 0,67 3,12 0,34 0,36 0,41

    Преобразование символов из кодировки ASCII в Unicode

    Измерения выполнялись для восьми программ, каждая из которых преобразовывала файл размером 12,8 Мбайт в файл размером 25,6 Мбайт. Соответствующие результаты представлены в табл. В.2.

    1. Программа atou (программа 2.4) сопоставима с программой cpW, использующей буфер небольшого размера.

    2. Программа atouSS — первый из "быстрых" вариантов реализации, основанных на программе atou. В нем применяются флаги последовательного режима обработки и буфер небольшого размера. Эта, а также две следующие программы сгенерированы на основе одного и того же проекта, atouLBSS, но с определением разных комбинаций макросов.

    3. Программа atouLB использует буфер большого размера (8192 байта), но не использует флаги последовательного режима обработки.

    4. Программа atouLSFP использует буфер большого размера и флаги последовательного режима обработки, но кроме этого предварительно устанавливает требуемый размер выходного файла. Эта мера продемонстрировала свою высокую эффективность.

    5. Программа atouMM использует отображение файлов для операций файлового ввода/вывода и вызывает функции, листинг которых приведен в программе 5.3.

    6. Программа atouMT представляет собой многопоточную реализацию приведенной в главе 14 программы, основанной на схеме множественной буферизации без применения асинхронного ввода/вывода.

    7. Программа atouOV (программа 14.1) использует перекрывающийся ввод/вывод и не может выполняться на двух системах семейства Windows 9x.

    8. Программа atouEX (программа 14.2) использует перекрывающийся ввод/вывод и не будет выполняться на двух системах семейства Windows 9x.

    Комментарии

    1. Результаты показывают, что применение буферов увеличенного размера и флагов последовательной обработки (а возможно, и сочетания этих факторов) обеспечивает некоторый выигрыш в производительности.

    2. Предварительная установка размера выходного файла (atouLSFP) очень эффективна и приводит к резкому повышению производительности на всех однопроцессорных системах. В то же время, преимущества SMP-систем оказались весьма незначительными. Эту же методику можно было применить и в предыдущих примерах копирования файлов.

    3. В этих примерах процессорное время составляет лишь незначительную долю общего времени.

    4. Помимо того, что использование перекрывающегося ввода/вывода ограничивается системами Windows NT и его трудно программировать, он обеспечивает очень низкую производительность. Заметьте, что основная доля общего времени приходится не на пользовательское или системное время, а на реальное время. Создается впечатление, что в случае NT4 система испытывает трудности с планированием доступа к диску, и это препятствие нельзя было устранить путем изменения размера буфера (как большую, так и в меньшую сторону) до тех пор, пока не были использованы буферы размером 65 Кбайт. В NT5 эта проблема не возникает.

    5. Ни расширенный ввод/вывод, ни многопоточный режим не обеспечивают сколько-нибудь заметного повышения производительности.

    6. Использование отображения файлов в операциях ввода/вывода способно увеличивать производительность, обеспечивая ее повышение примерно на 30% по сравнению с остальными методами. Результаты для SMP-сервера оказались еще лучшими.


    Таблица В.2. Показатели производительности программ преобразования символов из кодировки ASCII в Unicode

    ЦП Pentium III Pentium III Pentium LT Celeron LT Xeon 4×Xeon
    ОС W2000 W2000 W2000 XP W2000 W2000
    Файловая система FAT NTFS NTFS NTFS NTFS NTFS
    atou Реальное время 3,24 7,16 33,53 6,27 5,77 2,77
    Пользовательское время 0,31 0,33 0,01 0,06 0,06 0,08
    Системное время 0,46 0,72 3,55 0,54 0,63 0,63
    atouSS Реальное время 3,77 6,21 43,53 10,12 5,68 2,48
    Пользовательское время 0,20 0,23 0,11 0,07 0,04 0,14
    Системное время 0,52 0,81 3,17 0,04 0,35 0,81
    atouLB Реальное время 4,38 6,41 28,51 5,95 4,75 2,47
    Пользовательское время 0,10 0,07 0,05 0,03 0,03 0,08
    Системное время 0,26 0,34 0,63 0,19 0,21 0,187
    atouLSFP Реальное время - - 5,17 1,38 1,28 2,03
    Пользовательское время - - 0,07 0,05 0,09 0,06
    Системное время - - 0,61 0,16 0,10 0,11
    atouMM Реальное время 4,35 2,75 3,46 3,90 3,74 0,77
    Пользовательское время 0,27 0,29 0,09 0,07 0,05 0,14
    Системное время 0,19 0,19 0,16 0,14 0,10 0,09
    atouMT Реальное время 4,84 6,18 5,83 6,61 5,99 3,55
    Пользовательское время 0,14 0,15 0,26 0,04 0,06 0,02
    Системное время 0,45 0,46 0,66 0,33 0,15 0,31
    atouOV Реальное время 9,54 8,85 32,42 6,84 5,63 3,17
    Пользовательское время 0,14 0,12 0,21 0,06 0,06 0,06
    Системное время 0,24 0,23 0,42 0,18 0,21 0,17
    atouEX Реальное время 5,67 5,92 30,65 6,50 5,19 2,64
    Пользовательское время 1,10 1,50 0,29 0,35 0,41 0,64
    Системное время 1,19 1,74 0,77 0,69 0,59 1,91

    Поиск заданных комбинаций символов

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

    1. Программа grepMP (программа 6.1) использует параллельные процессы, каждый из которых обрабатывает отдельный файл. Результаты измерений системного и пользовательского времени не приводятся, поскольку программа timep позволяет хронометрировать лишь родительские процессы.

    2. Программа grepMT (программа 7.1) использует параллельные потоки.

    3. Программа grepSQ — это пакетный файл DOS, обеспечивающий выполнение поиска шаблонов по очереди в каждом из файлов. В этом случае также приводятся только результаты, относящиеся к реальному времени.

    В этом тесте использовались 20 файлов с размерами в пределах от нескольких Кбайт до 1 Мбайт.

    Комментарии

    1. В большинстве случаев все три методики приводят к близким результатам на однопроцессорных системах. Исключением является лэптоп с процессором Pentium, для которого версия grepMP систематически оказывалась самой медленной.

    2. Многопоточный режим обладает лишь незначительными преимуществами по сравнению с многопроцессным даже на однопроцессорных системах.

    3. Показатели пользовательского и системного времени имеют ощутимо заметные значения лишь в случае многопоточных версий

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

    5. Тот факт, что последовательная обработка файлов приводит на однопроцессорных системам к аналогичным результатам, говорит о том, что простейшее решение нередко оказывается и самым лучшим.


    Таблица В.З. Показатели производительности программ поисказаданных комбинаций символов

    ЦП Pentium LT Celeron LT Xeon 4×Xeon
    ОС W2000 XP W2000 W2000
    Файловая система NTFS NTFS NTFS NTFS
    grepMP Реальное время 14,72 3,95 10,58 0,63
    Пользовательское время - - - -
    Системное время - - - -
    grepMT Реальное время 7,08 3,61 8,09 0,73
    Пользовательское время 0,30 0,41 0,27 2,23
    Системное время 0,09 0,47 0,13 0,28
    grepSQ Реальное время 6,71 3,86 6,71 0,97
    Пользовательское время - - - -
    Системное время - - - -

    Сортировка файлов

    Для тестирования четырех вариантов реализации программ сортировки из главы 5 использовался целевой файл, состоящий из 100 000 записей размером 64 байта каждая (всего 6,4 Мбайт). Вывод отсортированного файла во всех случаях подавлялся, чтобы можно было оценивать только время, необходимое для выполнения собственно сортировки. После этого тестировалась многопоточная сортировка (программа 7.2) файла размером 25 Мбайт, состоящего из 400 000 записей размером 64 байта каждая, с использованием одной, двух и четырех потоков. В каждом отдельном запуске использовался отдельный файл, генерируемый программой RandFile, которая находится в каталоге главы 5. Результаты для разных запусков заметно различались между собой.

    1. Программа sortBT (программа 5.1) создает бинарное дерево поиска, требующее выделения минимального объема памяти под каждую запись. Эта программа интенсивно использует процессор.

    2. Программа sortFL (программа 5.4) создает отображение файла перед тем, как использовать программу qsort. Тестировалась также программа sortFLSR (доступ к куче подвергался сериализации), однако существенных отличий от предыдущего варианта замечено не было.

    3. Текст программы sortHP в книге не приводился. Эта программа предварительно распределяет буфер для файла, а затем сортирует файл, считанный в этот буфер, а не его отображение, как программа sortFL.

    4. Программа sortMM (программа 5.5) создает постоянно существующий индексный файл.

    5. Программа sortMT (программа 7.2) реализует многопоточную сортировку слиянием. Результаты представлены в строках sortMT1, sortMT2 и sortMT4 в соответствии с количеством параллельных потоков. Результаты могут значительно меняться в зависимости от характера сортируемых данных, хотя размер и случайный характер распределения значений данных сглаживают эти различия, что, как правило, характерно для базового алгоритма быстрой сортировки, который использован для реализации функции qsort библиотеки С.

    Комментарии

    1. Реализация, использующая алгоритм бинарного дерева (программа sortBT), интенсивно использует процессор; кроме того, память в ней распределяется отдельно для каждой записи.

    2. Применение отображения файлов и чтение файла в предварительно выделенный буфер обеспечивают примерно одинаковую производительность, но в этих тестах отображение файлов ничем особенным себя не проявило, а в некоторых случаях даже значительно ухудшало результаты. Вместе с тем, в ряде случаев как sortFL, так и sortHP обеспечивали превосходные результаты.

    3. Суммарное пользовательское и системное время иногда превышает истекшее время, даже если используется только один поток.

    4. Программа sortMT демонстрирует возможности SMP-систем. В некоторых случаях использование дополнительных потоков приводило к повышению производительности и на однопроцессорных системах.


    Таблица В.4. Показатели производительности программ сортировки файлов

    ЦП Pentium LT Celeron LT Xeon 4×Xeon
    ОС W2000  XP W2000 W2000
    Файловая система NTFS NTFS NTFS NTFS
    sortBT Реальное время - 9,61 - -
    Пользовательское время - 1,84 - -
    Системное время - 7,44 - -
    sortFL Реальное время 11,15 0,78 1,74 5,38
    Пользовательское время 4,81 0,41 0,26 5,19
    Системное время 0,15 0,09 0,09 0,02
    sortHP Реальное время 1,76 0,34 1,52 1,30
    Пользовательское время 1,62 0,22 0,15 1,28
    Системное время 0,11 0,05 0,03 0,04
    sortMM Реальное время 0,99 1,44 1,92 1,39
    Пользовательское время 0,31 0,18 0,15 0,38
    Системное время 0,68 0,47 0,36 1,03
    sortMT1 Реальное время 3,18 3,58 6,80 0,14
    Пользовательское время 0,01 0,95 0,01 0,05
    Системное время 0,46 0,16 0,16 0,11
    sortMT2 Реальное время 2,10 1,22 6,70 0,13
    Пользовательское время 0,01 1,05 0,01 0,02
    Системное время 0,40 0,16 0,16 0,13
    sortMT4 Реальное время 2,20 1,49 6,22 0,13
    Пользовательское время 0,01 1,18 0,01 0,12
    Системное время 0,16 0,15 0,16 0,09

    Множество потоков, соревнующихся между собой за обладание единственным ресурсом

    Целью этой серии тестов являлось сравнение эффективности различных стратегий реализации функций управления очередями программы 10.4 с использованием программы 10.5 (трехступенчатый конвейер) в качестве тестового приложения. Тесты выполнялись на четырехпроцессорной (Intel Xeon, 1 ГГц) системе Windows 2000 Server с организацией 1, 2, 4, 8, 16, 32 и 64 потоков, но во всех семи случаях каждого потока поручалось выполнение 1000 единиц работы. В идеальном случае можно было бы ожидать линейного увеличения реального времени с увеличением количества потоков, но соревновательность между потоками за право владения единственным мьютексом (или объектом CS) может приводить к нелинейному снижению этого показателя). Обратите внимание, что эти тесты не затрагивают файловую систему.

    Использовались шесть различных стратегий реализации, результаты применения которых представлены в отдельных столбцах табл. В.5.


    Таблица В.5. Производительность многопоточных реализаций на четырехпроцессорном сервере

    К-во потоков Широковещат.модель Широковещат.модель Широковещат. модель Сигнальная модель Сигнальная модель Сигнальная модель
    Mtx, Evt CritSec, Evt Mtx, Evt Mtx, Evt CritSec, Evt Mtx, Evt
    Т/О 5мс Т/О 25мс SigObjWait Т/О неопределен Т/О неопределен SigObjWait
    1 Реальное время 0,03 0,03 0,05 0,05 0,03 0,05
    Пользовательское время 0,03 0,06 0,03 0,05 0,08 0,05
    Системное время 0,06 0,02 0,09 0,08 0,02 0,06
    2 Реальное время 0,14 0,27 0,09 0,08 0,06 0,08
    Пользовательское время 0,13 0,05 0,14  0,17 0,11 0,08
    Системное время 0,11 0,06 0,16 0,09 0,11 0,17
    4 Реальное время 0,39 0,59 0,23 0,19 0,16 0,20
    Пользовательское время 0,18 0,17 0,22 0,26 0,17 0,19
    Системное время 0,30 0,22 0,41 0,31 0,22 0,31
    8 Реальное время 0,83 0,92 0,73 0,36 0,34 0,36
    Пользовательское время 0,34 0,36 0,55 0,52 0,45 0,45
    Системное время 0,98 1,00 1,00 0,69 0,39 0,75
    16 Реальное время 2,42 2,30 2,38 0,75 0,69 0,75
    Пользовательское время 1,17 1,31 1,22 0,81 0,81 0,88
    Системное время 3,69 3,05 3,39 1,45 1,08 1,33
    32 Реальное время 7,56 7,50 7,98 1,50 1,50 1,50
    Пользовательское время 3,33 3,73 2,56 1,75 1,69 1,78
    Системное время 12,52 10,72 11,03 3,13 2,00 2,69
    64 Реальное время 27,72 26,23 29,31 3,14 2,95 3,20
    Пользовательское время 7,89 10,75 7,22 3,73 3,69 3,47
    Системное время 46,70 40,33 36,67 6,28 3,89 5,47

    В комментариях, помещенных вслед за программой 10.4, обсуждаются результаты и разъясняются преимущества различных реализаций, а здесь мы лишь отметим, что результаты для сигнальной модели изменяются пропорционально изменению количества потоков, тогда как в случае широковещательной модели, особенно для вариантов с 32 и 64 потоками, это не так. Можно также видеть, что в случае широковещательной модели система потребляет значительную долю процессорного времени, ибо выполняются, вычисляют предикат и осуществляют немедленный возврат в состояние ожидания множество потоков.

    1. Широковещательная модель, мьютекс (Mtx), событие (Evt), раздельные вызовы функций освобождения и ожидания. Конечный период ожидания (Time-out, TO) устанавливался равным 5 миллисекундам, что являлось оптимальным значением для 16-поточного варианта.

    2. Широковещательная модель, объект CRITICAL_SECTION (CritSec), событие, раздельные вызовы функций освобождения и ожидания. Настраиваемый период ожидания устанавливался равным 5 миллисекундам, что являлось оптимальным значением для 16-поточного варианта.

    3. Широковещательная модель, мьютекс, событие, атомарный вызов SignalObjectAndWait (SigObjWait).

    4. Сигнальная модель, мьютекс, событие, раздельные вызовы функций освобождения и ожидания.

    5. Сигнальная модель, объект CRITICAL_SECTION, событие, раздельные вызовы функций освобождения и ожидания.

    6. Сигнальная модель, мьютекс, событие, атомарный вызов SignalObjectAndWait.

    Выполнение тестов

    На Web-сайте книги в каталоге TimeTest находятся пакетные файлы, с помощью которых вы сможете запускать тесты как под управлением Windows 2000/NT, так и под управлением Windows 9x:

    • cpTIME.bat

    • cpTIME.bat

    • atouTIME.bat

    • grepTIME.bat

    • sortTIME.bat

    • threeST.bat

    Для всех тестов, кроме тестов последней серии, текстовые ASCII-файлы большого размера создавались с помощью программы RandFile.







     


    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх