Разработка структур данных с диiиплиной доступа один пишет - много читают для многопоточного взаимодействия в системах реального времени
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
?ерить вышеописанную ситуацию, но только уже применимо и к пишущему потоку.
Для тестирования второй и третьей проблем можно руководствоваться теми же принципами, что для тестирования первой проблемы, то есть вначале проверить взаимодействие пишущего потока с одним читающим, далее увеличить число читающих потоков, но оставить привязку к ядрам, а в конце запускать потоки без привязки к ядрам.
Тестирование проводилось на двухъядерном процессоре, поэтому для проверки всех указанных проблем достаточно трёх читающих потоков. Распределение потоков по ядрам представлено в таблице 3.1.
Таблица 3.1 Распределение потоков по ядрам
ПроблемаСитуацияЯдро 1Ядро 21)1)Пишущий поток без освобождения памятиЧитающий поток 2)Два читающих потока3)Пишущий поток без освобождения памяти Три читающих потоков2) 3)4)Пишущий потокЧитающий поток 5)Два читающих потока6)Пишущий поток Три читающих потоков
В соответствии с описанными требованиями к тестированию была разработана программа со следующими возможностями:
)Возможность выбора специального метода управления памяти: HP - метод опасных указателей, LC - метод неблокирующего подсчёта ссылок.
)Возможность привязки пишущего потока к одному ядру, читающих - к другому.
)Возможность задания длины массива.
)Возможность указания числа читающих потоков.
)Возможность задания времени работы программы.
)Возможность запуска читающих потоков в течение всего времени работы программы.
Пример запуска программы представлен на рис. 3.1.
Рис. 3.1 Пример запуска тестирующей программы
С учётом количества выполняемых операций в секунду достаточно десяти секунд для проверки правильности работы, к тому же при запуске без освобождения памяти за большее время может произойти переполнение памяти. Также для большей нагрузки в серии тестов с освобождением памяти данная операция запускается при каждом запуске пишущего потока. В результате проверки всех описанных ситуаций была построена таблица 3.2, отображающая результаты тестирования.
Таблица 3.2 Результаты тестирования
СитуацияМетод неблокирующего подсчёта ссылокМетод опасных указателей1)Прочитано: 106260885 Количество ошибок: 0Прочитано: 123647406 Количество ошибок: 02)Прочитано: 108203020 Количество ошибок: 0Прочитано: 121693470 Количество ошибок: 03)Прочитано: 118821519 Количество ошибок: 0Прочитано: 134767103 Количество ошибок: 04)Прочитано: 109747632 Количество ошибок: 36Прочитано: 121098202 Количество ошибок: 05)Прочитано: 103586435 Количество ошибок: 49Прочитано: 118382785 Количество ошибок: 06)Прочитано: 119855489 Количество ошибок: 23Прочитано: 143162986 Количество ошибок: 0
По результатам тестирования видно, что ошибки возникают только при использовании метода неблокирующего подсчёта ссылок с освобождением памяти. Это закономерно, так как отсутствие операции DCAS не позволяет сделать этот метод полностью безопасным. Было проведено десять запусков и выявлено, что процент ошибок не превышает 0,00008 процента.
Для проверки третьей проблемы необходимо запускать программу на длительное время и отслеживать утечку памяти. Программа запускалась на восемь часов для каждого метода. В результате проведённых запусков утечки памяти выявлено не было, как и ошибок в методе опасных указателей.
Также стоит отдельно рассмотреть проблему запуска большого количества потоков в случае метода опасных указателей при заранее неизвестно числе потоков, так как список опасных указателей изменяется динамически, что может привести как к ошибкам, так и к утечке памяти. Для проверки данных проблем в течение двух секунд запускались читающие потоки, работающие также две секунды, а после чего завершающиеся. За указанное время было запущено 1282 потока и выполнено 6408718 операций чтения. Ошибок доступа к данным и утечки памяти выявлено не было. Результат запуска программы представлен на рис. 3.2.
Рис. 3.2 Результат запуска тестирующей программы для метода опасных указателей при заранее неизвестном числе потоков
В результате проведённого тестирования следует отметить, что разработанная структура на основе метода опасных указателей показала себя безупречно, и ошибок в работе выявлено не было. Разработанная структура на основе метода неблокирующего подсчёта ссылок имеет небольшой процент ошибок, от которого можно избавиться, если читать данные до тех пор, пока они не будут верными. Однако стоит отметить, что данные метод является более медленным без освобождения памяти, а также с освобождением памяти без привязки к ядрам процессора.
.4 Сравнение структур по временным характеристикам
Для систем реального времени важным фактором является не только правильность выполнения операций, но и время их выполнения, причём, если для систем мягкого реального времени важно среднее время выполнения операций, то для систем жёсткого реального времени - максимальное время выполнения операций. Таким образом, необходимо провести измерения времени выполнения операций чтения и записи для разработанных структур и построить графики зависимости времени выполнения операция от числа потоков. Для этого программа тестирования была изменена с учётом следующих требований:
)Запуск методов неблокирующего подсчёта ссылок и опасных указателей поочерёдно.
)Измерение времени выполнения операций записи и чтения.
)Задание произвольного числа операций, время выполнения которых измеряется.
)Запись в файл результатов измерения операций записи и