V8 plan for Node.js LTS Carbon (A potential path to TurboFan + Ignition) #99
Description
EDIT: CTC voting tally for this issue
Problem
V8 5.9 will be the first version with TurboFan + Ignition (TF+I) turned on by default. As parts of the Node.js codebase have been tuned to CrankShaft, there will be a non trivial amount of churn to adapt to the new pipeline. This also creates a security risk as CrankShaft and FullCodeGen are no longer maintained by the V8 team or tested by the Chrome security team.
If TF + I lands in Node.js 9.x backporting any changes to Node.js 8.x is going to prove extremely difficult and time consuming.
Below are three proposals of how we can approach this problem. To anyone in @nodejs/collaborators, and the community at large, we would love to hear your opinions on this. Further we really want to get some real world benchmarks, so if you have a way of testing builds to get non micro benchmarks please chime in and I'll get you binaries to work with.
Three Proposals:
- Target 5.7 or 5.8 in 8.x release with standard APi / ABI:
- Do not change anything.
- Pros:
- Uses classic pipeline based on FullCodeGen and CrankShaft which has an execution profile that is well known
- Cons:
- V8 will no longer be maintaining FullCodeGen+Crankshaft pipeline
- Backports from V8 will be much harder
- Chrome security group no longer be testing Crankshaft pipeline
- With Turbo Fan + Ignition landing in 9.x there will be a lot of churn. This will make backporting much harder
- Backports will require different performance profiling due to different pipeline
- V8 will no longer be maintaining FullCodeGen+Crankshaft pipeline
- Target 5.8 in 8.x release with forward compatible ABI to 5.9, upgrade to TF+I as semver minor:
- Land 5.8 with 5.9 forward compatible API / ABI in 8.x beta
- We could potentially do so with TF+I turned on, this has been tested by V8 team
- 5.8 will go stable April 25
- Upgrade to 5.9 with TF+I when it goes stable in early June.
- Backport from upstream to 5.9 as changes land
- Pros:
- Uses Ignition+TurboFan which will be the supported pipeline from V8 for the foreseeable future
- Lower risk of unknown security exploits
- Easier to backport
- Cons:
- TF + I will be a newer pipeline and the performance profile is not yet clear
- There are potentially 10’s of thousands of lines of churn between 5.9 -> 6.0 which may make future backports more difficult
- Potential for large churn in core in an LTS release to fix performance issues and subtle changes to runtime
- Target 5.8 in 8.x release. Delay release 3 - 4 weeks to allow forward compatible ABI to 6.0. Upgrade to TF+I as semver minor
- Land 5.8 with 6.0 forward compatible API / ABI in 8.x beta
- We could potentially do so with TF+I turned on, this has been tested by V8 team
- 5.8 will go stable April 25
- 6.0 API / ABI should be relatively stable between May 17 - 25
- Upgrade to 5.9 with TF+I when it goes stable in early June
- Upgrade to 6.0 when it goes stable in early August
- Pros:
- Uses Ignition+TurboFan which will be the supported pipeline from V8 for the foreseeable future
- Lower risk of unknown security exploits
- Easier to backport
- Cons:
- TF + I will be a newer pipeline and the performance profile is not yet clear
- Release delayed by 3-4 weeks
- Potential for large churn in core in an LTS release to fix performance issues and subtle changes to runtime
What needs to be done?
- We need to get the opinions of our community. What would they prefer?
- We need to do more benchmarking. While microbenchmarks can be helpful it would be good to test using real life code.
Testing
Test build of 8.x including V8 5.9 (TF + I turned on)
Install with nvm
$ NVM_NODEJS_ORG_MIRROR=https://nodejs.org/download/test nvm install v8.0.0-test201704119b43f9c487