Changes in / [e8261bb:53d34343]


Ignore:
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • Jenkins/Distribute

    re8261bb r53d34343  
    22
    33import groovy.transform.Field
    4 
    5 // For skipping stages
    6 import org.jenkinsci.plugins.pipeline.modeldefinition.Utils
    74
    85//===========================================================================================================
     
    107//===========================================================================================================
    118
    12 node('master') {
    13         // Globals
    14         BuildDir  = pwd tmp: true
    15         SrcDir    = pwd tmp: false
    16         Settings  = null
    17         Version   = ''
     9// Globals
     10BuildDir  = null
     11SrcDir    = null
     12Settings  = null
     13Version   = ''
    1814
    19         // Local variables
    20         def err = null
    21         def log_needed = false
     15// Local variables
     16def err = null
     17def log_needed = false
    2218
    23         currentBuild.result = "SUCCESS"
     19currentBuild.result = "SUCCESS"
     20
     21final commit, build
     22node {
    2423
    2524        //Wrap build to add timestamp to command line
    2625        wrap([$class: 'TimestamperBuildWrapper']) {
     26                (commit, build) = prepare_build()
     27        }
     28}
    2729
    28                 final commit, build
    29                 (commit, build) = prepare_build()
    30 
    31                 node('x64') {
    32                         BuildDir  = pwd tmp: true
    33                         SrcDir    = pwd tmp: false
    34 
    35                         Tools.Clean()
    36 
    37                         Tools.Checkout( commit )
    38 
    39                         Version = GetVersion( build )
    40 
    41                         Configure()
    42 
    43                         Package()
    44 
    45                         Test()
    46 
    47                         Archive()
    48                 }
    49 
    50                 // Update the build directories when exiting the node
     30node('x64') {
     31        //Wrap build to add timestamp to command line
     32        wrap([$class: 'TimestamperBuildWrapper']) {
    5133                BuildDir  = pwd tmp: true
    5234                SrcDir    = pwd tmp: false
     35
     36                Tools.Clean()
     37
     38                Tools.Checkout( commit )
     39
     40                Version = GetVersion( build )
     41
     42                Configure()
     43
     44                Package()
     45
     46                Test()
     47
     48                Archive()
    5349        }
    54 
    5550}
    5651
  • Jenkins/FullBuild

    re8261bb r53d34343  
    55//===========================================================================================================
    66
    7 node ('master') {
     7node {
    88        def err = null
    99
     
    144144//Email notification on a full build failure
    145145def promote_email(boolean success) {
    146         echo('notifying users')
     146        node {
     147                echo('notifying users')
    147148
    148         def result = success ? "PROMOTE - SUCCESS" : "PROMOTE - FAILURE"
     149                def result = success ? "PROMOTE - SUCCESS" : "PROMOTE - FAILURE"
    149150
    150         //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line
    151         //Configurations for email format
    152         def email_subject = "[cforall git][${result}]"
    153         def email_body = """<p>This is an automated email from the Jenkins build machine. It was
    154 generated following the result of the C\u2200 nightly build.</p>
     151                //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line
     152                //Configurations for email format
     153                def email_subject = "[cforall git][${result}]"
     154                def email_body = """<p>This is an automated email from the Jenkins build machine. It was
     155        generated following the result of the C\u2200 nightly build.</p>
    155156
    156 <p>Check console output at ${env.BUILD_URL} to view the results.</p>
     157        <p>Check console output at ${env.BUILD_URL} to view the results.</p>
    157158
    158 <p>- Status --------------------------------------------------------------</p>
     159        <p>- Status --------------------------------------------------------------</p>
    159160
    160 <p>${result}</p>
     161        <p>${result}</p>
    161162
    162 <p>- Performance ---------------------------------------------------------</p>
     163        <p>- Performance ---------------------------------------------------------</p>
    163164
    164 <img src="https://cforall.uwaterloo.ca/jenkins/job/Cforall/job/master/plot/Compilation/getPlot?index=0" >
    165 <img src="https://cforall.uwaterloo.ca/jenkins/job/Cforall/job/master/plot/Compilation/getPlot?index=1" >
     165        <img src="https://cforall.uwaterloo.ca/jenkins/job/Cforall/job/master/plot/Compilation/getPlot?index=0" >
     166        <img src="https://cforall.uwaterloo.ca/jenkins/job/Cforall/job/master/plot/Compilation/getPlot?index=1" >
    166167
    167 <p>- Logs ----------------------------------------------------------------</p>
    168 """
     168        <p>- Logs ----------------------------------------------------------------</p>
     169        """
    169170
    170         def email_to = "cforall@lists.uwaterloo.ca"
     171                def email_to = "cforall@lists.uwaterloo.ca"
    171172
    172         //send email notification
    173         emailext body: email_body, subject: email_subject, to: email_to, attachLog: !success
     173                //send email notification
     174                emailext body: email_body, subject: email_subject, to: email_to, attachLog: !success
     175        }
    174176}
  • Jenkinsfile

    re8261bb r53d34343  
    77//===========================================================================================================
    88
    9 node('master') {
    10         // Globals
    11         BuildDir  = pwd tmp: true
    12         SrcDir    = pwd tmp: false
    13         Settings  = null
    14         Tools     = null
    15 
    16         // Local variables
    17         def err = null
    18         def log_needed = false
    19 
    20         currentBuild.result = "SUCCESS"
    21 
    22         try {
     9// Globals
     10BuildDir  = null
     11SrcDir    = null
     12Settings  = null
     13Tools     = null
     14
     15// Local variables
     16def err = null
     17def log_needed = false
     18
     19currentBuild.result = "SUCCESS"
     20
     21try {
     22        node {
    2323                //Wrap build to add timestamp to command line
    2424                wrap([$class: 'TimestamperBuildWrapper']) {
    25 
    2625                        Settings = prepare_build()
    27 
    28                         node(Settings.Architecture.node) {
    29                                 BuildDir  = pwd tmp: true
    30                                 SrcDir    = pwd tmp: false
    31                                 currentBuild.description = "${currentBuild.description} on ${env.NODE_NAME}"
    32 
    33                                 Tools.Clean()
    34 
    35                                 Tools.Checkout()
    36 
    37                                 build()
    38 
    39                                 test()
    40 
    41                                 benchmark()
    42 
    43                                 build_doc()
    44 
    45                                 publish()
    46                         }
    47 
    48                         // Update the build directories when exiting the node
     26                }
     27        }
     28
     29        node(Settings.Architecture.node) {
     30                //Wrap build to add timestamp to command line
     31                wrap([$class: 'TimestamperBuildWrapper']) {
    4932                        BuildDir  = pwd tmp: true
    5033                        SrcDir    = pwd tmp: false
    51                 }
    52         }
    53 
    54         //If an exception is caught we need to change the status and remember to
    55         //attach the build log to the email
    56         catch (Exception caughtError) {
    57                 // Store the result of the build log
    58                 currentBuild.result = "FAILURE"
    59 
    60                 // An error has occured, the build log is relevent
    61                 log_needed = true
    62 
    63                 // rethrow error later
    64                 err = caughtError
    65 
    66                 // print the error so it shows in the log
    67                 echo err.toString()
    68         }
    69 
    70         finally {
    71                 //Send email with final results if this is not a full build
    72                 email(log_needed)
    73 
    74                 echo 'Build Completed'
    75 
    76                 /* Must re-throw exception to propagate error */
    77                 if (err) {
    78                         throw err
    79                 }
     34                        currentBuild.description = "${currentBuild.description} on ${env.NODE_NAME}"
     35
     36                        Tools.Clean()
     37
     38                        Tools.Checkout()
     39
     40                        build()
     41
     42                        test()
     43
     44                        benchmark()
     45
     46                        build_doc()
     47
     48                        publish()
     49                }
     50        }
     51}
     52
     53//If an exception is caught we need to change the status and remember to
     54//attach the build log to the email
     55catch (Exception caughtError) {
     56        // Store the result of the build log
     57        currentBuild.result = "FAILURE"
     58
     59        // An error has occured, the build log is relevent
     60        log_needed = true
     61
     62        // rethrow error later
     63        err = caughtError
     64
     65        // print the error so it shows in the log
     66        echo err.toString()
     67}
     68
     69finally {
     70        //Send email with final results if this is not a full build
     71        email(log_needed)
     72
     73        echo 'Build Completed'
     74
     75        /* Must re-throw exception to propagate error */
     76        if (err) {
     77                throw err
    8078        }
    8179}
     
    228226//Standard build email notification
    229227def email(boolean log) {
    230         //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line
    231         //Configurations for email format
    232         echo 'Notifying users of result'
    233 
    234         def project_name = (env.JOB_NAME =~ /(.+)\/.+/)[0][1].toLowerCase()
    235         def email_subject = "[${project_name} git][BUILD# ${env.BUILD_NUMBER} - ${currentBuild.result}] - branch ${env.BRANCH_NAME}"
    236         def email_body = """<p>This is an automated email from the Jenkins build machine. It was
    237 generated because of a git hooks/post-receive script following
    238 a ref change which was pushed to the C\u2200 repository.</p>
    239 """ + Tools.GitLogMessage()
    240 
    241         def email_to = !Settings.IsSandbox ? "cforall@lists.uwaterloo.ca" : "tdelisle@uwaterloo.ca"
    242 
    243         if( Settings && !Settings.Silent ) {
    244                 //send email notification
    245                 emailext body: email_body, subject: email_subject, to: email_to, attachLog: log
    246         } else {
    247                 echo "Would send email to: ${email_to}"
    248                 echo "With title: ${email_subject}"
    249                 echo "Content: \n${email_body}"
     228        node {
     229                //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line
     230                //Configurations for email format
     231                echo 'Notifying users of result'
     232
     233                def project_name = (env.JOB_NAME =~ /(.+)\/.+/)[0][1].toLowerCase()
     234                def email_subject = "[${project_name} git][BUILD# ${env.BUILD_NUMBER} - ${currentBuild.result}] - branch ${env.BRANCH_NAME}"
     235                def email_body = """<p>This is an automated email from the Jenkins build machine. It was
     236        generated because of a git hooks/post-receive script following
     237        a ref change which was pushed to the C\u2200 repository.</p>
     238        """ + Tools.GitLogMessage()
     239
     240                def email_to = !Settings.IsSandbox ? "cforall@lists.uwaterloo.ca" : "tdelisle@uwaterloo.ca"
     241
     242                if( Settings && !Settings.Silent ) {
     243                        //send email notification
     244                        emailext body: email_body, subject: email_subject, to: email_to, attachLog: log
     245                } else {
     246                        echo "Would send email to: ${email_to}"
     247                        echo "With title: ${email_subject}"
     248                        echo "Content: \n${email_body}"
     249                }
    250250        }
    251251}
  • doc/theses/mubeen_zulfiqar_MMath/benchmarks.tex

    re8261bb r53d34343  
    3434\noindent
    3535====================
     36
     37\section Performance Matrices of Memory Allocators
     38
     39When it comes to memory allocators, there are no set standards of performance. Performance of a memory allocator depends highly on the usage pattern of the application. A memory allocator that is the best performer for a certain application X might be the worst for some other application which has completely different memory usage pattern compared to the application X. It is extremely difficult to make one universally best memory allocator which will outperform every other memory allocator for every usage pattern. So, there is a lack of a set of standard benchmarks that are used to evaluate a memory allocators's performance.
     40
     41If we breakdown the goals of a memory allocator, there are two basic matrices on which a memory allocator's performance is evaluated.
     42
     431. Memory Overhead
     442. Speed
     45
     46        /subsection Memory Overhead
     47
     48        Memory overhead is the extra memory that a memory allocator takes from OS which is not requested by the application. Ideally, an allocator should get just enough memory from OS that can fulfill application's request and should return this memory to OS as soon as applications frees it. But, allocators retain more memory compared to what application has asked for which causes memory overhead. Memory overhead can happen for various reasons.
     49
     50                /subsubsection Fragmentation
     51                Fragmentation is one of the major reasons behind memory overhead. Fragmentation happens because of situations that are either necassary for proper functioning of the allocator such as internal memory management and book-keeping or are out of allocator's control such as application's usage pattern.
     52
     53                        /subsubsubsection Internal Fragmentation
     54                        For internal book-keeping, allocators divide raw memory given by OS into chunks, blocks, or lists that can fulfill application's requested size. Allocators use memory given by OS for creating headers, footers etc. to store information about these chunks, blocks, or lists. This increases usage of memory in-addition to the memory requested by application as the allocators need to store their book-keeping information. This extra usage of memory for allocator's own book-keeping is called Internal Fragmentation. Although it cases memory overhead but this overhead is necassary for an allocator's proper funtioning.
     55
     56
     57*** Insert a figure of internal fragmentation with explanation
     58
     59                        /subsubsubsection External Fragmentation
     60                        External fragmentation is the free bits of memory between or around chunks of memory that are currently in-use of the application. Segmentation in memory due to application's usage pattern causes external fragmentation. The memory which is part of external fragmentation is completely free as it is neither used by allocator's internal book-keeping nor by the application. Ideally, an allocator should return a segment of memory back to the OS as soon as application frees it. But, this is not always the case. Allocators get memory from OS in one of the two ways.
     61
     62                        \begin{itemize}
     63                        \item
     64                        MMap: an allocator can ask OS for whole pages in mmap area. Then, the allocator segments the page internally and fulfills application's request.
     65                        \item
     66                        Heap: an allocator can ask OS for memory in heap area using system calls such as sbrk. Heap are grows downwards and shrinks upwards.
     67                        \begin{itemize}
     68
     69                        If an allocator uses mmap area, it can only return extra memory back to OS if the whole page is free i.e. no chunk on the page is in-use of the application. Even if one chunk on the whole page is currently in-use of the application, the allocator has to retain the whole page.
     70
     71                        If an allocator uses the heap area, it can only return the continous free memory at the end of the heap area that is currently in allocator's possession as heap area shrinks upwards. If there are free bits of memory in-between chunks of memory that are currently in-use of the application, the allocator can not return these free bits.
     72
     73*** Insert a figure of above scenrio with explanation
     74
     75                        Even if the entire heap area is free except one small chunk at the end of heap area that is being used by the application, the allocator cannot return the free heap area back to the OS as it is not a continous region at the end of heap area.
     76
     77*** Insert a figure of above scenrio with explanation
     78
     79                        Such scenerios cause external fragmentation but it is out of the allocator's control and depend on application's usage pattern.
     80
     81                /subsubsection Internal Memory Management
     82                Allocators such as je-malloc (FIX ME: insert reference) pro-actively get some memory from the OS and divide it into chunks of certain sizes that can be used in-future to fulfill application's request. This causes memory overhead as these chunks are made before application's request. There is also the possibility that an application may not even request memory of these sizes during their whole life-time.
     83
     84*** Insert a figure of above scenrio with explanation
     85
     86                Allocators such as rp-malloc (FIX ME: insert reference) maintain lists or blocks of sized memory segments that is freed by the application for future use. These lists are maintained without any guarantee that application will even request these sizes again.
     87
     88                Such tactics are usually used to gain speed as allocator will not have to get raw memory from OS and manage it at the time of application's request but they do cause memory overhead.
     89
     90        Fragmentation and managed sized chunks of free memory can lead to Heap Blowup as the allocator may not be able to use the fragments or sized free chunks of free memory to fulfill application's requests of other sizes.
     91
     92        /subsection Speed
     93
  • libcfa/configure.ac

    re8261bb r53d34343  
    131131#io_uring 5.5 uses enum values
    132132#io_uring 5.6 and later uses probes
     133
     134AH_TEMPLATE([CFA_HAVE_LINUX_RSEQ_H],[Defined if rseq support is present when compiling libcfathread.])
     135AC_CHECK_HEADERS([linux/rseq.h], [AC_DEFINE(CFA_HAVE_LINUX_RSEQ_H)])
     136
     137AH_TEMPLATE([CFA_HAVE_LINUX_LIBRSEQ],[Defined if librseq support is present when compiling libcfathread.])
     138AC_CHECK_LIB([rseq], [rseq_available], [AC_DEFINE(CFA_HAVE_LINUX_RSEQ_H)], [])
    133139
    134140AH_TEMPLATE([CFA_HAVE_LINUX_IO_URING_H],[Defined if io_uring support is present when compiling libcfathread.])
Note: See TracChangeset for help on using the changeset viewer.