tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kernel stack usage



I think it would make sense to add -Wstack-usage=X to kernel builds.

Either 2KB or 1KB seems to be good limit, not too many offenders
between 1KB and 2KB so maybe worth it to use 1KB and change them.

I'm sure there would be something similar for LLVM too.

Jaromir

Le dim. 31 mai 2020 à 15:39, Simon Burge <simonb%netbsd.org@localhost> a écrit :
>
> matthew green wrote:
>
> > glad to see this effort and the clean up already!
> >
> > ideally, we can break the kernel build if large stack consumers
> > are added to the kernel.  i'd be OK with it being default on,
> > with of course a way to skip it, and if necessary it can have
> > a whitelist of "OK large users."
>
> I started to look at -fstack-usage which gives a nice MI way of getting
> the data instead of parsing MD objdump output, but didn't get any
> further than the below patch.  The find(1) command referenced in the
> patch gives the following
>
>   1008 nfs_serv.c:2181:1:nfsrv_link
>   1056 procfs_linux.c:422:1:procfs_do_pid_stat
>   1056 vfs_subr.c:1521:1:vfs_buf_print
>   1072 dl_print.c:80:1:sdl_print
>   1104 core_elf32.c:300:1:coredump_getseghdrs_elf32
>   1104 core_elf32.c:300:1:coredump_getseghdrs_elf64
>   1104 sys_ptrace_common.c:1595:1:proc_regio
>   1120 subr_bufq.c:131:1:bufq_alloc
>   1136 db_lwp.c:64:1:db_lwp_whatis
>   1152 kern_ktrace.c:1269:1:ktrwrite
>   1168 uvm_swap.c:768:1:uvm_swap_stats.part.1
>   1312 nfs_serv.c:1905:1:nfsrv_rename
>   2112 tty_60.c:68:1:compat_60_ptmget_ioctl
>   2144 memmem.c:83:14:twoway_memmem
>
> Anyone else want to run with adding a bit more to this to do some build
> failure as mrg@ suggests and documenting for options(4)?
>
> Cheers,
> Simon.
> --
> Index: Makefile.kern.inc
> ===================================================================
> RCS file: /cvsroot/src/sys/conf/Makefile.kern.inc,v
> retrieving revision 1.270
> diff -d -p -u -r1.270 Makefile.kern.inc
> --- Makefile.kern.inc   21 May 2020 18:44:19 -0000      1.270
> +++ Makefile.kern.inc   31 May 2020 13:34:13 -0000
> @@ -104,6 +104,11 @@ CFLAGS+=   -ffreestanding -fno-zero-initia
>  CFLAGS+=       ${${ACTIVE_CC} == "gcc":? -fno-delete-null-pointer-checks :}
>  CFLAGS+=       ${DEBUG} ${COPTS}
>  AFLAGS+=       -D_LOCORE -Wa,--fatal-warnings
> +.if defined(KERN_STACK_USAGE)
> +# example usage to find largest stack users in kernel compile directory:
> +#    find . -name \*.su | xargs awk '{ printf "%6d %s\n", $2, $1 }' | sort +1n
> +CFLAGS+=       -fstack-usage
> +.endif
>
>  # XXX
>  .if defined(HAVE_GCC) || defined(HAVE_LLVM)
> @@ -338,8 +343,8 @@ ${_s:T:R}.o: ${_s}
>  .if !target(__CLEANKERNEL)
>  __CLEANKERNEL: .USE
>         ${_MKMSG} "${.TARGET}ing the kernel objects"
> -       rm -f ${KERNELS} *.map eddep tags *.[io] *.ko *.ln [a-z]*.s vers.c \
> -           [Ee]rrs linterrs makelinks assym.h.tmp assym.h \
> +       rm -f ${KERNELS} *.map *.[io] *.ko *.ln [a-z]*.s *.su vers.c \
> +           eddep tags [Ee]rrs linterrs makelinks assym.h.tmp assym.h \
>             ${EXTRA_KERNELS} ${EXTRA_CLEAN}
>  .endif
>


Home | Main Index | Thread Index | Old Index