@@ -74,6 +74,7 @@ External links:
74
74
#include <string.h>
75
75
#include <stdio.h> // printf
76
76
#include <inttypes.h> // PRIxPTR
77
+ #include "tracy/TracyC.h"
77
78
78
79
#include "julia.h"
79
80
#include "julia_internal.h"
@@ -2708,13 +2709,15 @@ JL_DLLEXPORT void jl_set_sysimg_so(void *handle)
2708
2709
// }
2709
2710
#endif
2710
2711
2712
+ // TODO: Fully instrument
2711
2713
static void jl_restore_system_image_from_stream_ (ios_t * f , jl_image_t * image , jl_array_t * depmods , uint64_t checksum ,
2712
2714
/* outputs */ jl_array_t * * restored , jl_array_t * * init_order ,
2713
2715
jl_array_t * * extext_methods ,
2714
2716
jl_array_t * * new_specializations , jl_array_t * * method_roots_list ,
2715
2717
jl_array_t * * ext_targets , jl_array_t * * edges ,
2716
2718
char * * base , arraylist_t * ccallable_list , pkgcachesizes * cachesizes ) JL_GC_DISABLED
2717
2719
{
2720
+ TracyCZoneN (ctx , "jl_restore_package_image_from_stream_" , true);
2718
2721
JL_TIMING (SYSIMG_LOAD );
2719
2722
int en = jl_gc_enable (0 );
2720
2723
ios_t sysimg , const_data , symbols , relocs , gvar_record , fptr_record ;
@@ -3236,6 +3239,7 @@ static void jl_restore_system_image_from_stream_(ios_t *f, jl_image_t *image, jl
3236
3239
uint64_t * build_id_data = (uint64_t * )jl_array_data (jl_build_ids );
3237
3240
build_id_data [jl_array_len (jl_build_ids )- 1 ] = buildid ;
3238
3241
jl_gc_enable (en );
3242
+ TracyCZoneEnd (ctx );
3239
3243
}
3240
3244
3241
3245
static jl_value_t * jl_validate_cache_file (ios_t * f , jl_array_t * depmods , uint64_t * checksum , int64_t * dataendpos , int64_t * datastartpos )
@@ -3267,6 +3271,7 @@ static jl_value_t *jl_validate_cache_file(ios_t *f, jl_array_t *depmods, uint64_
3267
3271
// TODO?: refactor to make it easier to create the "package inspector"
3268
3272
static jl_value_t * jl_restore_package_image_from_stream (ios_t * f , jl_image_t * image , jl_array_t * depmods , int complete )
3269
3273
{
3274
+ TracyCZoneN (ctx , "jl_restore_package_image_from_stream" , true);
3270
3275
uint64_t checksum = 0 ;
3271
3276
int64_t dataendpos = 0 ;
3272
3277
int64_t datastartpos = 0 ;
@@ -3288,9 +3293,21 @@ static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *im
3288
3293
ios_bufmode (f , bm_none );
3289
3294
JL_SIGATOMIC_BEGIN ();
3290
3295
size_t len = dataendpos - datastartpos ;
3296
+
3297
+ TracyCZoneN (ctx_gc , "jl_gc_perm_alloc" , true);
3291
3298
char * sysimg = (char * )jl_gc_perm_alloc (len , 0 , 64 , 0 );
3299
+ TracyCZoneEnd (ctx_gc );
3300
+
3292
3301
ios_seek (f , datastartpos );
3293
- if (ios_readall (f , sysimg , len ) != len || jl_crc32c (0 , sysimg , len ) != (uint32_t )checksum ) {
3302
+ TracyCZoneN (ctx_ios , "ios_readall" , true);
3303
+ bool err_reading = ios_readall (f , sysimg , len ) != len ;
3304
+ TracyCZoneEnd (ctx_ios );
3305
+ {
3306
+ TracyCZoneN (ctx_crc , "jl_crc32c" , true);
3307
+ err_reading = err_reading || jl_crc32c (0 , sysimg , len ) != (uint32_t )checksum ;
3308
+ TracyCZoneEnd (ctx_crc );
3309
+ }
3310
+ if (err_reading ) {
3294
3311
restored = jl_get_exceptionf (jl_errorexception_type , "Error reading system image file." );
3295
3312
JL_SIGATOMIC_END ();
3296
3313
}
@@ -3303,16 +3320,36 @@ static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *im
3303
3320
JL_SIGATOMIC_END ();
3304
3321
3305
3322
// Insert method extensions
3306
- jl_insert_methods (extext_methods );
3323
+ {
3324
+ TracyCZoneN (ctx2 , "jl_insert_methods" , true);
3325
+ TracyCZoneValue (ctx2 , jl_array_len (extext_methods ));
3326
+ jl_insert_methods (extext_methods );
3327
+ TracyCZoneEnd (ctx2 );
3328
+ }
3307
3329
// No special processing of `new_specializations` is required because recaching handled it
3308
3330
// Add roots to methods
3309
- jl_copy_roots (method_roots_list , jl_worklist_key ((jl_array_t * )restored ));
3331
+ {
3332
+ TracyCZoneN (ctx2 , "jl_copy_roots" , true);
3333
+ jl_copy_roots (method_roots_list , jl_worklist_key ((jl_array_t * )restored ));
3334
+ TracyCZoneEnd (ctx2 );
3335
+ }
3310
3336
// Handle edges
3311
- jl_insert_backedges ((jl_array_t * )edges , (jl_array_t * )ext_targets , (jl_array_t * )new_specializations ); // restore external backedges (needs to be last)
3337
+ {
3338
+ // TracyC: traced internally
3339
+ jl_insert_backedges ((jl_array_t * )edges , (jl_array_t * )ext_targets , (jl_array_t * )new_specializations ); // restore external backedges (needs to be last)
3340
+ }
3312
3341
// check new CodeInstances and validate any that lack external backedges
3313
- validate_new_code_instances ();
3342
+ {
3343
+ TracyCZoneN (ctx2 , "validate_new_code_instances" , true);
3344
+ validate_new_code_instances ();
3345
+ TracyCZoneEnd (ctx2 );
3346
+ }
3314
3347
// reinit ccallables
3315
- jl_reinit_ccallable (& ccallable_list , base , NULL );
3348
+ {
3349
+ TracyCZoneN (ctx2 , "jl_reinit_ccallable" , true);
3350
+ jl_reinit_ccallable (& ccallable_list , base , NULL );
3351
+ TracyCZoneEnd (ctx2 );
3352
+ }
3316
3353
arraylist_free (& ccallable_list );
3317
3354
htable_free (& new_code_instance_validate );
3318
3355
if (complete ) {
@@ -3332,6 +3369,7 @@ static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *im
3332
3369
}
3333
3370
3334
3371
JL_GC_POP ();
3372
+ TracyCZoneEnd (ctx );
3335
3373
return restored ;
3336
3374
}
3337
3375
@@ -3352,14 +3390,20 @@ JL_DLLEXPORT jl_value_t *jl_restore_incremental_from_buf(const char *buf, jl_ima
3352
3390
3353
3391
JL_DLLEXPORT jl_value_t * jl_restore_incremental (const char * fname , jl_array_t * depmods , int complete )
3354
3392
{
3393
+ TracyCZoneN (ctx , "jl_restore_incremental" , true);
3394
+ TracyCZoneText (ctx , fname , strlen (fname ));
3395
+
3355
3396
ios_t f ;
3356
3397
if (ios_file (& f , fname , 1 , 0 , 0 , 0 ) == NULL ) {
3398
+ TracyCZoneEnd (ctx );
3357
3399
return jl_get_exceptionf (jl_errorexception_type ,
3358
3400
"Cache file \"%s\" not found.\n" , fname );
3359
3401
}
3360
3402
jl_image_t pkgimage = {};
3361
3403
jl_value_t * ret = jl_restore_package_image_from_stream (& f , & pkgimage , depmods , complete );
3362
3404
ios_close (& f );
3405
+
3406
+ TracyCZoneEnd (ctx );
3363
3407
return ret ;
3364
3408
}
3365
3409
@@ -3408,7 +3452,12 @@ JL_DLLEXPORT void jl_restore_system_image_data(const char *buf, size_t len)
3408
3452
3409
3453
JL_DLLEXPORT jl_value_t * jl_restore_package_image_from_file (const char * fname , jl_array_t * depmods , int complete )
3410
3454
{
3455
+ TracyCZoneN (ctx , "jl_restore_package_image_from_file" , true);
3456
+ TracyCZoneText (ctx , fname , strlen (fname ));
3457
+
3458
+ TracyCZoneN (ctx2 , "jl_dlopen" , true);
3411
3459
void * pkgimg_handle = jl_dlopen (fname , JL_RTLD_LAZY );
3460
+ TracyCZoneEnd (ctx2 );
3412
3461
if (!pkgimg_handle ) {
3413
3462
#ifdef _OS_WINDOWS_
3414
3463
int err ;
@@ -3421,45 +3470,83 @@ JL_DLLEXPORT jl_value_t *jl_restore_package_image_from_file(const char *fname, j
3421
3470
jl_errorf ("Error opening package file %s: %s\n" , fname , reason );
3422
3471
}
3423
3472
const char * pkgimg_data ;
3424
- jl_dlsym (pkgimg_handle , "jl_system_image_data" , (void * * )& pkgimg_data , 1 );
3473
+ {
3474
+ TracyCZoneN (ctx3 , "jl_dlsym" , true);
3475
+ jl_dlsym (pkgimg_handle , "jl_system_image_data" , (void * * )& pkgimg_data , 1 );
3476
+ TracyCZoneEnd (ctx3 );
3477
+ }
3425
3478
size_t * plen ;
3426
- jl_dlsym (pkgimg_handle , "jl_system_image_size" , (void * * )& plen , 1 );
3479
+ {
3480
+ TracyCZoneN (ctx3 , "jl_dlsym" , true);
3481
+ jl_dlsym (pkgimg_handle , "jl_system_image_size" , (void * * )& plen , 1 );
3482
+ TracyCZoneEnd (ctx3 );
3483
+ }
3427
3484
3428
3485
jl_image_t pkgimage ;
3486
+ TracyCZoneN (ctx4 , "jl_init_processor_pkgimg" , true);
3429
3487
pkgimage .fptrs = jl_init_processor_pkgimg (pkgimg_handle );
3430
- if (!jl_dlsym (pkgimg_handle , "jl_sysimg_gvars_base" , (void * * )& pkgimage .gvars_base , 0 )) {
3431
- pkgimage .gvars_base = NULL ;
3488
+ TracyCZoneEnd (ctx4 );
3489
+ {
3490
+ TracyCZoneN (ctx3 , "jl_dlsym" , true);
3491
+ if (!jl_dlsym (pkgimg_handle , "jl_sysimg_gvars_base" , (void * * )& pkgimage .gvars_base , 0 )) {
3492
+ pkgimage .gvars_base = NULL ;
3493
+ }
3494
+ TracyCZoneEnd (ctx3 );
3432
3495
}
3433
3496
3434
- jl_dlsym (pkgimg_handle , "jl_sysimg_gvars_offsets" , (void * * )& pkgimage .gvars_offsets , 1 );
3497
+ {
3498
+ TracyCZoneN (ctx3 , "jl_dlsym" , true);
3499
+ jl_dlsym (pkgimg_handle , "jl_sysimg_gvars_offsets" , (void * * )& pkgimage .gvars_offsets , 1 );
3500
+ TracyCZoneEnd (ctx3 );
3501
+ }
3435
3502
pkgimage .gvars_offsets += 1 ;
3436
3503
3437
3504
void * pgcstack_func_slot ;
3438
- jl_dlsym (pkgimg_handle , "jl_pgcstack_func_slot" , & pgcstack_func_slot , 0 );
3505
+ {
3506
+ TracyCZoneN (ctx3 , "jl_dlsym" , true);
3507
+ jl_dlsym (pkgimg_handle , "jl_pgcstack_func_slot" , & pgcstack_func_slot , 0 );
3508
+ TracyCZoneEnd (ctx3 );
3509
+ }
3439
3510
if (pgcstack_func_slot ) { // Empty package images might miss these
3440
3511
void * pgcstack_key_slot ;
3441
- jl_dlsym (pkgimg_handle , "jl_pgcstack_key_slot" , & pgcstack_key_slot , 1 );
3512
+ {
3513
+ TracyCZoneN (ctx3 , "jl_dlsym" , true);
3514
+ jl_dlsym (pkgimg_handle , "jl_pgcstack_key_slot" , & pgcstack_key_slot , 1 );
3515
+ TracyCZoneEnd (ctx3 );
3516
+ }
3442
3517
jl_pgcstack_getkey ((jl_get_pgcstack_func * * )pgcstack_func_slot , (jl_pgcstack_key_t * )pgcstack_key_slot );
3443
3518
3444
3519
size_t * tls_offset_idx ;
3445
- jl_dlsym (pkgimg_handle , "jl_tls_offset" , (void * * )& tls_offset_idx , 1 );
3520
+ {
3521
+ TracyCZoneN (ctx3 , "jl_dlsym" , true);
3522
+ jl_dlsym (pkgimg_handle , "jl_tls_offset" , (void * * )& tls_offset_idx , 1 );
3523
+ TracyCZoneEnd (ctx3 );
3524
+ }
3446
3525
* tls_offset_idx = (uintptr_t )(jl_tls_offset == -1 ? 0 : jl_tls_offset );
3447
3526
}
3448
3527
3449
3528
#ifdef _OS_WINDOWS_
3450
3529
pkgimage .base = (intptr_t )pkgimg_handle ;
3451
3530
#else
3452
3531
Dl_info dlinfo ;
3453
- if (dladdr ((void * )pkgimage .gvars_base , & dlinfo ) != 0 ) {
3454
- pkgimage .base = (intptr_t )dlinfo .dli_fbase ;
3455
- }
3456
- else {
3457
- pkgimage .base = 0 ;
3532
+ {
3533
+ TracyCZoneN (ctx3 , "dladdr" , true);
3534
+ if (dladdr ((void * )pkgimage .gvars_base , & dlinfo ) != 0 ) {
3535
+ pkgimage .base = (intptr_t )dlinfo .dli_fbase ;
3536
+ }
3537
+ else {
3538
+ pkgimage .base = 0 ;
3539
+ }
3540
+ TracyCZoneEnd (ctx3 );
3458
3541
}
3459
3542
#endif
3460
3543
3461
- jl_value_t * mod = jl_restore_incremental_from_buf (pkgimg_data , & pkgimage , * plen , depmods , complete );
3462
-
3544
+ jl_value_t * mod ;
3545
+ {
3546
+ JL_TIMING (PKG_LOADING );
3547
+ mod = jl_restore_incremental_from_buf (pkgimg_data , & pkgimage , * plen , depmods , complete );
3548
+ }
3549
+ TracyCZoneEnd (ctx );
3463
3550
return mod ;
3464
3551
}
3465
3552
0 commit comments