* Re: [resend][PATCH v9 2/3] /proc/PID/status: show all sets of pid according to ns [not found] <55349719.6775592.1423011445985.JavaMail.zimbra@redhat.com> @ 2015-02-04 1:12 ` Nathan Scott 0 siblings, 0 replies; 3+ messages in thread From: Nathan Scott @ 2015-02-04 1:12 UTC (permalink / raw) To: Chen Hanxiao, Eric W. Biederman; +Cc: Serge Hallyn, containers, linux-kernel Hi Chen, Eric, Eric W. Biederman <ebiederm@xmission.com> writes: > Chen Hanxiao <chenhanxiao@cn.fujitsu.com> writes: > > If some issues occurred inside a container guest, host user > > could not know which process is in trouble just by guest pid: > > [...] > > Acked-by: Serge Hallyn <serge.hallyn@canonical.com> > > Tested-by: Serge Hallyn <serge.hallyn@canonical.com> > > > > Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com> > > Acked-by: "Eric W. Biederman" <ebiederm@xmission.com> > > At a quick review and read through this looks good. Once I finish > clearing the security bug fixes from my tree I will see about picking > this up. I recently came across a need for this patch so I just wanted to say thanks and since I've used it a fair bit feel free to add: Tested-by: Nathan Scott <nathans@redhat.com> One small tweak you could make is to drop the extra whitespace from those new seq_printf calls - "\t%d " has a trailing space that isn't needed. Also there's proc status docs below Documentation/ that should be updated for these changes. They are slightly out-of-date already and there's a few typos in the vicinity - something like this may do the trick though ... ? (will need to be updated at merge time with the correct kernel version) docs: add missing and new /proc/PID/status file entries, fix typos Signed-off-by: Nathan Scott <nathans@redhat.com> diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index aae9dd1..457cebd 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt @@ -197,12 +197,12 @@ contains details information about the process itself. Its fields are explained in Table 1-4. (for SMP CONFIG users) -For making accounting scalable, RSS related information are handled in -asynchronous manner and the vaule may not be very precise. To see a precise +For making accounting scalable, RSS related information are handled in an +asynchronous manner and the value may not be very precise. To see a precise snapshot of a moment, you can see /proc/<pid>/smaps file and scan page table. It's slow but very precise. -Table 1-2: Contents of the status files (as of 2.6.30-rc7) +Table 1-2: Contents of the status files (as of 3.20.0) .............................................................................. Field Content Name filename of the executable @@ -210,6 +210,7 @@ Table 1-2: Contents of the status files (as of 2.6.30-rc7) in an uninterruptible wait, Z is zombie, T is traced or stopped) Tgid thread group ID + Ngid NUMA group ID (0 if none) Pid process id PPid process id of the parent process TracerPid PID of process tracing this process (0 if not) @@ -217,6 +218,10 @@ Table 1-2: Contents of the status files (as of 2.6.30-rc7) Gid Real, effective, saved set, and file system GIDs FDSize number of file descriptor slots currently allocated Groups supplementary group list + NStgid descendant namespace thread group ID hierarchy + NSpid descendant namespace process ID hierarchy + NSpgid descendant namespace process group ID hierarchy + NSsid descendant namespace session ID hierarchy VmPeak peak virtual memory size VmSize total program size VmLck locked memory size ^ permalink raw reply [flat|nested] 3+ messages in thread
* [resend][PATCH v9 0/3] ns, procfs: pid conversion between ns and showing pidns hierarchy
@ 2014-12-23 10:20 Chen Hanxiao
2014-12-23 10:20 ` [resend][PATCH v9 2/3] /proc/PID/status: show all sets of pid according to ns Chen Hanxiao
0 siblings, 1 reply; 3+ messages in thread
From: Chen Hanxiao @ 2014-12-23 10:20 UTC (permalink / raw)
To: Eric W. Biederman, Serge Hallyn, Andrew Morton, Pavel Emelyanov
Cc: containers, linux-kernel, David Howells, Vasiliy Kulikov,
Mateusz Guzik, Oleg Nesterov, Richard Weinberger
This series will expose pid inside containers
via procfs.
Also show the hierarchy of pid namespcae.
Then we could know how pid looks inside a container
and their ns relationships.
1. helpful for nested container checkpoint/restore
We could know whether two pids had relationship
between each other.
init_pid_ns 1
│
┌────────────┐
ns1 ns2
│ │
200 300
│
ns2
│
400
#cat /proc/pidns_hierarchy
200 1 1
300 1 1
400 300 2
2. useful for pid translation from container
Ex:
init_pid_ns ns1 ns2
t1 2
t2 `- 3 1
t3 `- 4 3
t4 `- 5 `- 5 1
t5 `- 6 `- 8 3
It could solve problems like: we see a pid 3 goes wrong
in container's log, what is its pid on hosts:
a) inside container:
# readlink /proc/3/ns/pid
pid:[4026532388]
b) on host:
We show it in the form of :
<init_PID> <parent_of_init_PID> <relative PID level>
# cat /proc/pidns_hierarchy
14918 1 1
16263 14918 2
16581 1 1
Then we could easily find /proc/16263/ns/pid->4026532388.
On host, we knew that reported pid 3 is in level 2,
and its parental pid ns is from pid 14918.
c) on host, check child of 16263, grep it from status:
NSpid: 16268 8 3
We knew that pid 16268 is pid 3 reported by container.
v9: fix codes be inluded if CONFIG_PID_NS=n
add docs to describe the usage of pidns_hierarchy procfs
v8: fix some improper comments
use max() from kernel.h
v7: change pidns_hierarchy style to be consistent
with current interface like:
<init_PID> <parent_of_init_PID> <relative PID level>
remove EXPERT dependent in Kconfig.
v6: fix some get_pid leaks and do some cleanups.
v5: collect pid by find_ge_pid;
use local list inside nslist_proc_show;
use get_pid, remove mutex lock.
v4: simplify pid collection and some performance optimizamtion;
fix another race issue.
v3: fix a race issue and memory leak issue in pidns_hierarchy;
add another two fielsd: NSpgid and NSsid.
v2: use a procfs text file, replacing dirs under /proc for
showing pidns hierarchy;
add two new fields: NStgid and NSpid
keep fields of Tgid and Pid unchanged for back compatibility.
Chen Hanxiao (3):
procfs: show hierarchy of pid namespace
/proc/PID/status: show all sets of pid according to ns
Documentation: add docs for /proc/pidns_hierarchy
Documentation/namespaces/pidns-hierarchy.txt | 51 +++++
fs/proc/Kconfig | 6 +
fs/proc/Makefile | 1 +
fs/proc/array.c | 16 ++
fs/proc/internal.h | 9 +
fs/proc/pidns_hierarchy.c | 280 +++++++++++++++++++++++++++
fs/proc/root.c | 1 +
7 files changed, 364 insertions(+)
create mode 100644 Documentation/namespaces/pidns-hierarchy.txt
create mode 100644 fs/proc/pidns_hierarchy.c
--
1.9.3
^ permalink raw reply [flat|nested] 3+ messages in thread* [resend][PATCH v9 2/3] /proc/PID/status: show all sets of pid according to ns 2014-12-23 10:20 [resend][PATCH v9 0/3] ns, procfs: pid conversion between ns and showing pidns hierarchy Chen Hanxiao @ 2014-12-23 10:20 ` Chen Hanxiao 2014-12-30 5:39 ` Eric W. Biederman 0 siblings, 1 reply; 3+ messages in thread From: Chen Hanxiao @ 2014-12-23 10:20 UTC (permalink / raw) To: Eric W. Biederman, Serge Hallyn, Andrew Morton, Pavel Emelyanov Cc: containers, linux-kernel, David Howells, Vasiliy Kulikov, Mateusz Guzik, Oleg Nesterov, Richard Weinberger If some issues occurred inside a container guest, host user could not know which process is in trouble just by guest pid: the users of container guest only knew the pid inside containers. This will bring obstacle for trouble shooting. This patch adds four fields: NStgid, NSpid, NSpgid and NSsid: a) In init_pid_ns, nothing changed; b) In one pidns, will tell the pid inside containers: NStgid: 21776 5 1 NSpid: 21776 5 1 NSpgid: 21776 5 1 NSsid: 21729 1 0 ** Process id is 21776 in level 0, 5 in level 1, 1 in level 2. c) If pidns is nested, it depends on which pidns are you in. NStgid: 5 1 NSpid: 5 1 NSpgid: 5 1 NSsid: 1 0 ** Views from level 1 Acked-by: Serge Hallyn <serge.hallyn@canonical.com> Tested-by: Serge Hallyn <serge.hallyn@canonical.com> Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com> --- v9: rebased on 3.19-rc1 No change from v4-v8 v3: add another two fielsd: NSpgid and NSsid. v2: add two new fields: NStgid and NSpid. keep fields of Tgid and Pid unchanged for back compatibility. fs/proc/array.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/fs/proc/array.c b/fs/proc/array.c index bd117d0..35205d4 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -208,6 +208,22 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns, from_kgid_munged(user_ns, GROUP_AT(group_info, g))); put_cred(cred); + seq_puts(m, "\nNStgid:"); + for (g = ns->level; g <= pid->level; g++) + seq_printf(m, "\t%d ", + task_tgid_nr_ns(p, pid->numbers[g].ns)); + seq_puts(m, "\nNSpid:"); + for (g = ns->level; g <= pid->level; g++) + seq_printf(m, "\t%d ", + task_pid_nr_ns(p, pid->numbers[g].ns)); + seq_puts(m, "\nNSpgid:"); + for (g = ns->level; g <= pid->level; g++) + seq_printf(m, "\t%d ", + task_pgrp_nr_ns(p, pid->numbers[g].ns)); + seq_puts(m, "\nNSsid:"); + for (g = ns->level; g <= pid->level; g++) + seq_printf(m, "\t%d ", + task_session_nr_ns(p, pid->numbers[g].ns)); seq_putc(m, '\n'); } -- 1.9.3 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [resend][PATCH v9 2/3] /proc/PID/status: show all sets of pid according to ns 2014-12-23 10:20 ` [resend][PATCH v9 2/3] /proc/PID/status: show all sets of pid according to ns Chen Hanxiao @ 2014-12-30 5:39 ` Eric W. Biederman 0 siblings, 0 replies; 3+ messages in thread From: Eric W. Biederman @ 2014-12-30 5:39 UTC (permalink / raw) To: Chen Hanxiao Cc: Serge Hallyn, Andrew Morton, Pavel Emelyanov, containers, linux-kernel, David Howells, Vasiliy Kulikov, Mateusz Guzik, Oleg Nesterov, Richard Weinberger Chen Hanxiao <chenhanxiao@cn.fujitsu.com> writes: > If some issues occurred inside a container guest, host user > could not know which process is in trouble just by guest pid: > the users of container guest only knew the pid inside containers. > This will bring obstacle for trouble shooting. > > This patch adds four fields: NStgid, NSpid, NSpgid and NSsid: > a) In init_pid_ns, nothing changed; > > b) In one pidns, will tell the pid inside containers: > NStgid: 21776 5 1 > NSpid: 21776 5 1 > NSpgid: 21776 5 1 > NSsid: 21729 1 0 > ** Process id is 21776 in level 0, 5 in level 1, 1 in level 2. > > c) If pidns is nested, it depends on which pidns are you in. > NStgid: 5 1 > NSpid: 5 1 > NSpgid: 5 1 > NSsid: 1 0 > ** Views from level 1 > > Acked-by: Serge Hallyn <serge.hallyn@canonical.com> > Tested-by: Serge Hallyn <serge.hallyn@canonical.com> > > Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com> Acked-by: "Eric W. Biederman" <ebiederm@xmission.com> At a quick review and read through this looks good. Once I finish clearing the security bug fixes from my tree I will see about picking this up. Eric > --- > v9: rebased on 3.19-rc1 > No change from v4-v8 > v3: add another two fielsd: NSpgid and NSsid. > v2: add two new fields: NStgid and NSpid. > keep fields of Tgid and Pid unchanged for back compatibility. > > fs/proc/array.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/fs/proc/array.c b/fs/proc/array.c > index bd117d0..35205d4 100644 > --- a/fs/proc/array.c > +++ b/fs/proc/array.c > @@ -208,6 +208,22 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns, > from_kgid_munged(user_ns, GROUP_AT(group_info, g))); > put_cred(cred); > > + seq_puts(m, "\nNStgid:"); > + for (g = ns->level; g <= pid->level; g++) > + seq_printf(m, "\t%d ", > + task_tgid_nr_ns(p, pid->numbers[g].ns)); > + seq_puts(m, "\nNSpid:"); > + for (g = ns->level; g <= pid->level; g++) > + seq_printf(m, "\t%d ", > + task_pid_nr_ns(p, pid->numbers[g].ns)); > + seq_puts(m, "\nNSpgid:"); > + for (g = ns->level; g <= pid->level; g++) > + seq_printf(m, "\t%d ", > + task_pgrp_nr_ns(p, pid->numbers[g].ns)); > + seq_puts(m, "\nNSsid:"); > + for (g = ns->level; g <= pid->level; g++) > + seq_printf(m, "\t%d ", > + task_session_nr_ns(p, pid->numbers[g].ns)); > seq_putc(m, '\n'); > } ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-02-04 1:12 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <55349719.6775592.1423011445985.JavaMail.zimbra@redhat.com>
2015-02-04 1:12 ` [resend][PATCH v9 2/3] /proc/PID/status: show all sets of pid according to ns Nathan Scott
2014-12-23 10:20 [resend][PATCH v9 0/3] ns, procfs: pid conversion between ns and showing pidns hierarchy Chen Hanxiao
2014-12-23 10:20 ` [resend][PATCH v9 2/3] /proc/PID/status: show all sets of pid according to ns Chen Hanxiao
2014-12-30 5:39 ` Eric W. Biederman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®