On Wed, Sep 12, 2007 at 09:04:09AM +0200, Harald Hoyer wrote: > Using a modprobe wrapper, I count 56 /sbin/modprobe calls taking ~4s > (non-profiling udev) on my laptop, from which 23 are not found. > 23 * /sbin/modprobe with a modalias, which is not found, sums up to ~1s > (25%) of the time. > So we can easily eliminate 25% of the modprobe time (on my laptop), by > collecting all /sys/***/modalias at depmod time, which cannot be resolved, > and store them in /lib/modules/$(uname -r)/modules.unresolved, which could > be searched first by modprobe. BTW, each read_depends below will scan the whole modules.dep (if unsuccessful) or first part thereof. In the modprobes that take most of the time, is modules.dep read just once or multiple times? /* Returns the resolved alias, options */ read_toplevel_config(config, modulearg, 0, remove, &modoptions, &commands, &aliases, &blacklist); /* No luck? Try symbol names, if starts with symbol:. */ if (!aliases && strncmp(modulearg, "symbol:", strlen("symbol:")) == 0) read_config(symfilename, modulearg, 0, remove, &modoptions, &commands, &aliases, &blacklist); if (!aliases) { /* We only use canned aliases as last resort. */ read_depends(dirname, modulearg, &list); if (list_empty(&list) && !find_command(modulearg, commands)) { read_config(aliasfilename, modulearg, 0, remove, &modoptions, &commands, &aliases, &blacklist); aliases = apply_blacklist(aliases, blacklist); } } if (aliases) { errfn_t err = error; /* More than one alias? Don't bail out on failure. */ if (aliases->next) err = warn; while (aliases) { /* Add the options for this alias. */ char *opts = NOFAIL(strdup(optstring)); opts = add_extra_options(modulearg, opts, modoptions); read_depends(dirname, aliases->module, &list); handle_module(aliases->module, &list, newname, remove, opts, first_time, err, dry_run, verbose, modoptions, commands, ignore_commands, ignore_proc, strip_vermagic, strip_modversion, unknown_silent, optstring); aliases = aliases->next; INIT_LIST_HEAD(&list); } } else { if (use_blacklist && find_blacklist(modulearg, blacklist)) continue; handle_module(modulearg, &list, newname, remove, optstring, first_time, error, dry_run, verbose, modoptions, commands, ignore_commands, ignore_proc, strip_vermagic, strip_modversion, unknown_silent, optstring); } Jakub -- fedora-devel-list mailing list fedora-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/fedora-devel-list