First off you have no SecureXL templating happening (Accelerated conns), which means higher CPU overhead for a fresh rulebase lookup every time for new connections. Most likely cause is having any blade other than Firewall enabled in your top/parent layer of your policy (sk180633: Security Gateway accelerates 99% of traffic through the PSLXL) and/or specifying applications/content in that top/first layer, or use of services with Protocol Signature set. Please provide outputs of fwaccel stat and fwaccel templates -R.
Looks like you are utilizing the QoS blade as well which will increase overhead (but not nearly as badly as in R80.10 and earlier), keep in mind if all you want to do is shared rule-based bandwidth limits, this can be accomplished directly in the Action field of your APCL/URLF without needing the QoS blade. The QoS blade will be needed if you want to do per-connection limits, shared or per-connection guarantees, Weighted Fair Queueing, LLQ, ToS/DiffServ preferences etc.
Other than that you just have a lot of features enabled and a busy firewall. One other thing that can spike the CPU is elephant flows, try running fw ctl multik print_heavy_conn to see all elephant flows in the last 24 hours. The Spike Detective (sk166454: CPU Spike Detective) can also be helpful for tracking down excessive CPU usage.
Gateway Performance Optimization R81.20 Course
now available at maxpowerfirewalls.com