Skip to content
Snippets Groups Projects
Commit d0ae829e authored by Benedikt Hegner's avatar Benedikt Hegner
Browse files

updates to Doxygen documentation

- added release instructions
- updated Jemalloc instructions
- fixed issue with duplicated entries
- enable automatic Doxygen generation via GitLab-CI

See merge request !140
parents e6383fa9 14586bc1
No related branches found
No related tags found
1 merge request!140updates to Doxygen documentation
Pipeline #
before_script:
- . /afs/cern.ch/lhcb/software/releases/LBSCRIPTS/dev/InstallArea/scripts/LbLogin.sh
- unset VERBOSE
- export PATH=/afs/cern.ch/sw/lcg/contrib/ninja/1.4.0/x86_64-slc6:${PATH}
- ln -sf Makefile-cmake.mk Makefile
- echo 'set(CMAKE_USE_CCACHE ON CACHE BOOL "")' >> cache_preload.cmake
doxygen:
script:
- make
- make doc
- mv build.${CMTCONFIG}/doxygen .
artifacts:
paths:
- doxygen/
Profiling Gaudi jobs with Jemalloc {#profiling-jemalloc} Profiling Gaudi jobs with Jemalloc {#profiling-jemalloc}
=============================================================================== ===============================================================================
Integration of Jemalloc within gaudi jobs. Integration of Jemalloc within Gaudi jobs.
Uses the Jemalloc library from http://www.canonware.com/jemalloc/ Uses the Jemalloc library from http://www.canonware.com/jemalloc/
It is possible to profile the memory used by Gaudi jobs, using the jemalloc library It is possible to profile the memory used by Gaudi jobs, using the jemalloc library
...@@ -14,12 +14,12 @@ To run the profiler, it is necessary to: ...@@ -14,12 +14,12 @@ To run the profiler, it is necessary to:
gaudirun.py has been updated to set the environment accordingly (a prerequisite is however gaudirun.py has been updated to set the environment accordingly (a prerequisite is however
that libjemalloc.so has to be available in the library path). that libjemalloc.so has to be available in the library path).
A Gaudi algorithm has also been developped to perform memory heap dumps at various event, A Gaudi algorithm has also been developed to perform memory heap dumps at various event,
and is configured using the StartFromEventN, StopAtEventN and DumpPeriod, as described and is configured using the StartFromEventN, StopAtEventN and DumpPeriod, as described
in the example below. in the example below.
A Gaudi service is also available to provide the same functionality, with the advantage A Gaudi service is also available to provide the same functionality, with the advantage
of being able to profile without modifying the algorithm sequence. of being able to profile without modifying the algorithm sequence.
Running with the JemallocProfile algorithm Running with the JemallocProfile algorithm
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
...@@ -48,9 +48,9 @@ $> gaudirun.py --profilerName=jemalloc --run-info-file=runinfo.json myoptions.py ...@@ -48,9 +48,9 @@ $> gaudirun.py --profilerName=jemalloc --run-info-file=runinfo.json myoptions.py
Please note the the `--profilerName=jemalloc` to enbale the profiling, and the `--run-info-file` that produces Please note the the `--profilerName=jemalloc` to enbale the profiling, and the `--run-info-file` that produces
a file containing information useful to interpret the results (process id of the Gaudi job, and the absolute path a file containing information useful to interpret the results (process id of the Gaudi job, and the absolute path
of the executable, necessary to run the pprof analysis tool). of the executable, necessary to run the jeprof analysis tool).
Running with the JemallocProfileSvc service Running with the JemallocProfileSvc service
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
### Change Options File ### Change Options File
...@@ -60,20 +60,22 @@ Simple example of using the JemallocProfileSvc service in a Gaudi configurable: ...@@ -60,20 +60,22 @@ Simple example of using the JemallocProfileSvc service in a Gaudi configurable:
~~~~~~~{.py} ~~~~~~~{.py}
#!/usr/bin/env gaudirun.py #!/usr/bin/env gaudirun.py
from Configurables import JemallocProfileSvc from Configurables import JemallocProfileSvc
from Gaudi.Configuration import DEBUG
#... #...
ApplicationMgr().ExtSvc += { "JemallocProfileSvc" } jps = JemallocProfileSvc(StartFromEventN=3,
JemallocProfileSvc().StartFromEventN=3 StopAtEventN=7,
JemallocProfileSvc().StopAtEventN=7 OutputLevel=DEBUG)
JemallocProfileSvc().OutputLevel=DEBUG ApplicationMgr().ExtSvc.append(jps)
~~~~~~~ ~~~~~~~
It is also possible to trigger the profiling using incidents: It is also possible to trigger the profiling using incidents:
~~~~~~~{.py} ~~~~~~~{.py}
from Configurables import JemallocProfileSvc from Configurables import JemallocProfileSvc
ApplicationMgr().ExtSvc += { "JemallocProfileSvc" } jps = JemallocProfileSvc(StartFromIncidents=['MyStartIncident1',
JemallocProfileSvc().StartFromIncidents= [ "MyStartIncident1", "MyStartIncident2" ] 'MyStartIncident2'],
JemallocProfileSvc().StopAtIncidents= [ "MyStopIncident" ] StopAtIncidents=['MyStopIncident'])
ApplicationMgr().ExtSvc.append(jps)
~~~~~~~ ~~~~~~~
### Run the job ### Run the job
...@@ -84,17 +86,17 @@ Analyze ...@@ -84,17 +86,17 @@ Analyze
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
### With text output ### With text output
The pprof analysis tool from the Google performances tools (http://goog-perftools.sourceforge.net/) The jeprof analysis tool from the Google performances tools (http://goog-perftools.sourceforge.net/)
is necessary to analyze the heap files. is necessary to analyze the heap files.
It can be used to comapre the memory in two heap files in the following way: It can be used to compare the memory in two heap files in the following way:
~~~~~~~~{.sh} ~~~~~~~~{.sh}
$> pprof -text --base=<firstheap>.heap <executable name> <comparewith>.heap $> jeprof -text --base=<firstheap>.heap <executable name> <comparewith>.heap
~~~~~~~~ ~~~~~~~~
### To produce a postscript file ### To produce a postscript file
~~~~~~~~{.sh} ~~~~~~~~{.sh}
$> pprof -gv --base=<firstheap>.heap <executable name> <comparewith>.heap $> jeprof -gv --base=<firstheap>.heap <executable name> <comparewith>.heap
~~~~~~~~ ~~~~~~~~
...@@ -62,7 +62,7 @@ Release notes of the packages: ...@@ -62,7 +62,7 @@ Release notes of the packages:
# in principle this is not needed, but it allows to run Doxygen and install # in principle this is not needed, but it allows to run Doxygen and install
# MathJax at the same time # MathJax at the same time
add_custom_target(install-MathJax DEPENDS ${CMAKE_BINARY_DIR}/doxygen/mathjax) add_custom_target(install-MathJax DEPENDS ${CMAKE_BINARY_DIR}/doxygen/mathjax)
add_dependencies(doc install-MathJax) add_dependencies(run-doxygen install-MathJax)
set(MATHJAX_RELPATH "../mathjax") set(MATHJAX_RELPATH "../mathjax")
else() else()
set(MATHJAX_RELPATH "http://cdn.mathjax.org/mathjax/latest") set(MATHJAX_RELPATH "http://cdn.mathjax.org/mathjax/latest")
...@@ -81,7 +81,7 @@ Release notes of the packages: ...@@ -81,7 +81,7 @@ Release notes of the packages:
-P ${CMAKE_CURRENT_SOURCE_DIR}/get_cppreference_tags.cmake -P ${CMAKE_CURRENT_SOURCE_DIR}/get_cppreference_tags.cmake
COMMENT "Getting cppreference.com doxygen tags...") COMMENT "Getting cppreference.com doxygen tags...")
add_custom_target(get-ccpreference-tags DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/cppreference-doxygen-web.tag.xml) add_custom_target(get-ccpreference-tags DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/cppreference-doxygen-web.tag.xml)
add_dependencies(doc get-ccpreference-tags) add_dependencies(run-doxygen get-ccpreference-tags)
set(DOXYGEN_TAGFILES set(DOXYGEN_TAGFILES
"${DOXYGEN_TAGFILES} \"${CMAKE_CURRENT_BINARY_DIR}/cppreference-doxygen-web.tag.xml=http://en.cppreference.com/w/\"") "${DOXYGEN_TAGFILES} \"${CMAKE_CURRENT_BINARY_DIR}/cppreference-doxygen-web.tag.xml=http://en.cppreference.com/w/\"")
endif() endif()
......
...@@ -786,6 +786,7 @@ RECURSIVE = YES ...@@ -786,6 +786,7 @@ RECURSIVE = YES
# run. # run.
EXCLUDE = @CMAKE_SOURCE_DIR@/GaudiRelease/doc/GaudiHive-release-notes.md EXCLUDE = @CMAKE_SOURCE_DIR@/GaudiRelease/doc/GaudiHive-release-notes.md
EXCLUDE += @CMAKE_SOURCE_DIR@/InstallArea
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded # directories that are symbolic links (a Unix file system feature) are excluded
......
...@@ -5,3 +5,7 @@ Gaudi Manual ...@@ -5,3 +5,7 @@ Gaudi Manual
* @subpage GaudiPluginService-readme * @subpage GaudiPluginService-readme
* @subpage MetaDataSvc-readme * @subpage MetaDataSvc-readme
* @subpage profiling_tools * @subpage profiling_tools
## For Mainatiners
* @subpage release-procedure
Procedure to Release Gaudi {#release-procedure}
==========================
## Updated versions and release notes
1. use the script `GaudiRelease/prepare_gaudi_release.py` to update the
versions of all packages and prepare their release notes
2. update `GaudiRelease/doc/release.notes.html` from the release notes
in JIRA (see the [list of versions](https://its.cern.ch/jira/browse/GAUDI/?selectedTab=com.atlassian.jira.jira-projects-plugin:versions-panel))
3. update/correct the release notes of the packages or of the project if
needed
4. push the changes to a branch and create a merge request
## Tagging
1. using the GitLab interface, [create the tag](https://gitlab.cern.ch/gaudi/Gaudi/tags/new)
2. close the corresponding milestone from the [list of milestones](https://gitlab.cern.ch/gaudi/Gaudi/milestones)
3. release the version in JIRA (see the [list of versions](https://its.cern.ch/jira/browse/GAUDI/?selectedTab=com.atlassian.jira.jira-projects-plugin:versions-panel))
## Update the web page
After the release is installed in AFS, run the following commands:
cd /afs/.cern.ch/sw/Gaudi/www
./add_release.sh vXrY
afs_admin vos_release .
## Synchronizing SVN
1. synchronize the version in the trunk:
cd /afs/cern.ch/sw/Gaudi/git/gateway/Gaudi
git checkout master
git pull --ff-only
git checkout gw/trunk
git merge --no-ff -c 'synchronize with Gaudi vXrY' master
git svn dcommit
git checkout master
git svn fetch
git push
2. create the svn tags:
cd /afs/cern.ch/sw/Gaudi/git/gateway/Gaudi
GaudiRelease/cmt/svn_tag_release.py
git checkout master
git svn fetch
git push
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment