Module extractor strategies » History » Version 1
Alexey Polushkin, 06/15/2018 04:25 PM
1 | 1 | Alexey Polushkin | h1. Module extractor stategies |
---|---|---|---|
2 | |||
3 | h2. Single File |
||
4 | |||
5 | Эта стратегия сопоставляет каждому объектному файлу, полученому после команды компиляции, свой модуль, который содержит файлы, из которых был скомпилирован этот объектный файл. Данная стратегия не имеет специфичных требований к проекту. |
||
6 | Стратегия не имеет параметров. |
||
7 | |||
8 | h2. Linux Kernel |
||
9 | |||
10 | Эта стратегия предназначена для извлечения модулей для ядра Linux и объектных файлов ядра Linux. |
||
11 | Стратегия имеет следующие параметры |
||
12 | *modules* : bool. По умолчанию True. Данный параметр сообщает стратегии извлекать модули ядра Linux (не объектные файлы самого ядра) |
||
13 | *kernel* : bool. По умолчанию False. Данный параметр сообщает стратегии излвекать объектные файлы самого ядра |
||
14 | *kernel subdirs* : bool. По умолчанию False. Данный параметр сообщает стратегии о необходимости группировать объектные файлы самого ядра в один модуль, если они находятся в одной подсистеме |
||
15 | |||
16 | h2. Graph Partitioner |
||
17 | |||
18 | Данная стратегия предназначена для извлечения модулей, используя сторонние инструменты: Scotch, Metis. Является предпочитаемой стратегией для использования в произвольных проектах. |
||
19 | Стратегия сводит задачу декомпозиции программы на модули к задаче декомпозиции графа на подграфы. Каждому объектному файлу, полученному в результате комплияции сопоставляется вершина графа. Дуга ведет из вершины А в вершину В, если файл, соответстующий вершине А вызывает функции из файла, соответствующего вершине В. Каждой вершине приписано число - размер файла в строках кода. Каждой дуге приписано число - число вызываемых функций. Используемые инструменты производят декомпозицию графа на подграфы таким образом, что сумма чисел, приписанных разрезанным дугам минимальна, а сумма чисел, приписанных вершинам каждого подграфа стремятся быть схожими. |
||
20 | Стратегия имеет следующие параметры |
||
21 | *bin path* : String. Путь до исполняемого файла, осуществляющего декомпозицию графа |
||
22 | *tool* : String. Используемый инструмент. Возможные значения - "scotch", "metis" |
||
23 | *must modules* : List<List<String>>. Список из списка файлов, которые должны быть в одном модуле. |
||
24 | *partitions* : Int. Число частей, на которые необходимо осуществить декомпозицию. |
||
25 | *module size* : Int. Размер модуля, выраженный в числе файлов, входящих в него. |
||
26 | При этом, должен быть указан один из параметров *partitions*, *module size*. |
||
27 | |||
28 | h2. Vertex Merge |
||
29 | |||
30 | Данная стратегия предназначена для извлечения модулей, компонуя файлы в один модуль, если их вызывают одни и те же модули. Данная стратегия хорошо применима к проектам, содержащим библиотеки или расширения (busybox, nginx, apache). Данная стратегия сводит задачу декомпозиции к задаче декомпозиции графа как и предыдущая стратегия. Затем, на каждой итерации находит две вершины, у которых есть общий предок (вершина, из которой есть дуга в эти вершины) и при этом, размер симметричной разности предков каждой вершины минимален среди остальных. Затем, эти две вершины сливаются в одну, образуя модуль. При этом, у вершин из одной подсистемы приоритет на слияние при прочих равных. |
||
31 | Стратегия имеет следующие параметры |
||
32 | *max iters* : Int. По умолчанию 200. Максимальное число итераций слияния. Стратегия может завершить свое выполнение и до достижения заданного числа, если не найдены вершины для слияния |
||
33 | *max locs* : Int. Максимальное число строк для создаваемых модулей |
||
34 | *max files* : Int. Максимальное число файлов для создаваемых модулей |
||
35 | *same subsystms* : Bool. Производить слияние только файлов из одной подсистемы |
||
36 | |||
37 | h2. Breadth |
||
38 | |||
39 | Данная стратегия предназначена для извлечения модулей, обходя граф завимостей между файлами в ширину и генерируя модули до достижения их максимального размера. |
||
40 | Данная стратегия имеет следующие параметры |
||
41 | *max locs* : Int. Максимальный размер модуля в строках кода |
||
42 | *module size* : Int. По умолчанию 3. Максимальный размер модуля в файлах. |