opencontainers / opencontainers/runc

oom when enabling memory cgroups without swap on IBM power 8

Open
#1,368 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go
Stars
13.5k
Forks
2.3k
Avg merge
2d 8h
Merged PRs (30d)
30

Description

The system has enough memory for testing even without swap.
# free -m

              total        used        free      shared  buff/cache   available
Mem:          31653         492       28329           4        2830       29414
Swap:             0           0           0

# runc -v runc version 1.0.0-rc2 commit: 6d6086f29040d5d98dd8c67f2073010f10514ee3 spec: 1.0.0-rc3

Use the rootfs from docker.io/caiqian/rhel7

# runc spec
Make changes as below to enable memory cgroup,

...
       "platform": {
                "os": "linux",
                "arch": "ppc64le"
...
       "process": {
                "terminal": false,
                "args": [
                        "sleep", "6000"
                ],
...
        "linux": {
                "resources": {
                        "devices": [
                                {
                                        "allow": false,
                                        "access": "rwm"
                                }
                        ],
                        "memory": {
                                "limit": 16742640,
                                "reservation": 19996672
                        }
                },

# runc run -d root
# runc exec root ls ls: error while loading shared libraries: libpcre.so.1: failed to map segment from shared object: Cannot allocate memory

# dmesg
...

[175567.920712]   cache: kmalloc-512(0:root), object size: 512, buffer size: 512, default order: 0, min order: 0
[175567.920717]   node 2: slabs: 6, objs: 768, free: 0
[175567.941567] SLUB: Unable to allocate memory on node -1 (gfp=0x80d0)
[175567.941572]   cache: vm_area_struct(0:root), object size: 216, buffer size: 216, default order: 0, min order: 0
[175567.941576]   node 2: slabs: 5, objs: 1515, free: 0

BTW, the page size is 64kb on those systems.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the configuration using runc spec, runc run -d root, and runc exec root ls with the supplied RHEL7 rootfs, memory limits, ppc64le platform, and no swap. Start by comparing the cgroup and loader failures with the dmesg allocation errors on a 64 KB page-size system; done means identifying the cause and defining a verified runc fix or limitation.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, linux
Domain
infrastructure, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.