Testing used for the following patch: - P4, 2Ghz - 512MB memory - local repos - upgrade a F7 GA chroot (866 packages, desktop install) to updates + updates-testing, using yum - upgrades done on a fresh reboot (clean cache)
The attached patch shaves the run time for the full update from 22m37s to 15m19s. Even accounting for minor differences in disk location, that's a *significant* savings. Of course, it's a complete buzzsaw of a patch. To make this work, we'd need: 1) define one run of this as a post-transaction tool 2) make it packaging policy that the proper symlinks always be shipped in the package Opinions? Bill
--- rpm-4.4.2/lib/psm.c.foo 2007-04-25 18:26:27.000000000 -0400 +++ rpm-4.4.2/lib/psm.c 2007-04-25 18:29:01.000000000 -0400 @@ -646,21 +646,15 @@ psm->sq.reaper = 1; - /* XXX bash must have functional libtermcap.so.2 */ - if (!strcmp(n, "libtermcap")) - ldconfig_done = 0; - /* * If a successor node, and ldconfig was just run, don't bother. */ - if (ldconfig_path && progArgv != NULL && psm->unorderedSuccessor) { - if (ldconfig_done && !strcmp(progArgv[0], ldconfig_path)) { + if (ldconfig_path && progArgv != NULL && !strcmp(progArgv[0], ldconfig_path)) { rpmMessage(RPMMESS_DEBUG, _("%s: %s(%s-%s-%s.%s) skipping redundant \"%s\".\n"), psm->stepName, tag2sln(psm->scriptTag), n, v, r, a, progArgv[0]); return rc; - } } rpmMessage(RPMMESS_DEBUG, @@ -672,19 +666,16 @@ argv = alloca(5 * sizeof(*argv)); argv[0] = "/bin/sh"; argc = 1; - ldconfig_done = 0; } else { argv = alloca((progArgc + 4) * sizeof(*argv)); memcpy(argv, progArgv, progArgc * sizeof(*argv)); argc = progArgc; - ldconfig_done = (ldconfig_path && !strcmp(argv[0], ldconfig_path) - ? 1 : 0); } #if __ia64__ /* XXX This assumes that all interpreters are elf executables. */ if ((a != NULL && a[0] == 'i' && a[1] != '\0' && a[2] == '8' && a[3] == '6') - && strcmp(argv[0], "/sbin/ldconfig")) + && strcmp(argv[0], ldconfig_path)) { const char * fmt = rpmGetPath("%{?_autorelocate_path}", NULL); const char * errstr; @@ -749,9 +740,6 @@ xx = Fwrite(set_x, sizeof(set_x[0]), sizeof(set_x)-1, fd); } - if (ldconfig_path && strstr(script, ldconfig_path) != NULL) - ldconfig_done = 1; - xx = Fwrite(script, sizeof(script[0]), strlen(script), fd); xx = Fclose(fd);
_______________________________________________ Rpm-maint mailing list Rpm-maint@lists.rpm.org https://lists.rpm.org/mailman/listinfo/rpm-maint