MAKEALL: Fix kill_children
PATCH 1/2 MAKEALL: Fix kill_children
When building in parallel, make sure that we look up the children based on the the actual process group id instead of just assuming that the MAKEALL pid is the process group id.
Also ensure that logs from incomplete builds are deleted in the process.
--- MAKEALL | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-)
MAKEALL +24 -2
@@ -610,6 +610,13 @@ list_target() { donep="${LOG_DIR}/._done_" skipp="${LOG_DIR}/._skip_" +build_target_killed() { + echo "Aborted $target build." + # Remove the logs for this board since it was aborted + rm -f ${LOG_DIR}/$target.MAKELOG ${LOG_DIR}/$target.ERR + exit +} + build_target() { target=$1 build_idx=$2
@@ -622,6 +629,7 @@ build_target() { if [ $BUILD_MANY == 1 ] ; then output_dir="${OUTPUT_PREFIX}/${target}" mkdir -p "${output_dir}" + trap build_target_killed TERM else output_dir="${OUTPUT_PREFIX}" fi
@@ -640,6 +648,8 @@ build_target() { fi if [ $BUILD_MANY == 1 ] ; then + trap - TERM + ${MAKE} -s tidy if [ -s ${LOG_DIR}/${target}.ERR ] ; then
@@ -721,7 +731,9 @@ build_targets() { if [ $BUILD_MANY == 1 ] ; then build_target ${t} ${TOTAL_CNT} & else + CUR_TGT="${t}" build_target ${t} ${TOTAL_CNT} + CUR_TGT='' fi fi
@@ -745,7 +757,11 @@ build_targets() { #----------------------------------------------------------------------- kill_children() { - kill -- "-$1" + local pgid=`ps -p $$ --no-headers -o "%r" | tr -d ' '` + local children=`pgrep -g $pgid | grep -v $$ | grep -v $pgid` + + kill $children 2> /dev/null + wait $children 2> /dev/null exit }
@@ -753,6 +769,9 @@ kill_children() { print_stats() { if [ "$ONLY_LIST" == 'y' ] ; then return ; fi + # Only count boards that completed + : $((TOTAL_CNT = `find ${skipp}* 2> /dev/null | wc -l`)) + rm -f ${donep}* ${skipp}* if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then
@@ -762,6 +781,9 @@ print_stats() { WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/` WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done` WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'` + else + # Remove the logs for any board that was interrupted + rm -f ${LOG_DIR}/${CUR_TGT}.MAKELOG ${LOG_DIR}/${CUR_TGT}.ERR fi echo ""
@@ -776,7 +798,7 @@ print_stats() { echo "----------------------------------------------------------" if [ $BUILD_MANY == 1 ] ; then - kill_children $$ & + kill_children fi exit $RC
Signature · 1 line
1.7.11.5
PATCH 2/2 MAKEALL: Add options for incremental building
--continue will allow you to <ctrl-c> the MAKEALL and pick up where you left off.
--rebuild-errors will allow you to rebuild only those boards which had trouble on the last run of MAKEALL, allowing you to quickly test a simple fix on just those boards.
--- MAKEALL | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-)
MAKEALL +33 -8
@@ -20,6 +20,8 @@ usage() -m, --maintainers List all targets and maintainer email -M, --mails List all targets and all affilated emails -C, --check Enable build checking + -n, --continue Continue (skip boards already built) + -r, --rebuild-errors Rebuild any boards that errored -h, --help This help output Selections by these options are logically ANDed; if the same option
@@ -52,8 +54,8 @@ usage() exit ${ret} } -SHORT_OPTS="ha:c:v:s:lmMC" -LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers,mails,check" +SHORT_OPTS="ha:c:v:s:lmMCnr" +LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers,mails,check,continue,rebuild-errors" # Option processing based on util-linux-2.13/getopt-parse.bash
@@ -73,6 +75,8 @@ SELECTED='' ONLY_LIST='' PRINT_MAINTS='' MAINTAINERS_ONLY='' +CONTINUE='' +REBUILD_ERRORS='' while true ; do case "$1" in
@@ -115,6 +119,12 @@ while true ; do -C|--check) CHECK='C=1' shift ;; + -n|--continue) + CONTINUE='y' + shift ;; + -r|--rebuild-errors) + REBUILD_ERRORS='y' + shift ;; -l|--list) ONLY_LIST='y' shift ;;
@@ -198,7 +208,9 @@ fi OUTPUT_PREFIX="${BUILD_DIR}" [ -d ${LOG_DIR} ] || mkdir "${LOG_DIR}" || exit 1 -find "${LOG_DIR}/" -type f -exec rm -f {} + +if [ "$CONTINUE" != 'y' -a "$REBUILD_ERRORS" != 'y' ] ; then + find "${LOG_DIR}/" -type f -exec rm -f {} + +fi LIST=""
@@ -208,6 +220,7 @@ ERR_LIST="" WRN_CNT=0 WRN_LIST="" TOTAL_CNT=0 +SKIP_CNT=0 CURRENT_CNT=0 OLDEST_IDX=1 RC=0
@@ -728,12 +741,20 @@ build_targets() { : $((CURRENT_CNT += 1)) rm -f "${donep}${TOTAL_CNT}" rm -f "${skipp}${TOTAL_CNT}" - if [ $BUILD_MANY == 1 ] ; then - build_target ${t} ${TOTAL_CNT} & + if [ "$CONTINUE" = 'y' -a -e ${LOG_DIR}/$t.MAKELOG ] ; then + : $((SKIP_CNT += 1)) + touch "${donep}${TOTAL_CNT}" + elif [ "$REBUILD_ERRORS" = 'y' -a ! -e ${LOG_DIR}/$t.ERR ] ; then + : $((SKIP_CNT += 1)) + touch "${donep}${TOTAL_CNT}" else - CUR_TGT="${t}" - build_target ${t} ${TOTAL_CNT} - CUR_TGT='' + if [ $BUILD_MANY == 1 ] ; then + build_target ${t} ${TOTAL_CNT} & + else + CUR_TGT="${t}" + build_target ${t} ${TOTAL_CNT} + CUR_TGT='' + fi fi fi
@@ -786,8 +807,12 @@ print_stats() { rm -f ${LOG_DIR}/${CUR_TGT}.MAKELOG ${LOG_DIR}/${CUR_TGT}.ERR fi + : $((TOTAL_CNT -= ${SKIP_CNT})) echo "" echo "--------------------- SUMMARY ----------------------------" + if [ "$CONTINUE" = 'y' -o "$REBUILD_ERRORS" = 'y' ] ; then + echo "Boards skipped: ${SKIP_CNT}" + fi echo "Boards compiled: ${TOTAL_CNT}" if [ ${ERR_CNT} -gt 0 ] ; then echo "Boards with errors: ${ERR_CNT} (${ERR_LIST} )"
Signature · 1 line
1.7.11.5
PATCH 2/2 MAKEALL: Add options for incremental building
Quoted 8 lines · Joe Hershberger
--continue will allow you to <ctrl-c> the MAKEALL and pick up where you left off.
--rebuild-errors will allow you to rebuild only those boards which had trouble on the last run of MAKEALL, allowing you to quickly test a simple fix on just those boards.
Signed-off-by Joe Hershberger <[email protected]>
Quoted 4 lines
--- MAKEALL | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-)
PATCH 2/2 MAKEALL: Add options for incremental building
In reply to Joe HershbergerQuoted 8 lines · Joe Hershberger
--continue will allow you to <ctrl-c> the MAKEALL and pick up where you left off.
--rebuild-errors will allow you to rebuild only those boards which had trouble on the last run of MAKEALL, allowing you to quickly test a simple fix on just those boards.
Signed-off-by Joe Hershberger <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121207/096e6355/attachment.pgp>
PATCH 1/2 MAKEALL: Fix kill_children
In reply to Joe HershbergerQuoted 8 lines · Joe Hershberger
When building in parallel, make sure that we look up the children based on the the actual process group id instead of just assuming that the MAKEALL pid is the process group id.
Also ensure that logs from incomplete builds are deleted in the process.
Signed-off-by Joe Hershberger <[email protected]>
Quoted 94 lines
--- MAKEALL | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-)MAKEALL +24
-3@@ -610,6 +610,13 @@ list_target() { donep="${LOG_DIR}/._done_" skipp="${LOG_DIR}/._skip_" +build_target_killed() { + echo "Aborted $target build." + # Remove the logs for this board since it was aborted + rm -f ${LOG_DIR}/$target.MAKELOG ${LOG_DIR}/$target.ERR + exit +} + build_target() { target=$1 build_idx=$2@@ -622,6 +629,7 @@ build_target() { if [ $BUILD_MANY == 1 ] ; then output_dir="${OUTPUT_PREFIX}/${target}" mkdir -p "${output_dir}" + trap build_target_killed TERM else output_dir="${OUTPUT_PREFIX}" fi@@ -640,6 +648,8 @@ build_target() { fi if [ $BUILD_MANY == 1 ] ; then + trap - TERM + ${MAKE} -s tidy if [ -s ${LOG_DIR}/${target}.ERR ] ; then@@ -721,7 +731,9 @@ build_targets() { if [ $BUILD_MANY == 1 ] ; then build_target ${t} ${TOTAL_CNT} & else + CUR_TGT="${t}" build_target ${t} ${TOTAL_CNT} + CUR_TGT='' fi fi@@ -745,7 +757,11 @@ build_targets() { #----------------------------------------------------------------------- kill_children() { - kill -- "-$1" + local pgid=`ps -p $$ --no-headers -o "%r" | tr -d ' '` + local children=`pgrep -g $pgid | grep -v $$ | grep -v $pgid` + + kill $children 2> /dev/null + wait $children 2> /dev/null exit }@@ -753,6 +769,9 @@ kill_children() { print_stats() { if [ "$ONLY_LIST" == 'y' ] ; then return ; fi + # Only count boards that completed + : $((TOTAL_CNT = `find ${skipp}* 2> /dev/null | wc -l`)) + rm -f ${donep}* ${skipp}* if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then@@ -762,6 +781,9 @@ print_stats() { WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/` WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done` WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'` + else + # Remove the logs for any board that was interrupted + rm -f ${LOG_DIR}/${CUR_TGT}.MAKELOG ${LOG_DIR}/${CUR_TGT}.ERR fi echo ""@@ -776,7 +798,7 @@ print_stats() { echo "----------------------------------------------------------" if [ $BUILD_MANY == 1 ] ; then - kill_children $$ & + kill_children fi exit $RC --1.7.11.5
PATCH 1/2 MAKEALL: Fix kill_children
In reply to Joe HershbergerDear Joe Hershberger,
Quoted 8 lines
When building in parallel, make sure that we look up the children based on the the actual process group id instead of just assuming that the MAKEALL pid is the process group id.
Also ensure that logs from incomplete builds are deleted in the process.
Signed-off-by Joe Hershberger <[email protected]>
[...]
Nice $subject.
btw. is it possible to improve the u-boot build process parallelization?
Best regards,
Marek Vasut
PATCH 1/2 MAKEALL: Fix kill_children
Quoted 9 lines · Marek Vasut
Dear Joe Hershberger,
Quoted 7 lines
When building in parallel, make sure that we look up the children based on the the actual process group id instead of just assuming that the MAKEALL pid is the process group id.
Also ensure that logs from incomplete builds are deleted in the process.
Quoted 6 lines
Quoted 1 line
Signed-off-by Joe Hershberger <[email protected]>[...]
Nice $subject.
btw. is it possible to improve the u-boot build process parallelization?
Probably a little, but not a lot? It's be interesting to profile and see where a single machine build has bottlenecks, if any.
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121031/4bf34f00/attachment.pgp>
PATCH 1/2 MAKEALL: Fix kill_children
In reply to Marek VasutQuoted 9 lines · Marek Vasut
Dear Joe Hershberger,
Quoted 7 lines
When building in parallel, make sure that we look up the children based on the the actual process group id instead of just assuming that the MAKEALL pid is the process group id.
Also ensure that logs from incomplete builds are deleted in the process.
Quoted 6 lines
Quoted 1 line
Signed-off-by Joe Hershberger <[email protected]>[...]
Nice $subject.
btw. is it possible to improve the u-boot build process parallelization?
In what way?
PATCH 1/2 MAKEALL: Fix kill_children
Dear Andy Fleming,
Quoted 12 lines · Marek Vasut
Quoted 11 lines
Dear Joe Hershberger,
Quoted 8 lines
When building in parallel, make sure that we look up the children based on the the actual process group id instead of just assuming that the MAKEALL pid is the process group id.
Also ensure that logs from incomplete builds are deleted in the process.
Signed-off-by Joe Hershberger <[email protected]>
Quoted 7 lines
Quoted 5 lines
[...]
Nice $subject.
btw. is it possible to improve the u-boot build process parallelization?
In what way?
I recall someone complained the build process wasn't parallelizable enough and thus we need this stuff to run multiple builds at once in MAKEALL.
Best regards,
Marek Vasut
PATCH 1/2 MAKEALL: Fix kill_children
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Quoted 4 lines · Marek Vasut
Dear Andy Fleming,
Quoted 2 lines
On Wed, Oct 31, 2012 at 9:32 PM, Marek Vasut
<[email protected]> wrote:
[snip]
Quoted 8 lines
Quoted 4 lines
Quoted 2 lines
btw. is it possible to improve the u-boot build process parallelization?
In what way?
I recall someone complained the build process wasn't parallelizable enough and thus we need this stuff to run multiple builds at once in MAKEALL.
I don't know if the first half of that statement is strictly true. It'd be interesting to profile a build on one of the very large boxes but I think the issue is we only have ~300 objects being built. It's hard to run up a load of 32 when you only have that many things to build. But multiplying that by the number of boards in a arch or some cpu or soc combinations is easier to run up the load, except around the tails. But, profiling, please!
- --
Tom
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
iQIcBAEBAgAGBQJQkpP3AAoJENk4IS6UOR1WkQgP/0oih/weogNgs7Ql9Iv4Ct06 pNlaYJiDEOlKxhdwG80zXnyWSqIKkLIYN09N5NPyYQ3qgeM+uRYRiReDiwudYY+P pkOBWudj4X8SWUOucbRVWgx89DU4VrxCzY7sqqhDsQ+5ZTz8UjwG4wZaZOdewdLr ktxe90NQGVsl6ozQtJoSoJ57y727e07piGuBISRDwYZPwmpCl8d9dNd6liRf7zdv EXLIbO9aLROD67pkpO9OY392CVAU7cO4p5ir0dTGVZfYdPpadM+/Jsay5KsPhCf0 rM4eAFG1BvqhMBCc2NyPH2P71YU6rEsPdH6DyNh10aDRwUd7eep6/pU0tKbYpUR4 z0nsE1QOVLD5DY43/N0fEMN2G62LMiwnPuEQWT89N9uyDaFP7SS8lLRp/Sj7EhQF NLEMtMKvN8bVIBiVFXW8WOVRJqlc5uVpoeRqfbOctl50x9zGNHhypJlH65qtEeg/ UlroM1tw3p0j6Xk9zrNioGFy5/mpkF1hw2pirUAKF06yomg0FM9oAOwp/tfjyjgU uU2myW+lgWk0VfW/H00fyEBBs3vPnLo1PSL2WUKg43WRiEdY5C0/+E+lSIN7ph/z eeWKelSu6BUWPkuqBnxhUkMFRYtPCNqE5x6BdVv5p8TPxacD842qDP930Vg3YhqQ 1KG0rtSB69QqzAtVYDmO
=4XRP
-----END PGP SIGNATURE-----
PATCH 1/2 MAKEALL: Fix kill_children
In reply to Joe HershbergerQuoted 8 lines · Joe Hershberger
When building in parallel, make sure that we look up the children based on the the actual process group id instead of just assuming that the MAKEALL pid is the process group id.
Also ensure that logs from incomplete builds are deleted in the process.
Signed-off-by Joe Hershberger <[email protected]>
Now I see:/home/trini/bin/uboot-build.sh: line 110: 2024 Terminated /usr/bin/time -o $TIMEFILE -f %e ./MAKEALL $SOC $MACHINE > $LOG 2>&1
With my MAKEALL wrapper. Anything we can do about that?
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121103/1b7ad819/attachment.pgp>
PATCH 1/2 MAKEALL: Fix kill_children
Hi Tom,
Quoted 9 lines · Tom Rini
Quoted 7 lines · Joe Hershberger
When building in parallel, make sure that we look up the children based on the the actual process group id instead of just assuming that the MAKEALL pid is the process group id.
Also ensure that logs from incomplete builds are deleted in the process.
Quoted 7 lines
Quoted 1 line
Signed-off-by Joe Hershberger <[email protected]>Now I see:
/home/trini/bin/uboot-build.sh: line 110: 2024 Terminated/usr/bin/time-o $TIMEFILE -f %e ./MAKEALL $SOC $MACHINE > $LOG 2>&1With my MAKEALL wrapper. Anything we can do about that?
I see that as well... I did a little research and it seems like you have to jump through some pretty serious hoops to get rid of that message. I don't think it's worth the effort.
Does it have an impact on something in your wrapper?
-Joe
PATCH 1/2 MAKEALL: Fix kill_children
Quoted 18 lines · Joe Hershberger
Hi Tom,
Quoted 15 lines · Tom Rini
Quoted 8 lines · Joe Hershberger
When building in parallel, make sure that we look up the children based on the the actual process group id instead of just assuming that the MAKEALL pid is the process group id.
Also ensure that logs from incomplete builds are deleted in the process.
Signed-off-by Joe Hershberger <[email protected]>Now I see:
/home/trini/bin/uboot-build.sh: line 110: 2024 Terminated/usr/bin/time-o $TIMEFILE -f %e ./MAKEALL $SOC $MACHINE > $LOG 2>&1
Quoted 7 lines
Quoted 1 line
With my MAKEALL wrapper. Anything we can do about that?
I see that as well... I did a little research and it seems like you have to jump through some pretty serious hoops to get rid of that message. I don't think it's worth the effort.
Does it have an impact on something in your wrapper?
Purely cosemetic so I can live with the bugfixes as-is, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121104/90f40ffe/attachment.pgp>
PATCH 1/2 MAKEALL: Fix kill_children
In reply to Joe HershbergerQuoted 8 lines · Joe Hershberger
When building in parallel, make sure that we look up the children based on the the actual process group id instead of just assuming that the MAKEALL pid is the process group id.
Also ensure that logs from incomplete builds are deleted in the process.
Signed-off-by Joe Hershberger <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121207/c57aa6f9/attachment.pgp>