aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Expand)AuthorFilesLines
2018-11-07Report: VPP perf, updated changes in rls and list of known issues.Tibor Frank1-48/+60
2018-11-07Report: Change version to CSIT-18.10.w45Tibor Frank1-1/+1
2018-11-07Report: Add known issues to HoneyCombTibor Frank1-3/+3
2018-11-07report: updates static content - func testsJan Gelety1-45/+43
2018-11-07Report: VPP func, updated chagnes in rls and list of known issues.Tibor Frank1-9/+18
2018-11-07CSIT-1342: Edit the static content for CSIT-1810 reportTibor Frank16-1423/+1443
2018-11-07report: added logical diagram to vpp_device environment.Maciek Konstantynowicz1-0/+1159
2018-11-07report: test methodology updated with new bits and bites in 18.10.Maciek Konstantynowicz3-26/+60
2018-11-07Temporarily remove Ligato testsTibor Frank5-6/+2
2018-11-07CSIT-1350: Add new data to 1810 reportTibor Frank2-61/+135
2018-11-06CSIT-1350: Add new data to 1810 reportTibor Frank5-148/+238
2018-11-06CSIT-1342: Edit the static content for CSIT-1810 reportTibor Frank1-5/+6
2018-11-05Update of VPP_STABLE_VERJan Gelety2-2/+2
2018-11-05Fix: Calculation of max value.Tibor Frank1-1/+5
2018-11-05CSIT-1342: Edit the static content for CSIT-1810 reportTibor Frank3-33/+8
2018-11-05CSIT-1342: Edit the static content for CSIT-1810 reportTibor Frank15-75/+158
2018-11-05CSIT-1342: Edit the static content for CSIT-1810 reportTibor Frank28-16/+108
2018-11-05CSIT-1350: Add new data to 1810 reportTibor Frank1-48/+51
2018-11-05Fix: Speedup Multi-Core throughput graphsTibor Frank1-5/+1
2018-11-05CSIT-1342: Edit the static content for CSIT-1810 reportTibor Frank11-24/+23
2018-11-05Static content for vpp_device sectionsPeter Mikus17-46/+133
2018-11-03CSIT-1350: Add new data to 1810 reportTibor Frank1-29/+28
2018-11-01CSIT-1349: Add VPP-device tests to reportTibor Frank5-7/+186
2018-11-01Report: Report historyTibor Frank1-7/+0
2018-10-31Change the versionTibor Frank1-1/+1
2018-10-31CSIT-1350: Add new data to 1810 reportTibor Frank1-450/+341
2018-10-31Report-1810: ConfigurationTibor Frank3-14/+14
2018-10-31CSIT-1332: Proposal of new layout of all graphsTibor Frank54-2999/+29743
2018-10-29Update of VPP_STABLE_VERJan Gelety2-2/+2
2018-10-29FIX: put base interafce up when creating VLAN sub-interfaceJan Gelety1-4/+16
2018-10-25FIX: show ip table in tear donw only when test failedJan Gelety1-6/+4
2018-10-25CSIT-1339 Create initial l2xc testPeter Mikus4-6/+159
2018-10-24Migration of DMM-CSIT scripts to DMM reposharath9-325/+186
2018-10-24Remove usage of vpp-ext-deps packageJan Gelety7-21/+3
2018-10-24Add Meltdown and Spectre checker outputPeter Mikus4-0/+258
2018-10-24CSIT-1260 Create initial version of bootstrap including VF reservationPeter Mikus7-16/+872
2018-10-23Initial version of PLRsearch ietf draft in kramdown-rfc2629 format.Maciek Konstantynowicz1-0/+228
2018-10-23Initial version of mlrsearch ietf draft in kramdown-rfc2629 format.Maciek Konstantynowicz1-0/+360
2018-10-23CSIT-1255 1-Node VPP_Device DocumentationPeter Mikus4-0/+674
2018-10-22Per patch: multiple BMRR callsVratko Polak4-107/+167
2018-10-19FIX: Correct the packagecloud.io URL pathPeter Mikus5-1/+7
2018-10-20update l2bdbasemaclrn-mrr and l2bdbasemaclrn-ndrpdr for x553 NICYulong Pei2-2/+2
2018-10-17Script for PXE host stagingPeter Mikus5-34/+258
2018-10-17Update of VPP_STABLE_VER and DPDK_STABLE_VERPeter Mikus3-3/+3
2018-10-17FIX: Switch crypto tests to vfio-pciPeter Mikus1-1/+1
2018-10-16CSIT-1338 FIX: Failed to get VPP version on hostPeter Mikus1-7/+26
2018-10-12Tag l2bdscale as L2BDSCALE, not L2BDBASEVratko Polak24-24/+24
2018-10-10FIX: Vhost interface UP issue for VTS testsPeter Mikus1-1/+0
2018-10-10CSIT-1297: Modify the bootstrap.sh to run only selected mrr suitesTibor Frank11-17/+22
2018-10-10Fix authorization for ODL fluorine testsMichal Cmarada1-1/+1
s="n">string_table; uword *string_table_hash; u8 *string_table_tmp; /** Vector of tracks. */ elog_track_t *tracks; /** Default track. */ elog_track_t default_track; /** Place holder for CPU clock frequency. */ clib_time_t cpu_timer; /** Timestamps */ elog_time_stamp_t init_time, serialize_time; /** SMP lock, non-zero means locking required */ uword *lock; /** Use serialize_time and init_time to give estimate for cpu clock frequency. */ f64 nsec_per_cpu_clock; /** Vector of events converted to generic form after collection. */ elog_event_t *events; } elog_main_t; /** @brief Return number of events in the event-log buffer @param em elog_main_t * @return number of events in the buffer */ always_inline uword elog_n_events_in_buffer (elog_main_t * em) { return clib_min (em->n_total_events, em->event_ring_size); } /** @brief Return number of events which can fit in the event buffer @param em elog_main_t * @return number of events which can fit in the buffer */ always_inline uword elog_buffer_capacity (elog_main_t * em) { return em->event_ring_size; } /** @brief Reset the event buffer @param em elog_main_t * */ always_inline void elog_reset_buffer (elog_main_t * em) { em->n_total_events = 0; em->n_total_events_disable_limit = ~0; } /** @brief Enable or disable event logging @param em elog_main_t * */ always_inline void elog_enable_disable (elog_main_t * em, int is_enabled) { em->n_total_events = 0; em->n_total_events_disable_limit = is_enabled ? ~0 : 0; } /** @brief disable logging after specified number of ievents have been logged. This is used as a "debug trigger" when a certain event has occurred. Events will be logged both before and after the "event" but the event will not be lost as long as N < RING_SIZE. @param em elog_main_t * @param n uword number of events before disabling event logging */ always_inline void elog_disable_after_events (elog_main_t * em, uword n) { em->n_total_events_disable_limit = em->n_total_events + n; } /* @brief mid-buffer logic-analyzer trigger Currently, only midpoint triggering is supported, but it's pretty obvious how to generalize the scheme. @param em elog_main_t * */ always_inline void elog_disable_trigger (elog_main_t * em) { em->n_total_events_disable_limit = em->n_total_events + vec_len (em->event_ring) / 2; } /** @brief register an event type @param em elog_main_t * @param t elog_event_type_t * event to register @return type index @warning Typically not called directly */ word elog_event_type_register (elog_main_t * em, elog_event_type_t * t); /** @brief register an event track @param em elog_main_t * @param t elog_track_t * track to register @return track index @note this function is often called directly */ word elog_track_register (elog_main_t * em, elog_track_t * t); /** @brief event logging enabled predicate @param em elog_main_t * @return 1 if enabled, 0 if not enabled */ always_inline uword elog_is_enabled (elog_main_t * em) { return em->n_total_events < em->n_total_events_disable_limit; } /** @brief Allocate an event to be filled in by the caller Not normally called directly; this function underlies the ELOG_DATA and ELOG_TRACK_DATA macros @param em elog_main_t * @param type elog_event_type_t * type @param track elog_track_t * track @param cpu_time u64 current cpu tick value @returns event to be filled in */ always_inline void * elog_event_data_inline (elog_main_t * em, elog_event_type_t * type, elog_track_t * track, u64 cpu_time) { elog_event_t *e; uword ei; word type_index, track_index; /* Return the user dummy memory to scribble data into. */ if (PREDICT_FALSE (!elog_is_enabled (em))) return em->dummy_event.data; type_index = (word) type->type_index_plus_one - 1; track_index = (word) track->track_index_plus_one - 1; if (PREDICT_FALSE ((type_index | track_index) < 0)) { if (type_index < 0) type_index = elog_event_type_register (em, type); if (track_index < 0) track_index = elog_track_register (em, track); } ASSERT (track_index < vec_len (em->tracks)); ASSERT (is_pow2 (vec_len (em->event_ring))); if (em->lock) ei = clib_atomic_fetch_add (&em->n_total_events, 1); else ei = em->n_total_events++; ei &= em->event_ring_size - 1; e = vec_elt_at_index (em->event_ring, ei); e->time_cycles = cpu_time; e->type = type_index; e->track = track_index; /* Return user data for caller to fill in. */ return e->data; } /* External version of inline. */ void *elog_event_data (elog_main_t * em, elog_event_type_t * type, elog_track_t * track, u64 cpu_time); /** @brief Allocate an event to be filled in by the caller, non-inline Not normally called directly; this function underlies the ELOG_DATA and ELOG_TRACK_DATA macros @param em elog_main_t * @param type elog_event_type_t * type @param track elog_track_t * track @param cpu_time u64 current cpu tick value @returns event to be filled in */ always_inline void * elog_event_data_not_inline (elog_main_t * em, elog_event_type_t * type, elog_track_t * track, u64 cpu_time) { /* Return the user dummy memory to scribble data into. */ if (PREDICT_FALSE (!elog_is_enabled (em))) return em->dummy_event.data; return elog_event_data (em, type, track, cpu_time); } /** @brief Log a single-datum event @param em elog_main_t * @param type elog_event_type_t * type @param data u32 single datum to capture */ always_inline void elog (elog_main_t * em, elog_event_type_t * type, u32 data) { u32 *d = elog_event_data_not_inline (em, type, &em->default_track, clib_cpu_time_now ()); d[0] = data; } /** @brief Log a single-datum event, inline version @param em elog_main_t * @param type elog_event_type_t * type @param data u32 single datum to capture */ always_inline void elog_inline (elog_main_t * em, elog_event_type_t * type, u32 data) { u32 *d = elog_event_data_inline (em, type, &em->default_track, clib_cpu_time_now ()); d[0] = data; } /** @brief Log a single-datum event to a specific track, non-inline version @param em elog_main_t * @param type elog_event_type_t * type @param type elog_event_track_t * track @param data u32 single datum to capture */ always_inline void elog_track (elog_main_t * em, elog_event_type_t * type, elog_track_t * track, u32 data) { u32 *d = elog_event_data_not_inline (em, type, track, clib_cpu_time_now ()); d[0] = data; } /** @brief Log a single-datum event to a specific track @param em elog_main_t * @param type elog_event_type_t * type @param type elog_event_track_t * track @param data u32 single datum to capture */ always_inline void elog_track_inline (elog_main_t * em, elog_event_type_t * type, elog_track_t * track, u32 data) { u32 *d = elog_event_data_inline (em, type, track, clib_cpu_time_now ()); d[0] = data; } always_inline void * elog_data (elog_main_t * em, elog_event_type_t * type, elog_track_t * track) { return elog_event_data_not_inline (em, type, track, clib_cpu_time_now ()); } always_inline void * elog_data_inline (elog_main_t * em, elog_event_type_t * type, elog_track_t * track) { return elog_event_data_inline (em, type, track, clib_cpu_time_now ()); } /* Macro shorthands for generating/declaring events. */ #define __ELOG_TYPE_VAR(f) f #define __ELOG_TRACK_VAR(f) f #define ELOG_TYPE_DECLARE(f) static elog_event_type_t __ELOG_TYPE_VAR(f) #define ELOG_TYPE_INIT_FORMAT_AND_FUNCTION(fmt,func) \ { .format = fmt, .function = func, } #define ELOG_TYPE_INIT(fmt) \ ELOG_TYPE_INIT_FORMAT_AND_FUNCTION(fmt,(char *) __FUNCTION__) #define ELOG_TYPE_DECLARE_HELPER(f,fmt,func) \ static elog_event_type_t __ELOG_TYPE_VAR(f) = \ ELOG_TYPE_INIT_FORMAT_AND_FUNCTION (fmt, func) #define ELOG_TYPE_DECLARE_FORMAT_AND_FUNCTION(f,fmt) \ ELOG_TYPE_DECLARE_HELPER (f, fmt, (char *) __FUNCTION__) #define ELOG_TYPE_DECLARE_FORMAT(f,fmt) \ ELOG_TYPE_DECLARE_HELPER (f, fmt, 0) /* Shorthands with and without __FUNCTION__. D for decimal; X for hex. F for __FUNCTION__. */ #define ELOG_TYPE(f,fmt) ELOG_TYPE_DECLARE_FORMAT_AND_FUNCTION(f,fmt) #define ELOG_TYPE_D(f) ELOG_TYPE_DECLARE_FORMAT (f, #f " %d") #define ELOG_TYPE_X(f) ELOG_TYPE_DECLARE_FORMAT (f, #f " 0x%x") #define ELOG_TYPE_DF(f) ELOG_TYPE_DECLARE_FORMAT_AND_FUNCTION (f, #f " %d") #define ELOG_TYPE_XF(f) ELOG_TYPE_DECLARE_FORMAT_AND_FUNCTION (f, #f " 0x%x") #define ELOG_TYPE_FD(f) ELOG_TYPE_DECLARE_FORMAT_AND_FUNCTION (f, #f " %d") #define ELOG_TYPE_FX(f) ELOG_TYPE_DECLARE_FORMAT_AND_FUNCTION (f, #f " 0x%x") #define ELOG_TRACK_DECLARE(f) static elog_track_t __ELOG_TRACK_VAR(f) #define ELOG_TRACK(f) ELOG_TRACK_DECLARE(f) = { .name = #f, } /* Log 32 bits of data. */ #define ELOG(em,f,data) elog ((em), &__ELOG_TYPE_VAR(f), data) #define ELOG_INLINE(em,f,data) elog_inline ((em), &__ELOG_TYPE_VAR(f), data) /* Return data pointer to fill in. */ #define ELOG_TRACK_DATA(em,f,track) \ elog_data ((em), &__ELOG_TYPE_VAR(f), &__ELOG_TRACK_VAR(track)) #define ELOG_TRACK_DATA_INLINE(em,f,track) \ elog_data_inline ((em), &__ELOG_TYPE_VAR(f), &__ELOG_TRACK_VAR(track)) /* Shorthand with default track. */ #define ELOG_DATA(em,f) elog_data ((em), &__ELOG_TYPE_VAR (f), &(em)->default_track) #define ELOG_DATA_INLINE(em,f) elog_data_inline ((em), &__ELOG_TYPE_VAR (f), &(em)->default_track) /** @brief add a string to the event-log string table Often combined with hashing and the T4 elog format specifier to display complex strings in offline tooling @param em elog_main_t * @param format char * @param VARARGS @return u32 index to add to event log */ u32 elog_string (elog_main_t * em, char *format, ...); void elog_time_now (elog_time_stamp_t * et); /** @brief convert event ring events to events, and return them as a vector. @param em elog_main_t * @return event vector with timestamps in f64 seconds @note sets em->events to resulting vector. */ elog_event_t *elog_get_events (elog_main_t * em); /** @brief convert event ring events to events, and return them as a vector. @param em elog_main_t * @return event vector with timestamps in f64 seconds @note no side effects */ elog_event_t *elog_peek_events (elog_main_t * em); /* Merge two logs, add supplied track tags. */ void elog_merge (elog_main_t * dst, u8 * dst_tag, elog_main_t * src, u8 * src_tag, f64 align_tweak); /* 2 arguments elog_main_t and elog_event_t to format event or track name. */ u8 *format_elog_event (u8 * s, va_list * va); u8 *format_elog_track_name (u8 * s, va_list * va); u8 *format_elog_track (u8 * s, va_list * args); void serialize_elog_main (serialize_main_t * m, va_list * va); void unserialize_elog_main (serialize_main_t * m, va_list * va); void elog_init (elog_main_t * em, u32 n_events); void elog_alloc (elog_main_t * em, u32 n_events); #ifdef CLIB_UNIX always_inline clib_error_t * elog_write_file (elog_main_t * em, char *clib_file, int flush_ring) { serialize_main_t m; clib_error_t *error; error = serialize_open_clib_file (&m, clib_file); if (error) return error; error = serialize (&m, serialize_elog_main, em, flush_ring); if (!error) serialize_close (&m); return error; } always_inline clib_error_t * elog_read_file (elog_main_t * em, char *clib_file) { serialize_main_t m; clib_error_t *error; error = unserialize_open_clib_file (&m, clib_file); if (error) return error; error = unserialize (&m, unserialize_elog_main, em); if (!error) unserialize_close (&m); return error; } #endif /* CLIB_UNIX */ #endif /* included_clib_elog_h */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */