-
Notifications
You must be signed in to change notification settings - Fork 17.7k
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
proposal: all: add plan9/arm64 port #57540
Comments
CC @golang/release |
The porting policy says:
Is there a significant demand for this? |
On the Plan 9 Mailing Lists a few times people were asking about Go on plan9/arm64 which is also how I found out that a Port wouldn't be that much effort. And of course in general on Plan 9 applications are in demand. At least for a possible builder there was already the offer to find a hosting option. |
I ran into this when I was playing around with 9front on a Pi 4 not too long ago. I was quite disappointed. I had a number of things I wanted to experiment with but was unable to because of the lack of support. |
On the one hand, given that On the other hand, the existing So I wonder: would adding |
That's true. It's difficult to say, also since the tests aren't fixed completely yet, especially speaking of the package Also I've also seen a problem with Lstat (#42115) as well as TestRenameOverwriteDest (#13844) while doing a first test run with a RAM disk. I could gather a bit more data with a more stable setup and fixes although this would take some time. |
(CC @golang/plan9) |
The other major source of friction (at least for me) with the existing So when things do go wrong, the overhead for anybody on the Go team to create (or even verify!) a fix is quite high. Would the builder for a |
This port wouldn't change any of those existing issues -- as far as I'm aware, there's nothing (beyond the hardware/virtual machines) that would be different about this. However, I think it's worth having a separate conversation about what it would take to improve those issues; I don't see any difficulties around running 9front on GCP vms, or standing up some new external VMs, and I'd be willing to help maintain the images for that; I think @majiru has expressed some interest in improving gomote. A while I asked for a builder key so I could try setting up a GCP 9front builder, but I was told to wait a few months, and never really heard back; I probably should have pinged. |
As to the subject of the proposal: I support it (in the sense of agreeing it should happen) but it needs a couple of people in the 9front community to support it (in the sense of making a commitment to provide and baby-sit a builder, and fix bugs which are induced from time to time by changes to the mainstream ports). |
By the way, at least the fs related tests run much more stable when locking the OS thread in https://github.com/golang/go/blob/master/src/syscall/pwd_plan9.go (psilva261@de519d7). The plan9/arm builder seems to work anyway though. But together with a small fix in https://github.com/golang/go/blob/master/src/cmd/go/testdata/script/work_env.txt (psilva261@822f6af) and To add another option, it would also be possible to have an additional ssh server that provides text console access using drawterm. |
So by now we're additional 9front developers: me, @oridb and @majiru I've also ran numerous tests, with Although I noticed with Speaking about 9front on GCP, with |
Thanks to @psilva261 @oridb and @majiru for your contributions. Limiting GOMAXPROCS may be masking some of the subtler concurrency bugs (and putting less stress on possible Plan 9 concurrency bugs). But you've made good progress. Have you tried booting with Has your debugging uncovered anything useful for other Plan 9 platforms? (The change to |
True, this really is just a workaround. I need to try Unfortunately I noticed the 7% is difficult to reproduce. That was on a VPS with shared CPUs, with dedicated CPU cores this went to 21%. (Also n=100 and EPYC 7713) I wonder if frequency scaling could also have an effect. |
I've opened an issue #58802 about this. |
The plan9 port is becoming increasingly difficult to maintain and holds back non-plan9 development. I have been wondering whether it should be moved out of the main repository or if there should be a push to try to bring it back closer to parity. Part of this seems to be due to Plan 9 itself. As Go has matured, it has started making more sophisticated use of operating system functionality - still relying only on the intersection of Linux, Windows, and the BSDs - and Plan 9 has not kept up, with the result that Go on Plan 9 is getting progressively worse. First, the plan9 port is particularly slow. Testing some work recently on Plan 9, I found that the plan9-386 gomote runs make.rc 10X slower than the linux-386 gomote runs make.bash (990s vs 107s). That makes trying to work on the plan9 port significantly more painful. Do we know why it's so much slower, and is there any plan to fix it? It looks to me like plan9-386 runs on an e2-standard-8 while linux-386 runs on an e2-standard-16, but that would only explain a factor of 2, not 10. Perhaps the problem is the much slower file system, although with 32 GB of memory on the e2-standard-8 perhaps the builder could run in ramfs. Perhaps it is something else. Making it faster to debug plan9 problems would probably be the most significant single improvement that could be made. Second, the Plan 9 kernel does not provide some now-standard functionality that other operating systems do, and workarounds from user space do not work terribly well. For example, for #58802, it seems like the right solution is an rfork RFPWD flag that causes parent and child to share a working directory when set. Then the Go thread creation would set RFPWD, just as it sets RFMEM to share memory. Instead we have a complicated locking and inter-thread communication mechanism. As another example, for #58894, the telemetry implementation depends on writable, shared mmap segments for an efficient counter implementation, and I don't believe Plan 9 has those. My plan is to not do any telemetry on Plan 9. There are also many plan9-specific issues open. A quick skim of the issue tracker turns up:
Many of these are stale, but many of them are current too. I obviously am partial to Plan 9 and reluctant to write this, but I've watched for years as various members of the Go team hit Plan 9-specific bugs they have to chase down / work around / disable tests for. That effort seems disproportionate to its benefit. It's by no means an every-day occurrence, but weird bugs on Plan 9 happen at a noticeably higher rate than on the other operating systems, especially when you consider the relatively low number of Plan 9 users. Given that the current plan9 ports are not keeping up with Go generally, I am not completely enthusiastic about adding another port. As I mentioned at the start of the comment, I have been wondering if instead we should encourage Go for Plan 9 to be maintained as an out-of-tree port. Thoughts? |
For what it's worth -- I've posted several times on the golang-dev list to request a builder key for a 9front machine, but haven't heard back. (https://groups.google.com/g/golang-dev/c/y-6KXft6Yeg/m/UMRsKz_jBwAJ) I'd like to be able to get testing done and lower the burden on the go team. Doing things like fixing 'gomote' would be useful for this, and I think we'd need access to a builder in order to do this. |
FWIW, we've been reducing the reliance on that assumption over time. For example, the package and module indexes added in |
Many of the issues that are still open are for tests that failed only on Plan 9, for which If there are issues that haven't reproduced in a long time and don't have any skipped tests, I think it would be fine to close those out. The method I recommend for that is:
That will at least help to narrow down the open issues to the ones that still reproduce, and there are still several of those. Since |
#50583 was occurring on ramfs, so not relevant for fossil. #21977 was a failing test |
Yes, it is GCE for most of the
FWIW, I suspect that |
Yes, some are flaws of the OS or the platform (h/w or virtual). I too would like to see comparisons between 9front and Plan 9, but they must be on the same hardware or virtual platform to be meaningful. When running tests on Plan 9 with real intel hardware (4-core i7) I don't see any of the flakiness observed with the plan9-386 builder on a VM. |
I also don't see the sys:trap errors with Plan 9 running on real hardware. It would be interesting to observe 9front on the same virtual environment that the plan9-386 uses. |
@millerresearch I agree completely that the comparisons should be made on the same resources. However with lack of ability to run them right now, I figured a quick gut check of build time would suffice to show that things are better then what @rsc eluded to. Again, it seems we've been stuck waiting for keys. If that current approach for allowing us to stand up a runner is not possible, could we look at other ways in which we can get a 9front runner going? |
I was thinking especially of staleness tests. Executing
does 11566 walks, 3498 stats, 5693 opens, 18457 reads, and so on: 49546 filesystem RPC ops altogether. Removing the |
The Plan 9 port has been mainly a voluntary effort. For the few people working on it over the years, it was sometimes hard to keep up with the evolution of Go. I agree that there is still a number of issues to be fixed, but nothing that can't be overcome. Unfortunately, I don't have as much time as I would like to work on Go. However, I see new people like @oridb, @majiru or @psilva261 which are willing to contribute. I'd like to see a 9front builder running, since the Plan 9 port aims to support both Plan 9 and 9front. It would be much easier to reproduce the issues for the people working on them. Recently, @millerresearch did a lot of work to fix the some of the issues and the Plan 9 port is in a much better shape now. I agree it's too early to add a new arm64 port. The priority should be to stabilize the current 386, amd64 and arm ports. |
The 386 and amd64 builders are currently running in QEMU/KVM virtual machines (with VirtIO disk and VirtIO net). They are limited to a single CPU because we experienced issues with multiprocessing enabled. |
@0intro Actually I've been running the tests with 9front/amd64 mentioned before on Linode which uses KVM behind the scenes for both shared and dedicated CPU cores with VirtIO SCSI disk and VirtIO net from what I can see through FWIW when trying |
Although I realize probably it would be more interesting to check for sys:trap errors on 9front/386 anyway |
Also, while this thread is getting very off topic -- is there a way that we can run the 9front builder in a "silent mode" where the 9front folks get notifications on flakes, but nobody on the go project is expected to take a look? I wouldn't be surprised to find out that there are quirks or bugs we should shake out before we expect anyone to pay attention, and I want to keep the maintenance burden as low as possible. |
This proposal has been added to the active column of the proposals project |
It sounds like the sentiment is we should focus on the existing plan9 ports before adding a new one. Do I have that right? |
I think so, also considering that there are quite some options to setup a 9front/amd64 builder which should make it feasible to make tests more stable quicklier. (It would be great though if eventually arm64 could be added once the existing ones are more stable.) |
I would also be willing to help with the plan9 builders and the arm64 port (MNT Reform) |
Based on the discussion above, this proposal seems like a likely decline. |
No change in consensus, so declined. |
Hi!
It would be great to support plan9/arm64. With plan9front it could be used on the MNT Reform and on the Raspberry Pi. The implementation would be similar to plan9/arm.
Also there's a first draft which can already be used. Most tests pass but more work is needed.
Greetings, Philip
The text was updated successfully, but these errors were encountered: