Skip to contentSkip to conversation

fix compile with CONFIG_CHECKPOINT_DEBUG=n

PATCH In review Serge E. Hallyn 2 participants 5 messages Oct 22, 2009 – Oct 23, 2009 3 messages not in the archive

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 fix compile with CONFIG_CHECKPOINT_DEBUG=n

On the one hand, compiling without checkpoing debug saves a lot of kernel size:

with debug:
-rwxrwxr-x 1 hallyn hallyn 62391508 Oct 21 22:08 vmlinux without debug:
-rwxrwxr-x 1 hallyn hallyn 62298077 Oct 21 22:33 vmlinux

OTOH the need for this patch just proves my point that we don't want any more config options than we need (especially no CONFIG_CHECKPOINT_LOGGING in addition to _DEBUG).

So that begs the question - is there something we can do to avoid having to recompile the kernel to turn on debugging, but not take up 100k of space in vmlinux? Maybe get rid of the ckpt_debugs altogether and instead provide pre-written kprobe sets to turn on debugging at specific places?

---
 checkpoint/restart.c |   23 +++++++++++++----------
 1 files changed, 13 insertions(+), 10 deletions(-)
checkpoint/restart.c +13 -10
index 32a9fc5..105dd0a 100644
@@ -26,6 +26,15 @@
 #include <linux/checkpoint.h>
 #include <linux/checkpoint_hdr.h>
 
+#define RESTART_DBG_ROOT	(1 << 0)
+#define RESTART_DBG_GHOST	(1 << 1)
+#define RESTART_DBG_COORD	(1 << 2)
+#define RESTART_DBG_TASK	(1 << 3)
+#define RESTART_DBG_WAITING	(1 << 4)
+#define RESTART_DBG_RUNNING	(1 << 5)
+#define RESTART_DBG_EXITED	(1 << 6)
+#define RESTART_DBG_FAILED	(1 << 7)
+#define RESTART_DBG_SUCCESS	(1 << 8)
 
 #ifdef CONFIG_CHECKPOINT_DEBUG
 
@@ -44,15 +53,6 @@
 
 struct ckpt_task_status {
 	pid_t pid;
-#define RESTART_DBG_ROOT	(1 << 0)
-#define RESTART_DBG_GHOST	(1 << 1)
-#define RESTART_DBG_COORD	(1 << 2)
-#define RESTART_DBG_TASK	(1 << 3)
-#define RESTART_DBG_WAITING	(1 << 4)
-#define RESTART_DBG_RUNNING	(1 << 5)
-#define RESTART_DBG_EXITED	(1 << 6)
-#define RESTART_DBG_FAILED	(1 << 7)
-#define RESTART_DBG_SUCCESS	(1 << 8)
 	int flags;
 	int error;
 	struct list_head list;
@@ -178,7 +178,10 @@ void restore_debug_free(struct ckpt_ctx *ctx)
 
 #else
 
-static inline void restore_debug_task(struct ckpt_ctx *ctx, int flags) {}
+static inline int restore_debug_task(struct ckpt_ctx *ctx, int flags)
+{
+	return 0;
+}
 static inline void restore_debug_error(struct ckpt_ctx *ctx, int err) {}
 static inline void restore_debug_running(struct ckpt_ctx *ctx) {}
 static inline void restore_debug_exit(struct ckpt_ctx *ctx) {}
Signature · 1 line
1.6.1

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

#2 lore raw

PATCH 1/1 ipc_ind_to_str unused if !CONFIG_CHECKPOINT_DEBUG

(compilation cleanup on top of
fix-compile-with-CONFIG_CHECKPOINT_DEBUG-n.patch
)

---
 ipc/checkpoint.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
ipc/checkpoint.c +2 -0
index 8e6e9ba..ab9110a 100644
@@ -21,7 +21,9 @@
 #include "util.h"
 
 /* for ckpt_debug */
+#ifdef CONFIG_CHECKPOINT_DEBUG
 static char *ipc_ind_to_str[] = { "sem", "msg", "shm" };
+#endif
 
 #define shm_ids(ns)	((ns)->ids[IPC_SHM_IDS])
 #define msg_ids(ns)	((ns)->ids[IPC_MSG_IDS])
Signature · 1 line
1.6.1

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

#4 lore raw

Re: [PATCH] ipc_ind_to_str unused if !CONFIG_CHECKPOINT_DEBUG

Added, thanks.

Quoted 23 lines · Serge E. Hallyn

(compilation cleanup on top of
fix-compile-with-CONFIG_CHECKPOINT_DEBUG-n.patch
)

---
 ipc/checkpoint.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
ipc/checkpoint.c +2 -0
index 8e6e9ba..ab9110a 100644
@@ -21,7 +21,9 @@
 #include "util.h"
 
 /* for ckpt_debug */
+#ifdef CONFIG_CHECKPOINT_DEBUG
 static char *ipc_ind_to_str[] = { "sem", "msg", "shm" };
+#endif
 
 #define shm_ids(ns)	((ns)->ids[IPC_SHM_IDS])
 #define msg_ids(ns)	((ns)->ids[IPC_MSG_IDS])
#5 lore raw
In reply to a message not in the archive
Quoted 12 lines · Serge E. Hallyn

On the one hand, compiling without checkpoing debug saves a lot of kernel size:

with debug:
-rwxrwxr-x 1 hallyn hallyn 62391508 Oct 21 22:08 vmlinux without debug:
-rwxrwxr-x 1 hallyn hallyn 62298077 Oct 21 22:33 vmlinux

OTOH the need for this patch just proves my point that we don't want any more config options than we need (especially no CONFIG_CHECKPOINT_LOGGING in addition to _DEBUG).

Quoted 5 lines

So that begs the question - is there something we can do to avoid having to recompile the kernel to turn on debugging, but not take up 100k of space in vmlinux? Maybe get rid of the ckpt_debugs altogether and instead provide pre-written kprobe sets to turn on debugging at specific places?

What is the reason for the increase - the strings ? the extra inlined code ? the passing of variables to printed ?

Turning on/off code at specific place requires that the code still be there ...

do you intend to add a crdebug.ko module hat will hold all
that code ? (if so, you still need to pass the variables).

Quoted 2 lines

Meanwhile - pulled, thanks.

Oren

Quoted 52 lines
---
 checkpoint/restart.c |   23 +++++++++++++----------
 1 files changed, 13 insertions(+), 10 deletions(-)
checkpoint/restart.c +13 -10
index 32a9fc5..105dd0a 100644
@@ -26,6 +26,15 @@
 #include <linux/checkpoint.h>
 #include <linux/checkpoint_hdr.h>
 
+#define RESTART_DBG_ROOT	(1 << 0)
+#define RESTART_DBG_GHOST	(1 << 1)
+#define RESTART_DBG_COORD	(1 << 2)
+#define RESTART_DBG_TASK	(1 << 3)
+#define RESTART_DBG_WAITING	(1 << 4)
+#define RESTART_DBG_RUNNING	(1 << 5)
+#define RESTART_DBG_EXITED	(1 << 6)
+#define RESTART_DBG_FAILED	(1 << 7)
+#define RESTART_DBG_SUCCESS	(1 << 8)
 
 #ifdef CONFIG_CHECKPOINT_DEBUG
 
@@ -44,15 +53,6 @@
 
 struct ckpt_task_status {
 	pid_t pid;
-#define RESTART_DBG_ROOT	(1 << 0)
-#define RESTART_DBG_GHOST	(1 << 1)
-#define RESTART_DBG_COORD	(1 << 2)
-#define RESTART_DBG_TASK	(1 << 3)
-#define RESTART_DBG_WAITING	(1 << 4)
-#define RESTART_DBG_RUNNING	(1 << 5)
-#define RESTART_DBG_EXITED	(1 << 6)
-#define RESTART_DBG_FAILED	(1 << 7)
-#define RESTART_DBG_SUCCESS	(1 << 8)
 	int flags;
 	int error;
 	struct list_head list;
@@ -178,7 +178,10 @@ void restore_debug_free(struct ckpt_ctx *ctx)
 
 #else
 
-static inline void restore_debug_task(struct ckpt_ctx *ctx, int flags) {}
+static inline int restore_debug_task(struct ckpt_ctx *ctx, int flags)
+{
+	return 0;
+}
 static inline void restore_debug_error(struct ckpt_ctx *ctx, int err) {}
 static inline void restore_debug_running(struct ckpt_ctx *ctx) {}
 static inline void restore_debug_exit(struct ckpt_ctx *ctx) {}

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

#7 lore raw
Quoted 15 lines · Oren Laadan
Quoted 12 lines · Serge E. Hallyn

On the one hand, compiling without checkpoing debug saves a lot of kernel size:

with debug:
-rwxrwxr-x 1 hallyn hallyn 62391508 Oct 21 22:08 vmlinux without debug:
-rwxrwxr-x 1 hallyn hallyn 62298077 Oct 21 22:33 vmlinux

OTOH the need for this patch just proves my point that we don't want any more config options than we need (especially no CONFIG_CHECKPOINT_LOGGING in addition to _DEBUG).

Quoted 8 lines
Quoted 5 lines

So that begs the question - is there something we can do to avoid having to recompile the kernel to turn on debugging, but not take up 100k of space in vmlinux? Maybe get rid of the ckpt_debugs altogether and instead provide pre-written kprobe sets to turn on debugging at specific places?

What is the reason for the increase - the strings ? the extra inlined code ? the passing of variables to printed ?

Half and half :)

Pulling out the 'current->pid' and task_pid_nr arguments in _ckpt_debug to printk, but keeping the __func__ and __LINE__, halves the overhead of CONFIG_CHECKPOINT_DEBUG from 78190 to 39809 bytes.

-serge