Module extractor strategies » History » Revision 2
Revision 1 (Alexey Polushkin, 06/15/2018 04:25 PM) → Revision 2/4 (Alexey Polushkin, 06/15/2018 04:41 PM)
h1. Module extractor stategies h2. Single File Эта стратегия сопоставляет каждому объектному файлу, полученому после команды компиляции, свой модуль, который содержит файлы, из которых был скомпилирован этот объектный файл. Данная стратегия не имеет специфичных требований к проекту. Стратегия не имеет параметров. h2. Linux Kernel Эта стратегия предназначена для извлечения модулей для ядра Linux и объектных файлов ядра Linux. Стратегия имеет следующие параметры *modules* : bool. По умолчанию True. Данный параметр сообщает стратегии извлекать модули ядра Linux (не объектные файлы самого ядра) *kernel* : bool. По умолчанию False. Данный параметр сообщает стратегии излвекать объектные файлы самого ядра *kernel subdirs* : bool. По умолчанию False. Данный параметр сообщает стратегии о необходимости группировать объектные файлы самого ядра в один модуль, если они находятся в одной подсистеме h2. Graph Partitioner Данная стратегия предназначена для извлечения модулей, используя сторонние инструменты: Scotch, Metis. Является предпочитаемой стратегией для использования в произвольных проектах. Стратегия сводит задачу декомпозиции программы на модули к задаче декомпозиции графа на подграфы. Каждому объектному файлу, полученному в результате комплияции сопоставляется вершина графа. Дуга ведет из вершины А в вершину В, если файл, соответстующий вершине А вызывает функции из файла, соответствующего вершине В. Каждой вершине приписано число - размер файла в строках кода. Каждой дуге приписано число - число вызываемых функций. Используемые инструменты производят декомпозицию графа на подграфы таким образом, что сумма чисел, приписанных разрезанным дугам минимальна, а сумма чисел, приписанных вершинам каждого подграфа стремятся быть схожими. Стратегия имеет следующие параметры *bin path* : String. Путь до исполняемого файла, осуществляющего декомпозицию графа. Для Scotch это файл gpart, для Metis gpmetis графа *tool* : String. Используемый инструмент. Возможные значения - "scotch", "metis" *must modules* : List<List<String>>. Список из списка файлов, которые должны быть в одном модуле. *partitions* : Int. Число частей, на которые необходимо осуществить декомпозицию. *module size* : Int. Размер модуля, выраженный в числе файлов, входящих в него. При этом, должен быть указан один из параметров *partitions*, *module size*. h2. Vertex Merge Данная стратегия предназначена для извлечения модулей, компонуя файлы в один модуль, если их вызывают одни и те же модули. Данная стратегия хорошо применима к проектам, содержащим библиотеки или расширения (busybox, nginx, apache). Данная стратегия сводит задачу декомпозиции к задаче декомпозиции графа как и предыдущая стратегия. Затем, на каждой итерации находит две вершины, у которых есть общий предок (вершина, из которой есть дуга в эти вершины) и при этом, размер симметричной разности предков каждой вершины минимален среди остальных. Затем, эти две вершины сливаются в одну, образуя модуль. При этом, у вершин из одной подсистемы приоритет на слияние при прочих равных. Стратегия имеет следующие параметры *max iters* : Int. По умолчанию 200. Максимальное число итераций слияния. Стратегия может завершить свое выполнение и до достижения заданного числа, если не найдены вершины для слияния *max locs* : Int. Максимальное число строк для создаваемых модулей *max files* : Int. Максимальное число файлов для создаваемых модулей *same subsystms* : Bool. Производить слияние только файлов из одной подсистемы h2. Breadth Данная стратегия предназначена для извлечения модулей, обходя граф завимостей между файлами в ширину и генерируя модули до достижения их максимального размера. Данная стратегия имеет следующие параметры *max locs* : Int. Максимальный размер модуля в строках кода *module size* : Int. По умолчанию 3. Максимальный размер модуля в файлах.