А оценка где? Где, я тебя спрашиваю, красивые графики зависимости времени выполнения операций от количества пакетов? Как я узнаю экспоненциальный там рост или всего лишь порядка квадратного корня?
Gentoo-шники всех твоих Ъ дом труба шатали а потому-что не читать документацию есть зло.
Повтори это как только гентушники во всех своих дефолтных профилях по умолчанию добавят use флаг -doc, чтобы читать документацию на внешних ресурсах, а не на localhost'е.
Ну sqlite для хранения дерева и не подходит. Я тоже когда-то пробовал прикручивать. Тут нужна какая-то БД, которая с графами зависимостей работает и оптимизирует запросы вида «выдай мне все зависимости, исключая уже установленные».
Хотя, если на каждый пакет наделать вьюх со всеми его зависимостями, то работать будет достаточно быстро. Но кэш будет строиться очень долго, фактически ты делаешь по одному emerge на каждый пакет в дереве :3
На самом деле можно однажды сгенерить кэш зависимостей, а потом просто в него вносить diff при каждом emerge --sync, это все вполне реализуемо. Можно даже напедалить какую-нибудь свою внутреннюю БД со своим форматом, дабы не тянуть кучу зависимостей в stage3, просто этим никто не занимается. А я это не сделаю, т.к. не программер.
Как нетрудно заметить в 31 сек/8 сек=3,875 раза т.е. в 3,875 раза ускоряется процесс
ускоряется процесс разбора доступных пакетов.
То есть, грубо говоря, при установке пакета на голую систему ты выигрываешь восемь секунд, что обычно является статистически незначимой погрешностью. Вот не пофиг ли, установится geeqie за минуту или за минуту и восемь секунд? Не пофиг ли, накатятся апдейты из сотни пакетов за час или час и восемь секунд? (Ради политкорректности временем сборки софта в генте было решено пренебречь)
То есть, точно говоря, и как уже успели заметить выше, я получил две точки зависимости. А дальше 3,875 это то во сколько раз быстрее portage посчитает объём пакетов из stage3 с дефолтными USE флагами на минимальном дереве потрежей (в котором исключительно только то что в самом stage3 и ничего более) относительно официальной свалки портежей и при прочих равных условиях.
сегодня эксперементировал с запихиванием всех кешев и портежей в озу при помощи tmpfs. Туда поместил /usr/portage, /var/db/pkg, /var/cache
от этого никакого радикального ускорения просчёта зависимостей не происходит, время ускоряется процентов на 30, а используется при этом примерно 1 ядро из 4.
Правда у меня paludis, но думаю что результат будет примерно такой же и для emerge
> при каждом ручном измении ебилдов ...тебе ругнется портеж на несовпадение контрольных сумм.
А вообще сейчас в portage есть такая фича как thin-manifests и в результате в манифестах исключительно исходники софта а суммы ebuild-ов и прочее вообще по барабану. Так что portage вполне может и не ругнутся.
А однозначно дерево не построить: зависимости могут быть плавающими (пакет A зависит либо от пакета B, либо от C). Не говоря уже о юзфлагах.
А кто говорит про однозначность? В depends и так есть свой синтаксис с флагами и or/and, достаточно в кэш-файлах вписать туда не только прямые «соседние» зависимости, а все, в том же формате. Считать и парсить список будет так же долго, но хотя бы по многим файлам бегать не надо будет.
И вот тут он его посчитает быстро или очень быстро, или, даже, может, быть медленно. Допустим, он его будет считать целую минуту!
А потом он начнет собирать твой stage3. За сколько минут он его соберет? Не окажется ли время работы любого алгоритма подсчета в пределах статистической погрешности относительно времени выполнения остальных операций?
Тогда ССЗБ, и при указании этих опций не должен использоваться кеш.
Как это не должен? Да при thin-manifests изменение ebuild-а никак не отобразится на контрольной сумме в манифесте потому-что в этом случае она там тупо вовсе не учитывается. Однако при всем при этом зависимости строить и в случае thin-manifests никто не мешает.
Угу, а еще он считает контрольные суммы _всех_ ебилдов при любом обсчете зависимостей. Внезапно обнаружил это после того, как начал писать кастомный ебилд в /usr/local/portage и забросил, не сгенерировав Manifest после последней правки.