I mentioned this to Marcus via irc yesterday and I think it is useful context (leaving out parts that John already mentioned):
"07:48 <marcustomlinson> so question: when we have that slow boot, what screen is everyone left on to wait 07:48 <marcustomlinson> blank? spinning ubuntu icom 07:49 <jdstrand> blank 07:49 <jdstrand> it is after the image is flashed and is comin up. there is no feedback ... 07:54 <marcustomlinson> I think we can hold back on Michi's MP as worst case scenario ... 07:55 <jdstrand> basically, the way it is all framed is that these sorts of updates should typically only happen when jumping base releases, since a policy recompile has to happen anyway 07:55 <jdstrand> so, vivid to xenial 07:55 <jdstrand> I can push this change into xenial no problem 07:55 <jdstrand> then whenever that ota comes out, it is there 07:55 <marcustomlinson> ah ok 07:55 <jdstrand> but we try to reduce the pain of interim updates 07:56 <jdstrand> we don't want every ota to have a slow boot 07:56 <marcustomlinson> do you see these updates as that rarely required? 07:56 <jdstrand> but it is possible to batch them or make a decision that this is important enough to make everyone wait 07:56 <jdstrand> yes 07:56 <jdstrand> we've maybe only had to recompile all policy once since vivid base ... 07:57 <jdstrand> we do make other profile changes, but that might be in say, the calendar policy 07:57 <jdstrand> the calendar policy is only used by a few apps-- so no big deal ... 07:57 <jdstrand> but something that affects all scopes is a different thing 07:58 <marcustomlinson> ok, thanks for the info! 07:58 <jdstrand> np 07:58 <jdstrand> if you are interested in the nitty gritty details, do see the apparmor bug 07:58 <marcustomlinson> will do 07:59 <jdstrand> it should be noted that since that bug has been filed, we have made many policy compile improvements 07:59 <jdstrand> but the problem can never go away 07:59 <jdstrand> it was at 2.5 seconds 07:59 <jdstrand> per profile 08:00 <jdstrand> I think we are under 1.5 now 08:00 <marcustomlinson> nice 08:00 <jdstrand> but even if we got it to 1, if you have 200 apps installed, that is almost 3.5 minutes of waiting 08:00 <marcustomlinson> like I said, I think we actually "make this go away" by showing people a progress bar or something ... 08:00 <jdstrand> I agree. the pieces are there on click. something different would have to be done for snappy " In a nutshell, John has done some amazing stuff already with policy compile times, and more improvements will come and in fact, we are already considerably faster than IOS (aiui) and Android's app update process after reboot even with full policy recompiles, but the problem is we don't give people any feedback what is happening (I discuss ways for unity/the platform to deal with this above). Do keep in mind that because of the sheer volume of apps that can be installed on a phone and because the compile time won't ever be '0', we will always want to be judicious about policy updates that affect all apps-- that's where visual feedback can help. -- You received this bug notification because you are a member of Ubuntu Touch seeded packages, which is subscribed to apparmor in Ubuntu. https://bugs.launchpad.net/bugs/1350598 Title: AppArmor policy compile improvements Status in AppArmor: Triaged Status in Canonical System Image: Confirmed Status in apparmor package in Ubuntu: Triaged Bug description: apparmor_parser can take a long time to compile policy especially when there is a lot of policy, so we want to utilize compiled cache profile as much as possible. Cache files will have to be regenerated in the following cases: * the kernel .features file is updated (eg, new features are added to apparmor in the new kernel) * apparmor itself is updated * on devices with click packages, apparmor-easyprof-ubuntu and/or click-apparmor is updated As of 2014-10-02, what can be expected is: - Systems with system-image updates (eg, Ubuntu Touch): - First boot will use the precompiled cache files in the rootfs or custom tarball and be fast - Reboots will use the cache files on the device and be fast - First boots after upgrades will use the cache files on the device if the above conditions are not met and be fast - Production devices will not meet any of those conditions except under exceptional and rare circumstances (eg, major OS upgrades like 14.10 to 15.04) and be fast - First boots after upgrades that meet one of the conditions will need to regenerate the cache. This can happen on development releases where the kernel features file, apparmor, apparmor-easyprof-ubuntu or click-apparmor are still under development and getting updates - Systems with apt updates (eg, current Ubuntu Desktop and Server): - First boot will compile cache files - Reboots will use the cache files on the machine and be fast - First boots after upgrades will use the cache files on the machine if the above conditions are not met and be fast - Stable releases of Ubuntu will not meet any of those conditions except under exceptional and rare circumstances (eg, major OS upgrades like 14.10 to 15.04) and be fast - First boots after upgrades that meet one of the above conditions will need to regenerate the cache. This can happen on development releases where the kernel features file, apparmor, apparmor-easyprof-ubuntu or click-apparmor are still under development and getting updates In addition to the above, updates to only apparmor-easyprof-ubuntu will regenerate the cache files for only the policy that is affected (eg, if there is a change to the location policy group in policy version 1.2, only apps using this policy version and this policy group will need to be recompiled). Planned improvements (in order of most likely to be done first): 1. Finetuning the checks to invalidate the cache (eg, .md5sums could only be for /etc/apparmor.d/abstractions, ...): WONTFIX (will want an md5sum on apparmor_parser since it could change the cache and the md5sum will always change. Furthermore, apparmor-easyprof-ubuntu is all policy so there is no gain there. click-apparmor could possibly benefit, but it doesn't change often and when it does, it is typically for policy) 2. Investigate ways to utilize the custom tarball and rootfs precompiled cache files on upgrades when apparmor, apparmor-easyprof-ubuntu and click-apparmor are updated: DONE 3. Improve cache handling for app store apps (eg, having the app store server precompile them so that the device can download them when it needs to rather than having to regenerate them itself): WONTFIX (doesn't scale) 4. For systems with apt upgrades, compile the policy either during install or on kernel upgrade rather than on boot. For systems with read-only fs-style upgrades, compile the policy prior to reboot rather than on boot. 5. Support cache files per kernel .features file (or kernel version). This will allow people to boot into a previous kernel without having to recompile policy 6. Improve parser compile time 7. Investigate how to utilize profile composition and profile stacking to decrease compile and load times (eg, one idea is that the policy template is compiled once and each policy group once such that the parser need only stitch the already compiled bits together) 8. For Ubuntu Touch/Personal system-image based systems, investigate ways to utilize the update tarball and compile policy before rebooting to improve the user experience Work is planned for the medium term for '1-3' with '4' and '5' coming as needed. '6' will of course help, but it is already very optimized and compile average ~2 seconds on armhf per profile (note: already faster than Android's 'optimizing apps' per app on a nexus 7) -- if we cut that in half a typical user with 300 apps would still have to wait 300 seconds so other techniques like '2' should be employed. '6' and '7' will be handled in the long term. '8' can be implemented now to improve the user experience: " > Sorry for not being clear. The idea is that when the phone says that > there is an update, the user has to tap 'Install and Reboot'. The idea > is that before reboot (and therefore still in the unity8 session), we > look inside what is downloaded, see if there are any policy changes. If > there are, we extract them and then compile policy with a progress > meter. The question I posed to you is how hard is it to look inside (or > provide a manifest of changed packages) and extract what is needed to > compile policy? Ok. The update is available as a set of tarballs, available in a fixed directory. It should be straightforward to check whether any of those tarballs contains files matching a particular path. If you want to know whether particular packages have changed, that would be a matter of extracting the dpkg database and comparing. (We don't otherwise track the packagewise delta between the images.) A partial extraction of the tarball based on particular filenames is a simple matter of tar arguments." Original description: Just updated my Nexus 7 2013 from #160 to #161. It's been sat at the Google logo for 15 minutes now. It looks and feels like it's hung. As a user I'd be rebooting it thinking it had crashed by now. I shell in and find apparmor_parser using a lot of cpu for a long time. top - 00:14:01 up 15 min, 2 users, load average: 5.12, 4.85, 3.21 Tasks: 202 total, 2 running, 200 sleeping, 0 stopped, 0 zombie %Cpu(s): 50.5 us, 0.8 sy, 0.0 ni, 48.5 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 1848024 total, 787400 used, 1060624 free, 54216 buffers KiB Swap: 32764 total, 0 used, 32764 free. 579228 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1970 root 20 0 4976 3652 852 R 99.8 0.2 14:31.04 apparmor_parser 2596 phablet 20 0 5996 1264 824 R 1.3 0.1 0:08.79 top 914 root 0 -20 7572 552 396 S 0.7 0.0 0:05.02 mpdecision 21 root 20 0 0 0 0 S 0.3 0.0 0:00.92 kworker/0:1 229 root 20 0 0 0 0 S 0.3 0.0 0:00.10 jbd2/mmcblk0p30 982 root 20 0 38856 1164 868 S 0.3 0.1 0:01.77 adbd 2570 phablet 20 0 10540 1456 692 S 0.3 0.1 0:02.30 sshd 1 root 20 0 3884 2648 1068 S 0.0 0.1 0:05.98 init 2 root -2 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 ... it eventually finished after 18 minutes. To manage notifications about this bug go to: https://bugs.launchpad.net/apparmor/+bug/1350598/+subscriptions -- Mailing list: https://launchpad.net/~touch-packages Post to : touch-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~touch-packages More help : https://help.launchpad.net/ListHelp