System coders zone Board.sysbin.com
Здесь говорят правду!   RSS   Файловый хостинг #1

 ПоискПоиск   ПользователиПользователи   РегистрацияРегистрация   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Измеритель скорости переключения задач
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов Board.sysbin.com -> Applications coding
Предыдущая тема :: Следующая тема  
Автор Сообщение
Chizh
Гуру второй степени
Гуру второй степени


Зарегистрирован: 18.03.2005
Сообщения: 2039
Откуда: с Луны

СообщениеДобавлено: Пт Дек 25, 2009 8:10 pm    Заголовок сообщения: Измеритель скорости переключения задач Ответить с цитатой

Написал программки для имерения скорости переключения задач и потоков. Меряется количество переключений в секунду между двумя задачами, а также между двумя потоками внутри одной задачи. Тест позволяет сравнить производительность разных систем на одном и том же компьютере. Тест работает под Express OS и Windows XP, и адаптировав код теста под вашу собственную систему, вы сможете сравнить показания своей ОС с показаниями двух других ОС на вашем компьютере.

Тест состоит из трёх программ под Windows: task1.exe, task2.exe и task3.exe. Скомпилированы с помощью OpenWatcom 1.8. Тесты под Линукс пока в разработке.

Файлы task1.exe и task2.exe используются для измерения переключений между двумя задачами - тоесть переключения между этими двумя программами. task3.exe для этого теста не запускать.

task3.exe используется для измерения переключений двух потоков внутри одной задачи. task1.exe и task2.exe для этого теста не запускать.

Загрузочный CD-ROM с тестовыми программами находится ЗДЕСЬ (файл eos-img-2009.12.25.rar).
Исходный код тестов находится ЗДЕСЬ.

Для запуска тестов в Express OS нужно сначала перейти в каталог с помощью команды
cd system
потом ввести task1.exe
затем переключить окно нажав клавиши Ctrl Alt.
потом ввести task2.exe
После получения результатов нажать Reset.
Загрузиться заново и запустить task3.exe. Результаты можно сообщить здесь Smile

Для запуска тестов в Windows XP просто запустить task1.exe и task2.exe. Потом их закрыть, и запустить test3.exe. Но нужно учитывать количество ядер процессора. Windows использует несколько ядер процессора, а Express OS использует одно ядро, поэтому показания производительности принципиально разные. Для выравнивания характеристик ОС, можно открыть менеджер задач Windows, открыть раздел "Processes", на процессе test1.exe, test2.exe (потом test3.exe) открыть контекстное меню, и пункт "Set affinity...", затем в диалоге снять галочки с остальных CPU, кроме CPU 0.

У меня получились такие результаты.
test1,test2 : Express 1 ядро: 2280000 ; Windows 1 ядро: 1380000 ; Windows 2 ядра: 6600000.
test3 : Express 1 ядро: 2970000 ; Windows 1 ядро: 2730000 ; Windows 2 ядра: 6000000.

Здесь имеет значение лишь соотношение цифр, а не их абсолютные значения.
Просмотреть профиль
Dron
Гуру третьей степени
Гуру третьей степени


Зарегистрирован: 12.01.2005
Сообщения: 3105
Откуда: Москва

СообщениеДобавлено: Сб Дек 26, 2009 8:21 pm    Заголовок сообщения: Ответить с цитатой

Это ты в чем мерял?

Я в свое время у себя на MDF мерил время аппаратного переключения...
У меня получилось порядка 1100 тактов...

А у тебя что за цифры?
Просмотреть профиль
Прутся от ось медведи, вертится земля...
Jabber ID: dron@jabber.cc
BLOG: http://mdf-i.blogspot.com/
Chizh
Гуру второй степени
Гуру второй степени


Зарегистрирован: 18.03.2005
Сообщения: 2039
Откуда: с Луны

СообщениеДобавлено: Сб Дек 26, 2009 10:27 pm    Заголовок сообщения: Ответить с цитатой

Dron, как я написал в самом начале, меряется количество переключений в секунду.
От этой цифры можно получить и количество тактов, поделив частоту процессора на неё.
К стати в Express OS количество тактов примерно как в MDF. Делим 2,666ГГц на количество переключений задач и потоков, получаем 1169 и 897 тактов соответственно.
Просмотреть профиль
Здесь будет ОС: http://code.google.com/p/express-os
Dron
Гуру третьей степени
Гуру третьей степени


Зарегистрирован: 12.01.2005
Сообщения: 3105
Откуда: Москва

СообщениеДобавлено: Вс Дек 27, 2009 1:31 pm    Заголовок сообщения: Ответить с цитатой

Chizh, Да, значит я мерял достаточно точно... Smile

только мне казалось это должно происходить побыстрее... 1000 тактов - это ж дофига... Smile
Просмотреть профиль
Прутся от ось медведи, вертится земля...
Jabber ID: dron@jabber.cc
BLOG: http://mdf-i.blogspot.com/
Chizh
Гуру второй степени
Гуру второй степени


Зарегистрирован: 18.03.2005
Сообщения: 2039
Откуда: с Луны

СообщениеДобавлено: Чт Дек 31, 2009 2:56 am    Заголовок сообщения: Ответить с цитатой

Сделал тесты для Linux. Файлы task1.elf, task2.elf и task3.elf.
Результаты:
test1,test2 : Linux 1 ядро = 1800000 ; Linux 2 ядра = 3670000
test3 : Linux 1 ядро = 1800000 ; Linux 2 ядра = 3500000

Тестировался Debian Linux 5.0.3, ядро 2.6.26. Одноядерный и многоядерный режим системы выбирался с помощью меню загрузки. Одноядерный режим в загрузочном меню имеет приставку (single user).

В итоге получилось, что Windows в многоядерном режиме лучше всех, но хуже всех в одноядерном.
Linux в многоядерном режиме хуже Windows, но лучше в одноядерном.
В Express многоядерного режима пока что нет вообще, но лучше всех в одноядерном режиме.

Бинарники с исходниками ЗДЕСЬ.
Загрузочный CD-ROM с Express OS ЗДЕСЬ (eos-img-2009.12.30.rar). На CD-ROM содержатся компиляции под Windows (.exe) и Linux (.elf). В Express OS работают обе компиляции, их результаты идентичны.
Просмотреть профиль
Здесь будет ОС: http://code.google.com/p/express-os
Chizh
Гуру второй степени
Гуру второй степени


Зарегистрирован: 18.03.2005
Сообщения: 2039
Откуда: с Луны

СообщениеДобавлено: Ср Янв 13, 2010 3:29 pm    Заголовок сообщения: Ответить с цитатой

Релизовал поддержку нескольких процессоров (ядер). Версия 2010.01.12.
Теперь такие результаты:
test1,test2 : Express 1 ядро: 1900000 ; Express 2 ядра: 4400000.
test3 : Express 1 ядро: 2600000 ; Express 2 ядра: 2600000.

В результате усложнения ядра снизилась скорость многозадачности в одноядерном режиме с 2200000 до 1900000, и многопоточности с 2970000 до 2600000.

В 2-х ядерном режиме многозадачность ускорилась с 2200000 до 4400000, ровно в 2 раза.

Многопоточность не ускорилась. Каждой задаче доступно только по одному процессору. Возможно, распределение будет потом.

Индикатор загрузки процессора показывает только первый процессор. Индикаторы скоро будут добавлены.

При запуске программ, номер процессора выбирается по кругу. Первая запускаемая программа с консоли загрузится на второй процессор (на первый процессор попала сама консоль), а следующая на первый (если 2 процессора) или третий процессор.

О проблемах. На эмуляторе VMware система работает не при каждом запуске. Иногда требуется перезапуск.

Обычные версии эмулятора Bochs не поддерживают многопроцессорность. Для включения поддержки, нужно скачать и установить обновление bochs-p4-smp-2.4-win32.zip из http://sourceforge.net/projects/bochs/files/bochs/2.4
и в файле параметров Bochs установить значние cpu: count=2
Правильно настроенный bochsrc.txt есть в архиве исходников eos-src.zip

PS. В многопроцессорной синхронизации я мало понимаю. Есть вопрос. После установки флага занятости некого ресурса с помощью xchg [lock],1, то при освобожении ресурса достаточно ли обнулить флаг простой записью нуля командой mov [lock],0, или нужны другие синхронизирующие операции? Вообще-то у меня работает и так.
Просмотреть профиль
Здесь будет ОС: http://code.google.com/p/express-os
Dron
Гуру третьей степени
Гуру третьей степени


Зарегистрирован: 12.01.2005
Сообщения: 3105
Откуда: Москва

СообщениеДобавлено: Ср Янв 13, 2010 11:43 pm    Заголовок сообщения: Ответить с цитатой

Chizh писал(а):
PS. В многопроцессорной синхронизации я мало понимаю. Есть вопрос. После установки флага занятости некого ресурса с помощью xchg [lock],1, то при освобожении ресурса достаточно ли обнулить флаг простой записью нуля командой mov [lock],0, или нужны другие синхронизирующие операции? Вообще-то у меня работает и так.


Насколько знаю - xchg - лочит шину, а mov - не лочит...
но в принципе основные проблемы возникают при захвате мутекса, при освобождении проще. так что может быть нелоченный mov вполне покатит... Хотя для чистоты можно было бы использовать тот же xchg Smile
Просмотреть профиль
Прутся от ось медведи, вертится земля...
Jabber ID: dron@jabber.cc
BLOG: http://mdf-i.blogspot.com/
Chizh
Гуру второй степени
Гуру второй степени


Зарегистрирован: 18.03.2005
Сообщения: 2039
Откуда: с Луны

СообщениеДобавлено: Чт Янв 14, 2010 1:52 am    Заголовок сообщения: Ответить с цитатой

Dron писал(а):
Хотя для чистоты можно было бы использовать тот же xchg Smile

Из мануалов Intel понял, что под мутексы желательно использовать некэшированную память. Тоесть страницы с установленными атрибутами "Cache disabled" (не знаю, как выкручиваются системы без страничной памяти).
По-хорошему надо сделать менеджер мютексов, который будет выдавать по одной переменной из массива переменных, расположенных в такой некэшированной странице.
Ещё Intel для скорости рекомендует выравнивать каждую такую переменную на 128-байтный блок.
Просмотреть профиль
Здесь будет ОС: http://code.google.com/p/express-os
Chizh
Гуру второй степени
Гуру второй степени


Зарегистрирован: 18.03.2005
Сообщения: 2039
Откуда: с Луны

СообщениеДобавлено: Чт Янв 14, 2010 3:04 am    Заголовок сообщения: Ответить с цитатой

Вышла версия 2010.01.13. Проведена небольшая оптимизация, и скорость возросла в 2 раза.
Теперь такие результаты:
test1,test2 : Express 1 ядро: 4300000 ; Express 2 ядра: 8400000.
test3 : Express 1 ядро: 4400000 ; Express 2 ядра: 4400000.

Многозадачность Express OS стала лучше всех.
Многопоточность стала быстрее Linux. Если будет реализовано распараллеливание потоков, то есть шанс обогнать и Windows.
Просмотреть профиль
Здесь будет ОС: http://code.google.com/p/express-os
Dron
Гуру третьей степени
Гуру третьей степени


Зарегистрирован: 12.01.2005
Сообщения: 3105
Откуда: Москва

СообщениеДобавлено: Чт Янв 14, 2010 11:10 am    Заголовок сообщения: Ответить с цитатой

Chizh писал(а):
Из мануалов Intel понял, что под мутексы желательно использовать некэшированную память. Тоесть страницы с установленными атрибутами "Cache disabled" (не знаю, как выкручиваются системы без страничной памяти).
По-хорошему надо сделать менеджер мютексов, который будет выдавать по одной переменной из массива переменных, расположенных в такой некэшированной странице.
Ещё Intel для скорости рекомендует выравнивать каждую такую переменную на 128-байтный блок.


Помоему кеши как-то должны обходиться...
Вообще сами по себе страницы не кешируются нигде (ну не считая L1,L2,L3, где кешируются не страницы а "строки" памяти, те самые наверное 128 байт)...

Кеш TLB кеширует линейные адреса страниц... Что собственно никак не мешает блокировкам.

Что касается кешей L*, то они как-то похитрому синхронизируются...
Если один процессор пишет память - то строка сразу помечается как грязная, и другой процесс при попытке прочитать получит уже изменившуюся память... Но от одновременной записи это конечно не спасет. Для этого наверное и нужны локи, они блокируют одноуременную запись... Или может быть строки кеша сами лочатся на запись на конкретном камне.

Вообще могу путать, я в эту тему сильно не углублялся. Smile
Просмотреть профиль
Прутся от ось медведи, вертится земля...
Jabber ID: dron@jabber.cc
BLOG: http://mdf-i.blogspot.com/
Chizh
Гуру второй степени
Гуру второй степени


Зарегистрирован: 18.03.2005
Сообщения: 2039
Откуда: с Луны

СообщениеДобавлено: Чт Янв 14, 2010 1:17 pm    Заголовок сообщения: Ответить с цитатой

Про синхронизацию вопрос снят. Данные кэшей всех процессоров синхронизируются автоматически.

Последний раз редактировалось: Chizh (Пт Янв 15, 2010 12:18 am), всего редактировалось 1 раз
Просмотреть профиль
Здесь будет ОС: http://code.google.com/p/express-os
Chizh
Гуру второй степени
Гуру второй степени


Зарегистрирован: 18.03.2005
Сообщения: 2039
Откуда: с Луны

СообщениеДобавлено: Чт Янв 14, 2010 8:26 pm    Заголовок сообщения: Ответить с цитатой

Вышла версия 2010.01.14. Добавлены индикаторы загрузки процессоров.

PS. Нашёл очень полезную настройку VMware. В разделе Processors надо ставить галочку на параметре VMware kernel paravirtualization. Значительно ускоряется работа.
Просмотреть профиль
Здесь будет ОС: http://code.google.com/p/express-os
Phantom-84
Гуру
Гуру


Зарегистрирован: 28.02.2006
Сообщения: 1129

СообщениеДобавлено: Чт Янв 14, 2010 9:52 pm    Заголовок сообщения: Ответить с цитатой

Из-за кэширования проблем не будет. 3десь действительно на первый план выходит выравнивание, т.к. данные одной команды могут попасть в разные строки кэша, разные шинные пакеты. Для меня не факт, что процессор выполняет блокировку между такими обращениями. Блокировать mov с выравнеными данными нет вообще никакой необходимости, как в общем-то и xchg (здесь Дрон прав, блокировка выполняется автоматически).
Chizh писал(а):
PS. Нашёл очень полезную настройку VMware. В разделе Processors надо ставить галочку на параметре VMware kernel paravirtualization. Значительно ускоряется работа.
Угу.
Просмотреть профиль
Chizh
Гуру второй степени
Гуру второй степени


Зарегистрирован: 18.03.2005
Сообщения: 2039
Откуда: с Луны

СообщениеДобавлено: Вт Янв 19, 2010 11:55 pm    Заголовок сообщения: Ответить с цитатой

Вышла версия 2010.01.19. Сделано распределение потоков на разные процессоры. Исправлена ошибка в процедуре удаления задач.

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

Скорость многозадачности стала 8 500 000. Скорость многопоточности теперь 6 100 000, как у Windows.

Как видно из тестов, на многопроцессорном компьютере скорость многозадачности выше скорости многопоточности. Это не означает, что многопоточность медленнее. Разница вот откуда.
В тесте многозадачности, задача task2 использует счётчик, который инкрементируется только одной задачей, прибавляя по 2, сразу считая себя и конкурирующую задачу. А вторая задача счётчик не трогает - другой задаче эта переменная просто напросто недоступна физически.
В тесте же многопоточности, каждый конкурирующий поток сам инкрементирует общий счётчик на 1. При этом происходят задержки из-за синхронизации кэша памяти между процессорами, отсюда и пониженный результат.
Поэтому "чистую" скорость переключений показывает task1 c task2, а task3 с учётом синхронизации по памяти.
PS. Вообще-то можно использовать каждому потоку отдельную переменную-счётчик и выводить их сумму, тогда коллизий не будет. Скоро переделаю.
Просмотреть профиль
Здесь будет ОС: http://code.google.com/p/express-os
Chizh
Гуру второй степени
Гуру второй степени


Зарегистрирован: 18.03.2005
Сообщения: 2039
Откуда: с Луны

СообщениеДобавлено: Ср Янв 20, 2010 1:46 pm    Заголовок сообщения: Ответить с цитатой

Переделал тест потоков task3 с разделёнными счётчиками. Скорость поднялась до 6 500 000. Файлы на сайте обновлены.

PS. Процессор "AMD Athlon 64 X2 Dual Core 4000+" показал ещё лучшие результаты, чем Intel Core 2 Duo E8200. Многозадачность 9 500 000, многопоточность 7 000 000. AMD однозначно лучший для серверов.
Просмотреть профиль
Здесь будет ОС: http://code.google.com/p/express-os
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Board.sysbin.com -> Applications coding Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

Similar Topics
Тема Автор Форум
Нет новых сообщений Оценка скорости работы популярных web-браузеров CodeWorld News
Нет новых сообщений менеджер задач [9x] CodeWorld Applications coding
Нет новых сообщений Переключение задач Shockk Lowlevel coding
Нет новых сообщений Загрузка задач MichOS OS development
Нет новых сообщений Переключение задач TSS fer Lowlevel coding




Powered by www.phpbb.com