-
Notifications
You must be signed in to change notification settings - Fork 167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CI build platforms #1
Comments
debian/testing seems fine (I think that's what most Debian desktop users run - I do, at least) but sid is frequently broken. It might cause a lot of false negatives.
Is anyone outside of Joyent running SmartOS? The number of (non-SmartOS) Solaris users is a rounding error, I know both of them personally.
There was a post on the v8-users mailing list this morning that VS 2012 support is being phased out. Node.js is a few V8 releases behind, of course. |
Please seriously consider supporting 32bit versions of the Node binaries. The build infrastructure can be 64bit versions of the OS, but only offering 64bit binaries means we're going to run V8 in 64bit mode. For most Node applications this will be a waste of memory since they don't need to access more than 4G address space and V8 today doesn't do anything beyond a little bit of header compression in the 64bit environment. Also for what it's worth - Node can probably be built once on a 64bit Linux machine, then packaged as a .dep, rpm, tgz for the various distros. I know from experience that building on RHEL 6.5 produces a binary that runs just fine on Ubuntu 10 and 12. Let's make it a goal to have as few unique binary builds as we can (while allowing for installer packaging wrappers to support the various OSes) |
From a never-looked-at-v8-internals POV, I would expect the extra registers from 64-bit mode would be quite useful for a VM. @andrewlow does the memory bloat outweigh the benefits of doubling the number of registers available? |
Intel benefits from having more registers in 64bit mode (and more instructions) but it's not enough to overcome the object size bloat. If you do the trick Java did with compressed references http://lowtek.ca/roo/2008/java-performance-in-64bit-land/ then you do get an overall win, but if you've done that you're really using 32bit objects. PowerPC gets wider registers, but no new instructions or registers. It's more of a challenge on that platform. I'm not sure where ARM and MIPS sit with 64bit, I suspect they don't get as big as win as Intel does. In the end, the memory is so slow relative to CPU speed that having to move more is bad for performance. |
@andrewlow thanks for the explanation :-) |
/cc @chrislea |
It's an interesting discussion to me. Before I continue, I will state for the record that I strongly suspect I have considerably less knowledge about the register state / pointer size / performance issues than @andrewlow does. What I've seen from experience is that convenience and familiarity tend to trump, essentially, everything else. In this case specifically, the end user being able to type This is sort of tossing $0.02 into the air I know. And I could be dead wrong if there are enterprise customers who really care about benchmarks. But without additional info, I'd continue to ship arch specific builds simply for the reason that it's easier to make everything "just work" in familiar ways to the end user when they are installing and updating. |
I would very much like to see MinGW (it's 3 variants) as a primary. Lots of hours have gone into making them actually work, and many people rely on them. Proof if that is that every time we break some MinGW build I get a pull request with a fix, which I need to manually try. Supporting these doesn't require new gear, the 3 toolchains can be installed on a Windows 7 or 8 machine. |
Obviously my previous comment was regarding libuv :-) |
@saghul from a previous thread you listed:
Which I'm guessing are the ones you are concerned about. Are the build instructions for these included with libuv somewhere or does gyp do a neat job of sorting things out? |
@rvagg yes, those are the ones. As for how to build them: I found that autoconf is the easiest way. GYP can also work, but it's not officially supported. The MinGW32 installer comes with a graphical package manager allows you to install some packages, so once you have autoconf, automake and libtool you can just build an run with For MinGW-w64, I'd suggest to use MSYS2. There is an installer to get things started. Then in the MSYS2 shell you can install the 2 MinGW-w64 toolchains using pacman (they ported the Arch Linux package manager) and also autoconf, automake and libtool. Building is done the same (running these commands on the appropriate shell): I don't have much free time, but I can try to help if needed. |
FYI I've been messing with Buildbot and am noticing that CentOS 5 is going to require some work to make the tests a little less brittle across both Node and libuv. Mostly things work but there are a couple of tests in both that persistently fail and a few that occasionally fail. I know this is a pain but I've run into two major US companies already that are deploying Node into RHEL5 still in production. Ultimately it's up to the TC to decide minimum supported operating systems but I'd like to encourage them to seriously consider supporting EL 5, within a reasonable timeframe (perhaps till the end of the year when 7 starts to gain acceptance, which means enterprise is more likely to be running on 6!). I don't want to share a URL in here but if anyone's interested in taking a look at the failures then email me @ [email protected] and I'll hook you up and can even give Node & libuv core members access to a box to play around with if needed. |
Next question: llvm vs gcc, is there anything worth testing there or are we assured that compiling with both leads to a similar enough result? I've seen many opting for llvm compiles because of lldb goodness and quicker compiles I think. |
I've talked to a few people including TJ about this. The answer is "use gcc when on Linux", even though you can build Node with The reason is that C++ doesn't have a stable ABI (which I always manage to So, use gcc, and more specifically use the gcc that your target distro ships with. Annoying, but no way around it. So there you go. On Sun, Aug 10, 2014 at 9:18 PM, Rod Vagg [email protected] wrote:
__ |
@rvagg clang/llvm has, in my experience, a greater proclivity for exploiting undefined behavior and that has exposed bugs in the past. On the other hand, I've hit a greater number of compiler bugs with clang. It's not all roses and unicorns. If it's trivial to set up a two compiler matrix, then by all means please do. If it's a lot of work, then I think it's okay if we stick with gcc for now. On a related subject, do people have opinions on what version (or versions) of gcc to support? The current baseline is 4.2 but that's mostly because of OS X and FreeBSD and they have moved to clang now. V8 is switching to C++11 soon so middle/long-term, a modern gcc will be mandatory. That sucks for people on RHEL5 systems but back-ports of g++-4.7 and 4.8 are available.
The quicker compile times are something of a perpetuated myth from llvm/clang's early days. It was faster back then because it emitted lousy code. It's mostly a wash these days. I don't see an appreciable difference on the projects I work on, at least.
@chrislea You may be thinking of the situation on Windows where msvc and mingw produce incompatible code (clang's msvc ABI support is improving, though) but clang++ and g++ on Linux (and, I think, most Unices) use a common ABI:
Where __GXX_ABI_VERSION - 1000 = 2 is the actual ABI version. Version 2 was introduced with the release of g++ 3.4. There are newer versions but they're mainly bug fixes and you have to opt in with -fabi-version=n. |
Well then, I stand corrected, as @bnoordhuis clearly knows much more about this than I do! The only reason I'd heard of to not use clang was the possibility of ABI compatibility issues. If those aren't a real problem, then so be it. I've made builds with clang before and can easily do so again for the next release into the NodeSource repo if people like, I just have to uncomment one line in the build stuff. Having done it before, I can tell you the compile times are certainly faster with clang. I don't know about absolute performance numbers, or lldb goodness. Anyway, just let me know if we want to do this going forward for the Ubuntu / Debian builds. |
Because I'm a dork and wanted to see the difference. Here are clean builds using
So, saved me 20 seconds :P, but the memory usage is noticeable (though not like I care since I have 16GB RAM). |
Should we also test some libc other than glibc on Linux? Sabotage Linux is based on musl, which makes it a good candidate as buildbot if we want to go for that. Thoughts @bnoordhuis? |
I don't know. I suspect that the number of Linux systems that don't run glibc/eglibc and are not Android is a really tiny fraction. But I'm not the one maintaining the build matrix, I just provide input. @rvagg et al. are more qualified to comment on the cost/benefit ratio. |
What about X32? That gives more registers while still using small pointers and longs. |
I'd like to know if anybody is actually using it. Ultimately this is up to the libuv and Node core teams to dictate and they may have interactions with people compiling x32 .. or not. |
Probably nobody is using it yet. V8 only got x32 support in June this year, with the release of 3.28. However, Node has now integrated v8 3.28 (and might move on to 3.29), so x32 should be highly on topic. |
I've started work on a x32 port, see libuv/libuv#1. Patches for node-forward to follow once the necessary changes land in libuv. x32 is still a rather niche arch. I'm perfectly fine with leaving it unsupported for now. |
I don't think this has been mentioned anywhere yet: It would be really good to have tests on windows run both on local discs and on a network share. It's really surprising how many things break when you have windows but with unix style path separators. This applies to azure web sites. |
Ugh, any suggestions on how to implement this on Rackspace or similar Windows cloud provider? For now, just getting the Windows builds green is enough of a job! |
I'm not sure. Running them on azure web sites would essentially give you that by default, and I would have thought Microsoft would be willing to donate the compute? I would guess you could share a local folder over the network and then just cd into it via its network path rather than its local path. That would probably work. |
@rvagg: On Rackspace you could do this by running two instances, probably in an isolated network (aka "Cloud Networks" in Rackspace terms, which is an isolated L2 domain) for security, one acting as a server, the other mounting it. |
What can I do to get an OpenBSD build env going? |
@rvagg Getting some BSD test coverage besides FreeBSD would be good for both libuv and io.js but I defer to you on how much effort it is to set up integration and whether that's worth it. I would restrict it to the latest release, currently 5.6, and maybe just amd64? I honestly don't know how many people run i386 openbsd these days. @qbit Can you commit to anything when it comes to support? Failures on openbsd wouldn't block a release but it would be nice if we could ping you to help investigate (and get a reply within a certain time frame; that's the key point, really.) |
I can commit. IMO the target for OpenBSD should be snapshots as that is the target every developer is using. That said.. release is better than nothing at all :) |
find me a cloud provider or corporate sponsor that can offer OpenBSD machines that we can control and we can do this for sure |
@rvagg I will poke around and see if any are willing to donate / sponsor - there are a handful that allow for it currently - ArpNetworks and Vultr for sure. |
@rvagg is there any info I can pass along to the perspective sponsors regarding logo placement / publicity and what not? |
Just jumping in a little late here with a +1. I'm happy to work on builds for BSD if I can get a build box. |
@qbit currently we're just putting hardware sponsor names on the build repo README and also the build bot server identifiers have the provider names in them and they get referenced and seen quite a lot. I think we're happy to talk with anyone if they have suggestions for how they'd like to be acknowledged although I don't imagine us bending over backwards for anyone. |
This issue is pretty outdated. We've travelled ways since. Great job, everyone! (closing) regarding x32: I've actually attempted getting this in but it's just too exotic at the moment. Lets revisit later. |
With both Node and libuv being very widely adopted across disparate platforms, it's time for a CI system to match that spread. We should be able to define a list of primary targets that are essential as part of the mix and secondary targets that add additional value but not a main focus of the core team.
Current Node.js core and libuv Jenkins build bot list: http://jenkins.nodejs.org/computer/
Let's try and limit this discussion to CI as much as possible and leave release build platforms for another discussion.
Likely using Jenkins with a very distributed collection of build bots. I've been in contact with DigitalOcean, IBM and @mmalecki so far on hardware provisioning, looking forward to Rackspace and any others that want to step up. NodeSource is happy to cop the maintenance burden and likely some of the cost and do the bidding of the core team(s).
Here's my straw-man, to start discussion off:
Primary
Secondary
Looking for input from anyone but particularly the core team who need to be the ones deciding which are the primary platforms they actually care about, and we're considering both Node and libuv here. I'm happy to do a bunch of the legwork for you but I'll need your guidance because build targets is not my decision to make.
@tjfontaine @bnoordhuis @piscisaureus @trevnorris @TooTallNate @saghul @indutny
Others who have shown an interest in this discussion (or I just feel like pulling in!):
@ingsings @pquerna @voodootikigod @mmalecki @andrewlow @guille @othiym23 @dshaw @wblankenship @wolfeidau
Please subscribe to https://github.com/node-forward/build for further notifications from other issues if you're interested so we don't have to go and pull everyone in each time.
The text was updated successfully, but these errors were encountered: