summaryrefslogtreecommitdiff
path: root/0002-x86-fix-extend-gcore.so-taking-much-time-like-more-t.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-x86-fix-extend-gcore.so-taking-much-time-like-more-t.patch')
-rw-r--r--0002-x86-fix-extend-gcore.so-taking-much-time-like-more-t.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/0002-x86-fix-extend-gcore.so-taking-much-time-like-more-t.patch b/0002-x86-fix-extend-gcore.so-taking-much-time-like-more-t.patch
new file mode 100644
index 0000000..bc22d7e
--- /dev/null
+++ b/0002-x86-fix-extend-gcore.so-taking-much-time-like-more-t.patch
@@ -0,0 +1,67 @@
+From b3af265aa60251f282145bb0eee3b83d8a15ebb7 Mon Sep 17 00:00:00 2001
+From: HATAYAMA Daisuke <d.hatayama@fujitsu.com>
+Date: Mon, 18 Sep 2023 20:45:11 -0400
+Subject: [PATCH 2/2] x86: fix extend gcore.so taking much time like more than
+ 1 hour when huge thread group is present
+
+extend gcore.so command takes lengthy time such as more than 1 hour
+when huge thread group is present.
+
+The root cause of this issue is that we never take into account time
+complexity of function gcore_arch_vsyscall_has_vm_alwaysdump_flag()
+sufficiently, which iterates the task list and vma lists of each task
+to detect existence of VM_ALWAYS flag in a given crash dump and so has
+O(nm) where the n is the length of the task list and the m is the
+total number of vma among all tasks.
+
+To fix this issue, skip this process for the kernels whose version is
+equal to or larger than v3.4.0.
+
+Originally, this process was implemented to detect existence of
+VM_ALWAYS flag that was removed at the commit
+909af768e88867016f427264ae39d27a57b6a8ed (coredump: remove
+VM_ALWAYSDUMP flag) included at Linux kernel v3.4. However, the base
+kernel version of RHEL7.0 GA is 3.10.0-123.el7. Hence, the kernels for
+RHEL7 and later have included the commit. For RHEL7 and later, it's
+sufficient to conclude absence of the flag by checking kernel version
+of a given crash dump.
+
+The issue could still remain on RHEL6 and older, but we think it's
+acceptable because today we rarely handle crash dump files of RHEL6
+and older.
+
+Signed-off-by: HATAYAMA Daisuke <d.hatayama@fujitsu.com>
+Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
+---
+ src/libgcore/gcore_x86.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/src/libgcore/gcore_x86.c b/src/libgcore/gcore_x86.c
+index 8878f79d4c08..3ddf5109ade0 100644
+--- a/src/libgcore/gcore_x86.c
++++ b/src/libgcore/gcore_x86.c
+@@ -2502,6 +2502,21 @@ int gcore_arch_vsyscall_has_vm_alwaysdump_flag(void)
+ struct task_context *tc;
+ int i;
+
++ /*
++ * The commit 909af768e88867016f427264ae39d27a57b6a8ed
++ * (coredump: remove VM_ALWAYSDUMP flag) of the Linux kernel
++ * was merged at v3.4. We can say VM_ALWAYSDUMP flag doesn't
++ * exist for the version 3.4.0 or later. The base kernel
++ * version of RHEL7.0 GA is 3.10.0-123.el7. Hence, this
++ * condition is expected to match RHEL7 and later RHEL major
++ * versions. On the other hand, the commit
++ * 909af768e88867016f427264ae39d27a57b6a8ed was backported
++ * into the kernel package in RHEL6 and the exploring code is
++ * still needed.
++ */
++ if (THIS_KERNEL_VERSION >= LINUX(3, 4, 0))
++ return FALSE;
++
+ /*
+ * For simplicity, consider that VM_ALWAYSDUMP was already not
+ * present when maple tree was introduced.
+--
+2.45.1
+