syscall.Getpagesize returns wrong page size on aarch64

Bug #1661222 reported by Edward Vielmetti
10
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Docker.io
Fix Released
Unknown
golang-1.6 (Ubuntu)
Invalid
Undecided
Unassigned
Xenial
Fix Released
Undecided
Michael Hudson-Doyle
golang-defaults (Ubuntu)
Fix Released
Undecided
Unassigned
Xenial
Invalid
Undecided
Unassigned

Bug Description

syscall.Getpagesize returns wrong page size on aarch64.

The code at https://github.com/vielmetti/go-pagesize-test exercises the issue.

This is fixed upstream at 1.8 with https://github.com/golang/go/commit/1b9499b06989d2831e5b156161d6c07642926ee1

Downstream, this affects Docker and Kubernetes on aarch64, specifically at

https://github.com/docker/docker/issues/27384 for Docker (overlay2 filesystem).

Please consider a backport of the page size fix to 1.6 version of Go that is part of 16.04 LTS.

thanks

Ed

root@docker-build-test:/mnt/src/vielmetti/go-pagesize-test# lsb_release -rd
Description: Ubuntu 16.04.1 LTS
Release: 16.04

root@docker-build-test:/mnt/src/vielmetti/go-pagesize-test# apt-cache policy golang
golang:
  Installed: 2:1.6-1ubuntu4
  Candidate: 2:1.6-1ubuntu4
  Version table:
 *** 2:1.6-1ubuntu4 500
        500 http://ports.ubuntu.com/ubuntu-ports xenial/main arm64 Packages
        100 /var/lib/dpkg/status

What I expected to happen:

C.getpagesize()) and syscall.Getpagesize() return the same value

What happened instead:

On aarch64,

✗ go reports correct pagesize
   (in test file go-pagesize-test.bats, line 3)
     `[ "$status" -eq 0 ]' failed
     OS page size = 4096 ; go reports 65536

ProblemType: Bug
DistroRelease: Ubuntu 16.04
Package: golang 2:1.6-1ubuntu4
ProcVersionSignature: Ubuntu 4.4.0-38.57-generic 4.4.19
Uname: Linux 4.4.0-38-generic aarch64
ApportVersion: 2.20.1-0ubuntu2.5
Architecture: arm64
Date: Thu Feb 2 11:44:31 2017
PackageArchitecture: all
ProcEnviron:
 TERM=screen.xterm-256color
 PATH=(custom, no user)
 XDG_RUNTIME_DIR=<set>
 LANG=en_US.UTF-8
 SHELL=/bin/bash
SourcePackage: golang-defaults
UpgradeStatus: No upgrade log present (probably fresh install)

Revision history for this message
Edward Vielmetti (edward-vielmetti) wrote :
Revision history for this message
Edward Vielmetti (edward-vielmetti) wrote :
Revision history for this message
Edward Vielmetti (edward-vielmetti) wrote :
Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

I had a quick look at this and it doesn't backport cleanly to 1.6. Can I ask why you are interested in this? I have a PPA (and soon a snap) with newer versions of Go and using those is probably easier than backporting this change...

Revision history for this message
Edward Vielmetti (edward-vielmetti) wrote :

If Go 1.8 would be available via a PPA that would obviate the need for a fix to Go 1.6.

Revision history for this message
Edward Vielmetti (edward-vielmetti) wrote :

@mwhudson - when you are ready to test the PPA I am very interested in giving it a spin on a dedicated ARMv8 test server.

Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote : Re: [Bug 1661222] Re: syscall.Getpagesize returns wrong page size on aarch64

https://code.launchpad.net/~gophers/+archive/ubuntu/archive/+packages has
1.8~rc3 already, will have 1.8 when that's done. I could add the patch to
the 1.7 in that PPA too (but not today)

On 11 February 2017 at 05:38, Edward Vielmetti <email address hidden>
wrote:

> @mwhudson - when you are ready to test the PPA I am very interested in
> giving it a spin on a dedicated ARMv8 test server.
>
> --
> You received this bug notification because you are subscribed to golang
> in Ubuntu.
> https://bugs.launchpad.net/bugs/1661222
>
> Title:
> syscall.Getpagesize returns wrong page size on aarch64
>
> To manage notifications about this bug go to:
> https://bugs.launchpad.net/ubuntu/+source/golang/+bug/
> 1661222/+subscriptions
>

Revision history for this message
Edward Vielmetti (edward-vielmetti) wrote :

Thanks Michael. I see that 1.8 release is out, and will look forward to seeing that when it's ready on your archive.

Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

1.8 final is in my PPA now.

Revision history for this message
Adam Conrad (adconrad) wrote :

We only ship kernels with one page size on arm64. While backporting the *correct* (dynamic query) fix might be a bit too painful, we should at least consider changing the static value to be "usually correct" (ie: 4k).

Changed in docker.io:
status: Unknown → New
affects: golang (Ubuntu) → golang-1.6 (Ubuntu)
Changed in golang-1.6 (Ubuntu):
status: New → Invalid
Changed in golang-defaults (Ubuntu):
status: New → Fix Released
Revision history for this message
dann frazier (dannf) wrote :

With the changes staged at ppa:mwhudson/devirt (1.6.2-0ubuntu5~16.04.4~ppa1):

dannf@d05-3:~/go-pagesize-test$ make
bats go-pagesize-test.bats
 ✓ go reports correct pagesize

1 test, 0 failures

Changed in golang-defaults (Ubuntu Xenial):
status: New → Invalid
Changed in golang-1.6 (Ubuntu Xenial):
status: New → In Progress
assignee: nobody → Michael Hudson-Doyle (mwhudson)
Revision history for this message
Adam Conrad (adconrad) wrote : Please test proposed package

Hello Edward, or anyone else affected,

Accepted golang-1.6 into xenial-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/golang-1.6/1.6.2-0ubuntu5~16.04.4 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed.Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested and change the tag from verification-needed-xenial to verification-done-xenial. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-xenial. In either case, details of your testing will help us make a better decision.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance!

Changed in golang-1.6 (Ubuntu Xenial):
status: In Progress → Fix Committed
tags: added: verification-needed verification-needed-xenial
Revision history for this message
Edward Vielmetti (edward-vielmetti) wrote :

The test I ran was with

`golang-1.6/xenial-proposed,now 1.6.2-0ubuntu5~16.04.4 all [installed,automatic]`

on an arm64 system. The test code is at

https://github.com/vielmetti/go-pagesize-test

With this version, I get the following results on a Cavium ThunderX based Packet Type 2A system:

```
# make
bats go-pagesize-test.bats
 ✓ go reports correct pagesize

1 test, 0 failures
```

tags: added: verification-done-xenial
removed: verification-needed-xenial
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package golang-1.6 - 1.6.2-0ubuntu5~16.04.4

---------------
golang-1.6 (1.6.2-0ubuntu5~16.04.4) xenial; urgency=medium

  * Add d/patches/0004-arm64-better-guessed-page-size.patch to fix problems
    seen with docker on arm64 systems. (LP: #1661222)

 -- Michael Hudson-Doyle <email address hidden> Wed, 19 Jul 2017 10:56:27 +1200

Changed in golang-1.6 (Ubuntu Xenial):
status: Fix Committed → Fix Released
Revision history for this message
Brian Murray (brian-murray) wrote : Update Released

The verification of the Stable Release Update for golang-1.6 has completed successfully and the package has now been released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regressions.

Changed in docker.io:
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.