r2 - 24 Feb 2006 - 01:24:19 - Artem PervinYou are here: TWiki >  OPENTS Web > Schedulers
Проведенные нами исследования показали, что при разработке планировщиков для OpenTS необходимо уделять особое внимание внутренним ресурсам т-системы. Одним из таких критических ресурсов является количество одновременно выполняющихся суперпотоков. Некорректные реализации планировщиков могут порождать лавинообразное увеличение количества суперпотоков, что неизбежно ведет к аварийному завершению программы (Stack overflow). Суперпоток - SThread, ключевой класс Т-Системы, описывающий легковесный поток.

Один из экспериментов с суперпотоками был проведен с приложением fib (вычисление чисел Фиббоначи). Это приложение использует рекурсию и как следствие порождает значительное число ветвей исполнения. Стандартный планировщик (MacroScheduler) не стремится каким-то образом переупорядочить задачи, выполняя их согласно стековой модели. В этом случае даже для большого числа (40) Фиббоначи количество одновременно выполняющихся суперпотоков не превышает 25. С другой стороны, модификация планировщика GridScheduler, в которой функция make_decision (ответственная за определение процесса, на котором должна выполнятся очередная задача из очереди) всегда возвращает 0, быстро создает более 2500* одновременно выполняющихся суперпотоков в результате чего программа завершается с сообщением "Stack overflow".

Во избежание аварийного завершения программы планировщик может следовать различным стратегиям Ну, например, когда припечет - вернуться к стандартному планировщику. Он разгребет, по идее. Если у нас вообще можно менять планировщики, то кто запрещает делать это и во время работы? Поменял ссылку обратно - и все.

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

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

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

* Очевидно, эта велечина определяется размерами стеков в конфигурационном файле tssconfig.h

-- Artem Pervin - 20 Feb 2006

  • superthreads.diff: Патч к super.hh для измерения количества суперпотоков: простой счетчик, который распечатывается во время выполнения программы.
Show attachmentsHide attachments
Topic attachments
I Attachment Action Size Date Who Comment
elsediff superthreads.diff manage 1.0 K 21 Feb 2006 - 02:16 Artem Pervin Патч к super.hh для измерения количества суперпотоков
Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r2 < r1 | More topic actions
 
Powered by TWiki

This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback