Skip to content

Latest commit

 

History

History
53 lines (43 loc) · 4.36 KB

check.md

File metadata and controls

53 lines (43 loc) · 4.36 KB

Задание

Проверка оптимизированного файла.

Контекст

BOLT перемещает и/или изменяет бинарный код приложения или библиотеки в целях оптимизации. Такие преобразования являются нетривиальным изменением, и BOLT не может гарантировать корректность оптимизированного приложения. Поэтому есть необходимость тестирования приложения после оптимизации.

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

Возможно объединить эти два требования в один подход, который позволит пользователю при помощи одного и того же механизма задавать как способ тестирования приложений, так и исключать любое приложение из оптимизации.

Способ проверки

test_hook: текстовый файл, в котором задаётся метод тестирования данного входного файла.

Огранизация test_hook:

<паттерн 1> <скрипт тестирования 1>
<паттерн 2> <скрипт 2>
...

Например:

*clang /path/to/clang_test.sh
*chrome /path/to/chrome_test.sh
/usr/lib64/* false 

test_hook и скрипты задаются пользователем.

Паттерн – регулярное выражение, с которым сравниваются входные файлы (полный путь к исходному файлу). Паттерны в test_hook проверяются по порядку. Если данный паттерн матчит имя входного файла, то вызывается соответствующий скрипт. Если ни один паттерн не матчит имя данного входного файла, то проверка считается неуспешной. Если файла test_hook не существует, то проверка считается неуспешной.

Скрипт принимает два параметра: полный путь к исходному файлу, полный путь к оптимизированному файлу. Скрипт некоторым образом проверяет оптимизированный файл. Если скрипт завершается с кодом 0, то проверка считается успешной, иначе неуспешной.

План

perfd.py:

  • задать метод, который по данному исходному имени файла найдет соответствущий скрипт, или None если скрипт не был зарегистрирован: get_hook(objfile) -> hookname
  • задать метод, вызывающий проверку для данного файла: test_hook(objfile) -> bool
    • вызвать get_hook
    • если скрипт найден: вызвать скрипт hookname с параметрами: исходное имя файла (objfile), имя оптимизированного файла (outfile)
    • вернуть True если проверка успешна (код возврата скрипта 0), False иначе
    • если скрипт не найден: вернуть False

test_hook:

  • создать файл test_hook, задать один паттерн и проверочный скрипт для компилятора clang (указать полный путь к clang)
    • проверочный скрипт: вызвать clang(outfile) --version (исходный файл objfile игнорируется)