This series of patches changes the way accept nodes are generated and the expression tree is set-up around them. It is a start to the backend refactoring and cleanup, and provides a nice little performance boost in most cases because 1. It reduces the number of accept nodes geneted and considered during simplification/factoring, and node set building (shorter node sets to construct and compare) 2. It reduces the number of Alt nodes (used to combine the accept nodes) to consider during simplfication, and node set building (agin shorter node sets to construct and compare) 3. It reduces the number of nodes that must be consider in any given simplification pass, by separating out node sets that can't be simplified on the right hand simplification/factoring pass.
The performance change is dependent on the profile being parsed, and there is no guarentee that it will be faster for all profiles. With that being said, I haven't seen any performance regressions+ and some fairly nice performance improvements so its worth considering before the rest of the backend factoring is done. Eg. Using a few example profile tests from a local machine, comparing against the 2.9 parser in Ubuntu 14.10 against current 2.10 with these patches* profile with tree simplification -O no-expr-simplify ------- ----------------------- ------------------- evince 22% faster 10% faster firefox 40% faster 11% faster chromium 32% faster 11% faster cupsd 35% faster 3% faster dnsmasq 12% faster 17% faster dhclient 36% faster 5% faster klogd 0% 8% faster *Note: 2.10 is actually handicapped by a couple fixes to change_profile encoding that causes its dfa to have a few extra nodes. +There was some regression, in a few cases on individual runs but when averaged over a few runs, the timing variations resulted in small net wins, in those cases. -- AppArmor mailing list AppArmor@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor