From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:subject:message-id:mime-version:content-disposition :content-transfer-encoding:user-agent; bh=wnW5u11+dDSk7Acmhl2mOD5jPUAflGPrE03316C1Q8c=; b=i0ddDkqFLqhH03mwRMTKIx96ow1dmjB+9+XT42psEPY5knIMEBsVTrXc3PCrCENsLA cpyfu0SXHutgOnUA69d3OLsl0AXHhHlJEBhj921yWRuSYVJkD5KZhgY/Ae+Ci4k/KqXG DNyte8VvWTBOpS1A6L+QBF8yXak2Iragm9423V3///iqL20BOIFM4dHl/PcDAxxXuPKp lsnSlPRrhDA3kqJ3QjPoJwgzbe0FthuWy0yyioGIhD/5RyxLtsnp5kNs5pHB6J77LbDS waI8pyzVBISxxS68HJCJfHXxPBkxnhExMA/XFcLJz3eRszCXkxwLpUbRRaAebEbxlD7/ UIdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:subject:message-id:mime-version :content-disposition:content-transfer-encoding:user-agent; bh=wnW5u11+dDSk7Acmhl2mOD5jPUAflGPrE03316C1Q8c=; b=gJy173Il8crSr7/a9aW3ys6l9dshfk7k54odBayUVOQ0huGr+y6Mco6SFhezizDsJo umZTeG1TMIdbuUCzoRmlFrIAcTVha+Mqe5OS79eRss6vAx8XX6T4C+7zY6EaTPic3dGL Y6wBl5LlltH+qswMvUb1WnNwDJJEcPC+W1PuGIr8i+DJTcUhTq5eTobtVZlCOsRgIlKZ FP1BSA/NQgXSNPJKuBWpVam86OzoPa0TaQjcpa/VeHYrbRJWRASPqOMVF/R5HF0OnfPW 7I3BefU2lPGwaNCRyHbZEBWevn4N4bndXUrdc0JR876vMshnnej2mT22GeeNzDan2K+V GJAw== X-Gm-Message-State: AIkVDXIhksaDfv7U50hR9H0dC1/vUAARYNTuNYkskXi+N+Pk+ez9hSr22YgCLObge6HrkA== X-Received: by 10.25.200.65 with SMTP id y62mr12345584lff.132.1485319695280; Tue, 24 Jan 2017 20:48:15 -0800 (PST) Date: Wed, 25 Jan 2017 07:48:12 +0300 From: Alexey Tourbin To: devel@lists.altlinux.org Message-ID: <20170125044812.GA29940@celery> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.6 (2015-08-30) Subject: [devel] =?utf-8?b?0L/QtdGH0LDQu9GM0L3Ri9C1INC/0L7RgdC70LXQtNGB?= =?utf-8?b?0YLQstC40Y8g0L/QtdGA0LXRhdC+0LTQsCDQvdCwIHJwbS00LjEz?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Jan 2017 04:48:18 -0000 Archived-At: List-Archive: List-Post: Уважаемые мужчины! Вследствие перехода на rpm-4.13 в вашем национальном дистрибутиве наблюдается многократное замедление работы. Вот как сканировал пакеты старый rpm: $ killall -STOP ktorrent chromium $ rpmpeek /var/cache/apt/archives/rpm_4.0.4-alt101.M80P.1_x86%5f64_1484665077.rpm \ cp -pv ./usr/lib/rpm/rpmq /tmp './usr/lib/rpm/rpmq' -> '/tmp/rpmq' $ cd /klad/Sisyphus/files/x86_64/RPMS $ /tmp/rpmq -p *.rpm >/dev/null $ time /tmp/rpmq -p *.rpm >/dev/null 0.85s user 0.31s system 99% cpu 1.166 total Вот как сканирует пакеты новый rpm: $ rpmquery -p *.rpm >/dev/null $ time rpmquery -p *.rpm >/dev/null 3.51s user 0.25s system 99% cpu 3.757 total Сканирует в четыре раза дольше - вместо '0.85 user' стало '3.51 user'. Предварительный осмотр показывает, что rpm теперь вычисляет какие-то хитрые SHA1-суммы. Но это полбеды, а настоящий масштаб бедствия становится понятен, если посмотреть, что происходит с виртуальной памятью. Старый rpm сканировал пакеты так: $ sudo sysctl vm.drop_caches=3 $ free -m total used free shared buffers cached Mem: 7866 4582 3283 0 1 1601 -/+ buffers/cache: 2979 4886 Swap: 32763 3176 29586 $ time /tmp/rpmq -p *.rpm >/dev/null 2.06s user 1.85s system 2% cpu 3:04.51 total $ free -m total used free shared buffers cached Mem: 7866 5247 2619 0 25 2199 -/+ buffers/cache: 3021 4844 Swap: 32763 3176 29586 То есть при сканировании x86_64 пакетов отъедалось примерно 600 Мб буферного кеша. Новый rpm сканирует пакеты так: $ sudo sysctl vm.drop_caches=3 $ free -m total used free shared buffers cached Mem: 7866 4580 3286 0 1 1602 -/+ buffers/cache: 2976 4889 Swap: 32763 3176 29586 $ cd /klad/Sisyphus/files/x86_64/RPMS $ time rpmquery -p *.rpm >/dev/null 4.66s user 1.89s system 3% cpu 3:13.99 total $ free -m total used free shared buffers cached Mem: 7866 6534 1331 0 28 3482 -/+ buffers/cache: 3023 4843 Swap: 32763 3176 29586 Новый rpm при сканировании x86_64 пакетов отъел 1880 Мб, более чем в 3 раза больше старого. Мужчины, прогресс пришел в ваш дом! Рассмотрим пример прогресса на конкретном пакете. Я вот для себя собираю пакет ffmpeg, потому что в вашем национальном дистрибутиве его немає. $ linux-fadvise ~/RPM/RPMS/x86_64/ffmpeg-3.1.6-alt0.x86_64.rpm POSIX_FADV_DONTNEED ... $ /tmp/rpmq -p ~/RPM/RPMS/x86_64/ffmpeg-3.1.6-alt0.x86_64.rpm ffmpeg-3.1.6-alt0 $ linux-fincore ~/RPM/RPMS/x86_64/ffmpeg-3.1.6-alt0.x86_64.rpm |tail -1 total cached size: 8,192 С новым rpm: $ linux-fadvise ~/RPM/RPMS/x86_64/ffmpeg-3.1.6-alt0.x86_64.rpm POSIX_FADV_DONTNEED ... $ rpmquery -p ~/RPM/RPMS/x86_64/ffmpeg-3.1.6-alt0.x86_64.rpm ffmpeg-3.1.6-alt0.x86_64 $ linux-fincore ~/RPM/RPMS/x86_64/ffmpeg-3.1.6-alt0.x86_64.rpm |tail -1 total cached size: 49,152 У пакета ffmpeg маленький заголовок, потому что в нем находится только программа ffmpeg (плюс еще ffplay и ffprobe) и несколько man-страниц. Старому rpm нужно было 2 страницы виртуальной памяти, новому - 12. Всё это конечно же происходит из-за readahead. Я когда-то делал патч для отключения readahead во время загрузки заголовка: http://git.altlinux.org/people/at/packages/rpm.git?a=commitdiff;h=66b17f5f На новый rpm его не портировали. Правда, этот патч мне не очень нравится, потому на время загрузки заголовка readahead отключается полностью. Теоретически этом может привести к тому, что для загрузки заголовка может потребоваться несколько physical reads. Но на практике их не требуется (ср. total time у /tmp/rpmq и rpmquery) - вероятно, выручает встроенный кеш внутри самого жесткого диска. * * * В связи со всем этим безобразием более актуально встает вопрос о кешировании заголовков. Пожалуй, напишу об этом отдельным письмом.