Файлы System/bin Android 12. Справочник.


  Все     Команда     Скрипт     Служба     Приложение  

treadahead
Упреждающее чтение

Тип файла: команда
  Eng  

usage: %s [OPTION]... [FILE]...
Выполняет readahead(2) для каждой записи в файловом списке.

Параметры:

  • -v --verbose Вывести имя каждого успешно загруженного файла

  • -d --debug Распечатать сообщения о состоянии во время обработки

  • -h --help

  • -V --version


    Readahead = чтение данных в кэш страниц Linux до того, как они потребуются во время загрузки.

    Упреждающее чтение — это тестовая программа для экспериментов с различными параметрами упреждающего чтения.
    Помимо фактического выполнения операций опережающего чтения, он включает в себя средства для записи iowait до и после последовательности опережающего чтения, определения продолжительности операций опережающего чтения и изменения таких вещей, как приоритет планирования процесса, планировщик ввода-вывода и приоритет планирования ввода-вывода.

       

    Комментарии
    Как пользоваться программами Treadahead

    Mincore используется для сбора информации о блоках файла, находящихся в памяти.
    Вы передаете ему список файлов, и он выводит список блоков.
    Используйте параметры -r, чтобы указать, что вывод должен быть в формате treadhead.
    Treadahead используется для чтения файлов и частей файлов в память.
    Вы можете указать области для чтения в командной строке или в файле /readahead_list.txt

    Каждая строка в файле readahead_list.txt указывает файл для чтения с синтаксисом:
    <имя_файла>[список_областей]
    area_list: <смещение>:<длина>[,<смещение>:<длина>]

    Если area_list пуст, то впереди читается весь файл.

    Вот пример:
    /система/фреймворк/фреймворк-res.apk
    /system/app/Contacts.apk 0:4096,1282048:4096,1294336:4096,1470464:12288

    Это будет читать все в framework-res.apk и только определенные части Contacts.apk
    Чтобы создать необходимый файл данных, вам необходимо выполнить следующие шаги:
    - создать список файлов для сканирования
    - используйте mincore со списком файлов, чтобы создать список блоков для упреждающего чтения
    - используйте treadahead в /init.rc для опережающего чтения блоков

    Для тестирования вы можете удалить блоки из кэша страниц ядра.
    Вы можете сделать это с помощью:
    $ эхо 1 >/proc/sys/vm/drop_caches

    Вы можете повторить «1», «2» или «3» для drop_caches.
    '1' сбрасывает кэш страниц, '2' сбрасывает dentries и inodes, а '3' сбрасывает оба)

    В sreadahead список файлов определяется путем проверки данных трассировки файлов, открываемых во время загрузки. Для раннего тестирования treadhead используются файлы, которые потребляют много времени загрузки, из-за инструментирования процесса zygote во время предварительной загрузки его класса (а также сканирования пакетов во время инициализации диспетчера приложений).

    Использование

    Чтобы создать список файлов (для /readahead_files.txt), загрузите систему,
    затем вскоре после запуска системы выполните:
    # find . -name "*.apk" | xargs mincore

    Поместите имена файлов со значительными блоками в кэше в /readahead_files.txt

    Чтобы создать черный список, снова перезагрузитесь и выполните:
    # cat /readahead_files.txt | xargs mincore -r >/readahead_list.txt

    Чтобы запустить систему с включенным упреждающим чтением, добавьте эти строки в /init.rc
    service treadahead /system/bin/treadahead -e -f
    oneshot

    '-e' переводит treadahead в фоновый режим,
    '-f' указывает treadahead читать список файлов и блоков из файла /readahead_files.txt

    Тестирование скорости загрузки на Android

    Чтобы увидеть скорость загрузки (и влияние упреждающего чтения),
    прочтите журналы 'events' и 'main'

    Возьмите журнал событий с помощью:
    $ adb logcat -b события -d >eventlog1.txt

    Возьмите основной журнал с помощью:
    $ adb logcat -d > mainlog1.txt

    Найдите метки времени предварительной загрузки класса с помощью:
    $ grep boot eventlog1.txt

    Найдите общее время начала с помощью:
    $ grep enable_screen eventlog1.txt

    Найдите продолжительность предварительной загрузки класса с помощью:
    $ grep предварительно загружен mainlog1.txt

    Найдите время для сканирования пакетов с помощью:
    $ grep Time mainlog1.txt

    Вы можете сравнить результаты разных прогонов, используя подстановочные знаки оболочки:
    $ grep enable_screen * или $ grep Time *