Skip to contentSkip to conversation

nsgroup autoremoving

DISCUSSION Daniel Lezcano 3 participants 5 messages Jan 16, 2009 – Jan 19, 2009 4 messages not in the archive

lore
Share & tools
lore
#0 lore raw

Hi,

While trying to unshare a namespace with the clone syscall with an inifinite loop, I got an EEXIST.
That looks weird to have such syscall returning EEXIST ... :)

After investigating, it appears the ns_cgroup creates automatically a control group named with the pid number when we call the clone syscall with a namespace parameter and when the namespace exits, the control group is not automatically removed. So when the pid numbers are recycled we conflict with a previous ns_cgroup name and the clone fails.

IMHO, if the nsgroup is automatically created, it should automatically destroyed, otherwise what will happen to application using the namespaces (eg. mount namespace) wrote before nsgroup appeared ?

Thanks.
-- Daniel

A message that is not in the archive (sent off-list or not yet received): [email protected]

#2 lore raw
Quoted 12 lines · Daniel Lezcano

Hi,

While trying to unshare a namespace with the clone syscall with an inifinite loop, I got an EEXIST.
That looks weird to have such syscall returning EEXIST ... :)

After investigating, it appears the ns_cgroup creates automatically a control group named with the pid number when we call the clone syscall with a namespace parameter and when the namespace exits, the control group is not automatically removed. So when the pid numbers are recycled we conflict with a previous ns_cgroup name and the clone fails.

Quoted 3 lines

IMHO, if the nsgroup is automatically created, it should automatically destroyed, otherwise what will happen to application using the namespaces (eg. mount namespace) wrote before nsgroup appeared ?

but you can have it automatically destroyed. I.e. I did the following:

mount -t cgroup -o freezer,ns freezer /cgroup cat > /bin/release_cgroup.sh << EOF
#!/bin/sh
echo "Removing dead cgroup .$*." >> /var/log/cgroup rmdir /cgroup/$* >> /var/log/cgroup 2>&1
echo "return value was $?" >> /var/log/cgroup EOF
echo /bin/release_cgroup.sh > /cgroup/release_agent echo 1 > /cgroup/notify_on_release
chmod ugo+x /bin/release_cgroup.sh
ns_exec -m /bin/sh
ls /cgroup`
3581 notify_on_release release_agent tasks
exit
ls /cgroup
notify_on_release release_agent tasks

-serge

A message that is not in the archive (sent off-list or not yet received): 20090116165217.GA8477-r/[email protected]

#4 lore raw
Quoted 22 lines · Serge E. Hallyn
Quoted 12 lines · Daniel Lezcano

Hi,

While trying to unshare a namespace with the clone syscall with an inifinite loop, I got an EEXIST.
That looks weird to have such syscall returning EEXIST ... :)

After investigating, it appears the ns_cgroup creates automatically a control group named with the pid number when we call the clone syscall with a namespace parameter and when the namespace exits, the control group is not automatically removed. So when the pid numbers are recycled we conflict with a previous ns_cgroup name and the clone fails.

Quoted 4 lines

IMHO, if the nsgroup is automatically created, it should automatically destroyed, otherwise what will happen to application using the namespaces (eg. mount namespace) wrote before nsgroup appeared ?

but you can have it automatically destroyed. I.e. I did the following:

Quoted 17 lines

mount -t cgroup -o freezer,ns freezer /cgroup cat > /bin/release_cgroup.sh << EOF
#!/bin/sh
echo "Removing dead cgroup .$*." >> /var/log/cgroup rmdir /cgroup/$* >> /var/log/cgroup 2>&1
echo "return value was $?" >> /var/log/cgroup EOF
echo /bin/release_cgroup.sh > /cgroup/release_agent echo 1 > /cgroup/notify_on_release
chmod ugo+x /bin/release_cgroup.sh
ns_exec -m /bin/sh
ls /cgroup`
3581 notify_on_release release_agent tasks
exit
ls /cgroup
notify_on_release release_agent tasks

Assuming you mount with all the subsystems, this script will destroy the non-nsgroup too. Each time I create a control group manually, I have to unset the notify_on_release, right ?

A message that is not in the archive (sent off-list or not yet received): [email protected]

#6 lore raw
Quoted 42 lines · Daniel Lezcano
Quoted 24 lines · Serge E. Hallyn
Quoted 13 lines · Daniel Lezcano

Hi,

While trying to unshare a namespace with the clone syscall with an inifinite loop, I got an EEXIST.
That looks weird to have such syscall returning EEXIST ... :)

After investigating, it appears the ns_cgroup creates automatically a control group named with the pid number when we call the clone syscall with a namespace parameter and when the namespace exits, the control group is not automatically removed. So when the pid numbers are recycled we conflict with a previous ns_cgroup name and the clone fails.

Quoted 5 lines

IMHO, if the nsgroup is automatically created, it should automatically destroyed, otherwise what will happen to application using the namespaces (eg. mount namespace) wrote before nsgroup appeared ?

but you can have it automatically destroyed. I.e. I did the following:

Quoted 17 lines

mount -t cgroup -o freezer,ns freezer /cgroup cat > /bin/release_cgroup.sh << EOF
#!/bin/sh
echo "Removing dead cgroup .$*." >> /var/log/cgroup rmdir /cgroup/$* >> /var/log/cgroup 2>&1
echo "return value was $?" >> /var/log/cgroup EOF
echo /bin/release_cgroup.sh > /cgroup/release_agent echo 1 > /cgroup/notify_on_release
chmod ugo+x /bin/release_cgroup.sh
ns_exec -m /bin/sh
ls /cgroup`
3581 notify_on_release release_agent tasks
exit
ls /cgroup
notify_on_release release_agent tasks

Quoted 3 lines

Assuming you mount with all the subsystems, this script will destroy the non-nsgroup too. Each time I create a control group manually, I have to unset the notify_on_release, right ?

I assume notify_on_release is per-hierarchy. So you're just asking about manually created cgroups in a hierarchy which has ns mounted, right?

I suppose you could use a naming convention and do some name checking in the release_agent to not delete manually created ones.

Would that be too much of a hassle?

Maybe you're right. Maybe we should tag auto-created cgroups, and auto-remove them. It's more convenient for me that way... Paul, would you have any objections? Daniel do you have a patch written?

-serge

A message that is not in the archive (sent off-list or not yet received): 20090118233216.GA10126-r/[email protected]

#8 lore raw
Quoted 51 lines · On Sun, 18 Jan 2009 17:32:16 -0600 "Serge E. Hallyn"…
Quoted 42 lines · Daniel Lezcano
Quoted 24 lines · Serge E. Hallyn
Quoted 13 lines · Daniel Lezcano

Hi,

While trying to unshare a namespace with the clone syscall with an inifinite loop, I got an EEXIST.
That looks weird to have such syscall returning EEXIST ... :)

After investigating, it appears the ns_cgroup creates automatically a control group named with the pid number when we call the clone syscall with a namespace parameter and when the namespace exits, the control group is not automatically removed. So when the pid numbers are recycled we conflict with a previous ns_cgroup name and the clone fails.

Quoted 5 lines

IMHO, if the nsgroup is automatically created, it should automatically destroyed, otherwise what will happen to application using the namespaces (eg. mount namespace) wrote before nsgroup appeared ?

but you can have it automatically destroyed. I.e. I did the following:

Quoted 17 lines

mount -t cgroup -o freezer,ns freezer /cgroup cat > /bin/release_cgroup.sh << EOF
#!/bin/sh
echo "Removing dead cgroup .$*." >> /var/log/cgroup rmdir /cgroup/$* >> /var/log/cgroup 2>&1
echo "return value was $?" >> /var/log/cgroup EOF
echo /bin/release_cgroup.sh > /cgroup/release_agent echo 1 > /cgroup/notify_on_release
chmod ugo+x /bin/release_cgroup.sh
ns_exec -m /bin/sh
ls /cgroup`
3581 notify_on_release release_agent tasks
exit
ls /cgroup
notify_on_release release_agent tasks

Quoted 3 lines

Assuming you mount with all the subsystems, this script will destroy the non-nsgroup too. Each time I create a control group manually, I have to unset the notify_on_release, right ?

I assume notify_on_release is per-hierarchy. So you're just asking about manually created cgroups in a hierarchy which has ns mounted, right?

Quoted 8 lines

I suppose you could use a naming convention and do some name checking in the release_agent to not delete manually created ones.

Would that be too much of a hassle?

Maybe you're right. Maybe we should tag auto-created cgroups, and auto-remove them.

I think auto-remove is more useful.

Quoted 4 lines

It's more convenient for me that way...
Paul, would you have any objections? Daniel do you have a patch written?

Just a notice:
When the memory subsystem is mounted, notify_on_release will not work as you expected. Because refcnts from pages still exits.

But you will be able to do rmdir() in many case because of pre_destroy() handler. (so, the directroy is releasable.)
I'd like to fix this. But now, it doesn't work for memory subsys.

Thanks,
-Kame