From 4c16604c5e88857bdfa8b8216d377e6d7c97d493 Mon Sep 17 00:00:00 2001 From: Chanhun Jeong Date: Thu, 21 Mar 2024 11:36:58 +0900 Subject: [PATCH 1/4] Support pyston based environment Signed-off-by: Chanhun Jeong --- ebpf/python/procinfo.go | 4 ++-- ebpf/python/procinfo_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/ebpf/python/procinfo.go b/ebpf/python/procinfo.go index 2f9f07c066..56033beea5 100644 --- a/ebpf/python/procinfo.go +++ b/ebpf/python/procinfo.go @@ -18,7 +18,7 @@ type ProcInfo struct { Glibc []*symtab.ProcMap } -var rePython = regexp.MustCompile("/.*/((?:lib)?python)(\\d+)\\.(\\d+)(?:[mu]?(?:\\.so)?)?(?:.1.0)?$") +var rePython = regexp.MustCompile("/.*/((?:lib)?python)(\\d+)\\.(\\d+)(?:[mu]?(-pyston\\d.\\d)?(?:\\.so)?)?(?:.1.0)?$") // GetProcInfo parses /proc/pid/map of a python process. func GetProcInfo(s *bufio.Scanner) (ProcInfo, error) { @@ -58,7 +58,7 @@ func GetProcInfo(s *bufio.Scanner) (ProcInfo, error) { strings.Contains(m.Pathname, "/lib/ld-musl-aarch64.so.1") { res.Musl = append(res.Musl, m) } - if strings.HasSuffix(m.Pathname, "/libc.so.6") { + if strings.HasSuffix(m.Pathname, "/libc.so.6") || strings.HasSuffix(m.Pathname, "/libc-2") { res.Glibc = append(res.Glibc, m) } } diff --git a/ebpf/python/procinfo_test.go b/ebpf/python/procinfo_test.go index c902244bcf..a458cd8524 100644 --- a/ebpf/python/procinfo_test.go +++ b/ebpf/python/procinfo_test.go @@ -131,6 +131,38 @@ ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsysca require.Equal(t, info.Version, Version{3, 7, 0}) require.NotNil(t, info.PythonMaps) require.Nil(t, info.LibPythonMaps) + + maps = `aaaae1f10000-aaaae2040000 r-xp 00000000 103:01 980158 /usr/bin/uwsgi +aaaae204f000-aaaae2052000 r--p 0012f000 103:01 980158 /usr/bin/uwsgi +aaaae2052000-aaaae2065000 rw-p 00132000 103:01 980158 /usr/bin/uwsgi +aaaae2065000-aaaae206c000 rw-p 00000000 00:00 0 +aaaaeb0dc000-aaaaef082000 rw-p 00000000 00:00 0 [heap] +aaaaef082000-aaaaf6ad7000 rw-p 00000000 00:00 0 [heap] +ffffa259d000-ffffa25a1000 rw-p 00000000 00:00 0 +ffffa25a1000-ffffa26fc000 r-xp 00000000 103:01 831681 /usr/lib/aarch64-linux-gnu/libc-2.31.so +ffffa26fc000-ffffa270b000 ---p 0015b000 103:01 831681 /usr/lib/aarch64-linux-gnu/libc-2.31.so +ffffa270b000-ffffa270f000 r--p 0015a000 103:01 831681 /usr/lib/aarch64-linux-gnu/libc-2.31.so +ffffa270f000-ffffa2711000 rw-p 0015e000 103:01 831681 /usr/lib/aarch64-linux-gnu/libc-2.31.so +ffffa2711000-ffffa2714000 rw-p 00000000 00:00 0 +ffffa2714000-ffffa2b35000 r-xp 00000000 103:01 836228 /usr/lib/libpython3.8-pyston2.3.so.1.0 +ffffa2b35000-ffffa2b45000 ---p 00421000 103:01 836228 /usr/lib/libpython3.8-pyston2.3.so.1.0 +ffffa2b45000-ffffa2b4c000 r--p 00421000 103:01 836228 /usr/lib/libpython3.8-pyston2.3.so.1.0 +ffffa2b4c000-ffffa2b83000 rw-p 00428000 103:01 836228 /usr/lib/libpython3.8-pyston2.3.so.1.0 +ffffa2b83000-ffffa2ba4000 rw-p 00000000 00:00 0 +ffffa32a1000-ffffa32a3000 r--p 00000000 00:00 0 [vvar] +ffffa32a3000-ffffa32a4000 r-xp 00000000 00:00 0 [vdso] +ffffa32a4000-ffffa32a5000 r--p 00021000 103:01 836208 /usr/lib/ld-linux-aarch64.so.1 +ffffa32a5000-ffffa32a7000 rw-p 00022000 103:01 836208 /usr/lib/ld-linux-aarch64.so.1 +ffffa4126000-ffffa45e6000 rwxp 00000000 00:00 0 +ffffa45e6000-ffffa52e6000 rwxp 00000000 00:00 0 +fffff8c25000-fffff8c53000 rw-p 00000000 00:00 0 [stack]` + + info, err = GetProcInfo(bufio.NewScanner(bytes.NewReader([]byte(maps)))) + require.NoError(t, err) + require.Nil(t, info.Musl) + require.Equal(t, info.Version, Version{3, 8, 0}) + require.Nil(t, info.PythonMaps) + require.NotNil(t, info.LibPythonMaps) } const testdataPath = "../testdata/" From cb6191e16454548f96e298baa85101472c1c2d7c Mon Sep 17 00:00:00 2001 From: Chanhun Jeong Date: Tue, 2 Apr 2024 16:48:02 +0900 Subject: [PATCH 2/4] Update test Signed-off-by: Chanhun Jeong --- ebpf/python/procinfo_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ebpf/python/procinfo_test.go b/ebpf/python/procinfo_test.go index a458cd8524..4ae1395399 100644 --- a/ebpf/python/procinfo_test.go +++ b/ebpf/python/procinfo_test.go @@ -293,6 +293,7 @@ func TestPython(t *testing.T) { testdataPath + "python-x64/3.6.6/lib/libpython3.6m.so.1.0", testdataPath + "python-x64/3.8.11/lib/libpython3.8.so.1.0", testdataPath + "python-x64/3.8.10/lib/libpython3.8.so.1.0", + testdataPath + "python-x64/3.8.10/lib/libpython3.8-pyston2.3.so.1.0", testdataPath + "python-arm64/3.7.12/lib/libpython3.7m.so.1.0", testdataPath + "python-arm64/3.5.1/lib/libpython3.5m.so.1.0", testdataPath + "python-arm64/3.9.15/lib/libpython3.9.so.1.0", @@ -398,6 +399,7 @@ func TestPython(t *testing.T) { testdataPath + "python-arm64/3.6.6/lib/libpython3.6m.so.1.0", testdataPath + "python-arm64/3.8.11/lib/libpython3.8.so.1.0", testdataPath + "python-arm64/3.8.10/lib/libpython3.8.so.1.0", + testdataPath + "python-arm64/3.8.10/lib/libpython3.8-pyston2.3.so.1.0", } for _, f := range fs { t.Run(f, func(t *testing.T) { From 43d828f062ae3886ebfab6c276938d928c22897c Mon Sep 17 00:00:00 2001 From: Chanhun Jeong Date: Tue, 2 Apr 2024 16:56:20 +0900 Subject: [PATCH 3/4] Update submodule Signed-off-by: Chanhun Jeong --- ebpf/testdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ebpf/testdata b/ebpf/testdata index cdb3fc98e3..c60d4a5658 160000 --- a/ebpf/testdata +++ b/ebpf/testdata @@ -1 +1 @@ -Subproject commit cdb3fc98e3349562961918acf9309ce9a01c6587 +Subproject commit c60d4a5658e3a20cfe8fee67d0bf71d2bbb1ef83 From f41760538acd92345220d0bab4082ddf2fa24638 Mon Sep 17 00:00:00 2001 From: Chanhun Jeong Date: Tue, 2 Apr 2024 17:27:40 +0900 Subject: [PATCH 4/4] Fix test Signed-off-by: Chanhun Jeong --- ebpf/python/procinfo_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ebpf/python/procinfo_test.go b/ebpf/python/procinfo_test.go index 4ae1395399..920953cbe7 100644 --- a/ebpf/python/procinfo_test.go +++ b/ebpf/python/procinfo_test.go @@ -293,7 +293,7 @@ func TestPython(t *testing.T) { testdataPath + "python-x64/3.6.6/lib/libpython3.6m.so.1.0", testdataPath + "python-x64/3.8.11/lib/libpython3.8.so.1.0", testdataPath + "python-x64/3.8.10/lib/libpython3.8.so.1.0", - testdataPath + "python-x64/3.8.10/lib/libpython3.8-pyston2.3.so.1.0", + testdataPath + "python-x64/3.8.12/lib/libpython3.8-pyston2.3.so.1.0", testdataPath + "python-arm64/3.7.12/lib/libpython3.7m.so.1.0", testdataPath + "python-arm64/3.5.1/lib/libpython3.5m.so.1.0", testdataPath + "python-arm64/3.9.15/lib/libpython3.9.so.1.0", @@ -399,7 +399,7 @@ func TestPython(t *testing.T) { testdataPath + "python-arm64/3.6.6/lib/libpython3.6m.so.1.0", testdataPath + "python-arm64/3.8.11/lib/libpython3.8.so.1.0", testdataPath + "python-arm64/3.8.10/lib/libpython3.8.so.1.0", - testdataPath + "python-arm64/3.8.10/lib/libpython3.8-pyston2.3.so.1.0", + testdataPath + "python-arm64/3.8.12/lib/libpython3.8-pyston2.3.so.1.0", } for _, f := range fs { t.Run(f, func(t *testing.T) {