LCOV - code coverage report
Current view: top level - spdk/lib/ftl - ftl_trace.c (source / functions) Hit Total Coverage
Test: Combined Lines: 96 125 76.8 %
Date: 2024-08-13 00:13:26 Functions: 8 10 80.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 94 164 57.3 %

           Branch data     Line data    Source code
       1                 :            : /*   SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  *   Copyright (C) 2018 Intel Corporation.
       3                 :            :  *   All rights reserved.
       4                 :            :  */
       5                 :            : 
       6                 :            : #include "spdk/trace.h"
       7                 :            : #include "spdk_internal/trace_defs.h"
       8                 :            : 
       9                 :            : #include "ftl_core.h"
      10                 :            : #include "ftl_trace.h"
      11                 :            : #include "ftl_io.h"
      12                 :            : #include "ftl_band.h"
      13                 :            : 
      14                 :            : #if defined(DEBUG)
      15                 :            : 
      16                 :            : enum ftl_trace_source {
      17                 :            :         FTL_TRACE_SOURCE_INTERNAL,
      18                 :            :         FTL_TRACE_SOURCE_USER,
      19                 :            :         FTL_TRACE_SOURCE_MAX,
      20                 :            : };
      21                 :            : 
      22                 :            : #define FTL_TPOINT_ID(id, src) SPDK_TPOINT_ID(TRACE_GROUP_FTL, (((id) << 1) | (!!(src))))
      23                 :            : 
      24                 :            : #define FTL_TRACE_BAND_RELOC(src)               FTL_TPOINT_ID(0, src)
      25                 :            : #define FTL_TRACE_BAND_WRITE(src)               FTL_TPOINT_ID(1, src)
      26                 :            : #define FTL_TRACE_LIMITS(src)                   FTL_TPOINT_ID(2, src)
      27                 :            : #define FTL_TRACE_WBUF_POP(src)                 FTL_TPOINT_ID(3, src)
      28                 :            : 
      29                 :            : #define FTL_TRACE_READ_SCHEDULE(src)            FTL_TPOINT_ID(4, src)
      30                 :            : #define FTL_TRACE_READ_SUBMISSION(src)          FTL_TPOINT_ID(5, src)
      31                 :            : #define FTL_TRACE_READ_COMPLETION_INVALID(src)  FTL_TPOINT_ID(6, src)
      32                 :            : #define FTL_TRACE_READ_COMPLETION_CACHE(src)    FTL_TPOINT_ID(7, src)
      33                 :            : #define FTL_TRACE_READ_COMPLETION_DISK(src)     FTL_TPOINT_ID(8, src)
      34                 :            : 
      35                 :            : #define FTL_TRACE_MD_READ_SCHEDULE(src)         FTL_TPOINT_ID(9,  src)
      36                 :            : #define FTL_TRACE_MD_READ_SUBMISSION(src)       FTL_TPOINT_ID(10, src)
      37                 :            : #define FTL_TRACE_MD_READ_COMPLETION(src)       FTL_TPOINT_ID(11, src)
      38                 :            : 
      39                 :            : #define FTL_TRACE_WRITE_SCHEDULE(src)           FTL_TPOINT_ID(12, src)
      40                 :            : #define FTL_TRACE_WRITE_WBUF_FILL(src)          FTL_TPOINT_ID(13, src)
      41                 :            : #define FTL_TRACE_WRITE_SUBMISSION(src)         FTL_TPOINT_ID(14, src)
      42                 :            : #define FTL_TRACE_WRITE_COMPLETION(src)         FTL_TPOINT_ID(15, src)
      43                 :            : 
      44                 :            : #define FTL_TRACE_MD_WRITE_SCHEDULE(src)        FTL_TPOINT_ID(16, src)
      45                 :            : #define FTL_TRACE_MD_WRITE_SUBMISSION(src)      FTL_TPOINT_ID(17, src)
      46                 :            : #define FTL_TRACE_MD_WRITE_COMPLETION(src)      FTL_TPOINT_ID(18, src)
      47                 :            : 
      48                 :            : #define FTL_TRACE_TRIM_SCHEDULE(src)            FTL_TPOINT_ID(19, src)
      49                 :            : #define FTL_TRACE_TRIM_SUBMISSION(src)          FTL_TPOINT_ID(20, src)
      50                 :            : #define FTL_TRACE_TRIM_COMPLETION(src)          FTL_TPOINT_ID(21, src)
      51                 :            : 
      52                 :       3831 : SPDK_TRACE_REGISTER_FN(ftl_trace_func, "ftl", TRACE_GROUP_FTL)
      53                 :            : {
      54                 :       1837 :         const char source[] = { 'i', 'u' };
      55                 :        797 :         char descbuf[128];
      56                 :            :         int i;
      57                 :            : 
      58                 :       1837 :         spdk_trace_register_owner_type(OWNER_TYPE_FTL, 'f');
      59                 :            : 
      60         [ +  + ]:       5511 :         for (i = 0; i < FTL_TRACE_SOURCE_MAX; ++i) {
      61         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "band_reloc");
      62         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_BAND_RELOC(i), OWNER_TYPE_FTL, OBJECT_NONE, 0, 0,
      63                 :            :                                                 "band: ");
      64         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "band_write");
      65         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_BAND_WRITE(i), OWNER_TYPE_FTL, OBJECT_NONE, 0, 0,
      66                 :            :                                                 "band: ");
      67         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "limits");
      68         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_LIMITS(i), OWNER_TYPE_FTL, OBJECT_NONE, 0, 0,
      69                 :            :                                                 "limits: ");
      70         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "rwb_pop");
      71         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_WBUF_POP(i), OWNER_TYPE_FTL, OBJECT_NONE, 0, 0,
      72                 :            :                                                 "lba: ");
      73                 :            : 
      74         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "md_read_sched");
      75         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_MD_READ_SCHEDULE(i), OWNER_TYPE_FTL,
      76                 :            :                                                 OBJECT_NONE, 0, 0, "addr: ");
      77         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "md_read_submit");
      78         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_MD_READ_SUBMISSION(i), OWNER_TYPE_FTL,
      79                 :            :                                                 OBJECT_NONE, 0, 0, "addr: ");
      80         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "md_read_cmpl");
      81         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_MD_READ_COMPLETION(i), OWNER_TYPE_FTL,
      82                 :            :                                                 OBJECT_NONE, 0, 0, "lba: ");
      83                 :            : 
      84         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "md_write_sched");
      85         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_MD_WRITE_SCHEDULE(i), OWNER_TYPE_FTL,
      86                 :            :                                                 OBJECT_NONE, 0, 0, "addr: ");
      87         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "md_write_submit");
      88         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_MD_WRITE_SUBMISSION(i), OWNER_TYPE_FTL,
      89                 :            :                                                 OBJECT_NONE, 0, 0, "addr: ");
      90         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "md_write_cmpl");
      91         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_MD_WRITE_COMPLETION(i), OWNER_TYPE_FTL,
      92                 :            :                                                 OBJECT_NONE, 0, 0, "lba: ");
      93                 :            : 
      94         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "read_sched");
      95         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_READ_SCHEDULE(i), OWNER_TYPE_FTL,
      96                 :            :                                                 OBJECT_NONE, 0, 0, "lba: ");
      97         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "read_submit");
      98         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_READ_SUBMISSION(i), OWNER_TYPE_FTL,
      99                 :            :                                                 OBJECT_NONE, 0, 0, "addr: ");
     100         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "read_cmpl_invld");
     101         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_READ_COMPLETION_INVALID(i), OWNER_TYPE_FTL,
     102                 :            :                                                 OBJECT_NONE, 0, 0, "lba: ");
     103         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "read_cmpl_cache");
     104         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_READ_COMPLETION_CACHE(i), OWNER_TYPE_FTL,
     105                 :            :                                                 OBJECT_NONE, 0, 0, "lba: ");
     106         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "read_cmpl_ssd");
     107         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_READ_COMPLETION_DISK(i), OWNER_TYPE_FTL,
     108                 :            :                                                 OBJECT_NONE, 0, 0, "lba: ");
     109                 :            : 
     110         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "write_sched");
     111         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_WRITE_SCHEDULE(i), OWNER_TYPE_FTL,
     112                 :            :                                                 OBJECT_NONE, 0, 0, "lba: ");
     113         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "rwb_fill");
     114         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_WRITE_WBUF_FILL(i), OWNER_TYPE_FTL,
     115                 :            :                                                 OBJECT_NONE, 0, 0, "lba: ");
     116         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "write_submit");
     117         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_WRITE_SUBMISSION(i), OWNER_TYPE_FTL,
     118                 :            :                                                 OBJECT_NONE, 0, 0, "addr: ");
     119         [ -  + ]:       3674 :                 snprintf(descbuf, sizeof(descbuf), "%c %s", source[i], "write_cmpl");
     120         [ +  + ]:       3674 :                 spdk_trace_register_description(descbuf, FTL_TRACE_WRITE_COMPLETION(i), OWNER_TYPE_FTL,
     121                 :            :                                                 OBJECT_NONE, 0, 0, "lba: ");
     122                 :            :         }
     123                 :       1837 : }
     124                 :            : 
     125                 :            : static uint64_t
     126                 :    3607314 : ftl_trace_next_id(struct ftl_trace *trace)
     127                 :            : {
     128         [ -  + ]:    3607314 :         assert(trace->id != FTL_TRACE_INVALID_ID);
     129                 :    3607314 :         return __atomic_fetch_add(&trace->id, 1, __ATOMIC_SEQ_CST);
     130                 :            : }
     131                 :            : 
     132                 :            : void
     133                 :          0 : ftl_trace_reloc_band(struct spdk_ftl_dev *dev, const struct ftl_band *band)
     134                 :            : {
     135                 :          0 :         struct ftl_trace *trace = &dev->trace;
     136                 :            : 
     137   [ #  #  #  # ]:          0 :         spdk_trace_record(FTL_TRACE_BAND_RELOC(FTL_TRACE_SOURCE_INTERNAL), ftl_trace_next_id(trace), 0,
     138                 :            :                           band->p2l_map.num_valid, band->id);
     139                 :          0 : }
     140                 :            : 
     141                 :            : void
     142                 :          0 : ftl_trace_write_band(struct spdk_ftl_dev *dev, const struct ftl_band *band)
     143                 :            : {
     144                 :          0 :         struct ftl_trace *trace = &dev->trace;
     145                 :            : 
     146   [ #  #  #  # ]:          0 :         spdk_trace_record(FTL_TRACE_BAND_WRITE(FTL_TRACE_SOURCE_INTERNAL), ftl_trace_next_id(trace), 0, 0,
     147                 :            :                           band->id);
     148                 :          0 : }
     149                 :            : 
     150                 :            : void
     151                 :    3607314 : ftl_trace_lba_io_init(struct spdk_ftl_dev *dev, const struct ftl_io *io)
     152                 :            : {
     153                 :    3607314 :         uint16_t tpoint_id = 0, source;
     154                 :            : 
     155         [ -  + ]:    3607314 :         assert(io->trace != FTL_TRACE_INVALID_ID);
     156                 :    3607314 :         source = FTL_TRACE_SOURCE_USER;
     157                 :            : 
     158   [ +  +  +  - ]:    3607314 :         switch (io->type) {
     159                 :    1957016 :         case FTL_IO_READ:
     160         [ +  - ]:    1957016 :                 tpoint_id = FTL_TRACE_READ_SCHEDULE(source);
     161                 :    1957016 :                 break;
     162                 :    1650294 :         case FTL_IO_WRITE:
     163         [ +  - ]:    1650294 :                 tpoint_id = FTL_TRACE_WRITE_SCHEDULE(source);
     164                 :    1650294 :                 break;
     165                 :          4 :         case FTL_IO_TRIM:
     166         [ +  - ]:          4 :                 tpoint_id = FTL_TRACE_TRIM_SCHEDULE(source);
     167                 :          4 :                 break;
     168                 :          0 :         default:
     169                 :          0 :                 assert(0);
     170                 :            :         }
     171                 :            : 
     172   [ -  +  +  +  :    3607314 :         spdk_trace_record(tpoint_id, io->trace, io->num_blocks, 0, ftl_io_get_lba(io, 0));
             -  +  -  + ]
     173                 :    3607314 : }
     174                 :            : 
     175                 :            : void
     176                 :    1954918 : ftl_trace_completion(struct spdk_ftl_dev *dev, const struct ftl_io *io,
     177                 :            :                      enum ftl_trace_completion completion)
     178                 :            : {
     179                 :    1954918 :         uint16_t tpoint_id = 0, source;
     180                 :            : 
     181         [ -  + ]:    1954918 :         assert(io->trace != FTL_TRACE_INVALID_ID);
     182                 :    1954918 :         source = FTL_TRACE_SOURCE_USER;
     183                 :            : 
     184   [ +  -  -  - ]:    1954918 :         switch (io->type) {
     185   [ #  #  #  # ]:    1954918 :         case FTL_IO_READ:
     186   [ -  -  +  - ]:    1954918 :                 switch (completion) {
     187                 :          0 :                 case FTL_TRACE_COMPLETION_INVALID:
     188         [ #  # ]:          0 :                         tpoint_id = FTL_TRACE_READ_COMPLETION_INVALID(source);
     189                 :          0 :                         break;
     190                 :          0 :                 case FTL_TRACE_COMPLETION_CACHE:
     191         [ #  # ]:          0 :                         tpoint_id = FTL_TRACE_READ_COMPLETION_CACHE(source);
     192                 :          0 :                         break;
     193                 :    1954918 :                 case FTL_TRACE_COMPLETION_DISK:
     194         [ +  - ]:    1954918 :                         tpoint_id = FTL_TRACE_READ_COMPLETION_DISK(source);
     195                 :    1954918 :                         break;
     196                 :            :                 }
     197                 :    1954918 :                 break;
     198                 :          0 :         case FTL_IO_WRITE:
     199         [ #  # ]:          0 :                 tpoint_id = FTL_TRACE_WRITE_COMPLETION(source);
     200                 :          0 :                 break;
     201                 :          0 :         case FTL_IO_TRIM:
     202         [ #  # ]:          0 :                 tpoint_id = FTL_TRACE_TRIM_COMPLETION(source);
     203                 :          0 :                 break;
     204                 :          0 :         default:
     205                 :          0 :                 assert(0);
     206                 :            :         }
     207                 :            : 
     208   [ -  +  +  +  :    1954918 :         spdk_trace_record(tpoint_id, io->trace, 0, 0, ftl_io_get_lba(io, io->pos - 1));
             -  +  -  + ]
     209                 :    1954918 : }
     210                 :            : 
     211                 :            : void
     212                 :    3605212 : ftl_trace_submission(struct spdk_ftl_dev *dev, const struct ftl_io *io, ftl_addr addr,
     213                 :            :                      size_t addr_cnt)
     214                 :            : {
     215                 :    3605212 :         uint16_t tpoint_id = 0, source;
     216                 :            : 
     217         [ -  + ]:    3605212 :         assert(io->trace != FTL_TRACE_INVALID_ID);
     218                 :    3605212 :         source = FTL_TRACE_SOURCE_USER;
     219                 :            : 
     220   [ +  +  -  - ]:    3605212 :         switch (io->type) {
     221                 :    1954918 :         case FTL_IO_READ:
     222         [ +  - ]:    1954918 :                 tpoint_id = FTL_TRACE_READ_SUBMISSION(source);
     223                 :    1954918 :                 break;
     224                 :    1650294 :         case FTL_IO_WRITE:
     225         [ +  - ]:    1650294 :                 tpoint_id = FTL_TRACE_WRITE_SUBMISSION(source);
     226                 :    1650294 :                 break;
     227                 :          0 :         case FTL_IO_TRIM:
     228         [ #  # ]:          0 :                 tpoint_id = FTL_TRACE_TRIM_SUBMISSION(source);
     229                 :          0 :                 break;
     230                 :          0 :         default:
     231                 :          0 :                 assert(0);
     232                 :            :         }
     233                 :            : 
     234   [ -  +  +  +  :    3605212 :         spdk_trace_record(tpoint_id, io->trace, addr_cnt, 0, addr);
             -  +  -  + ]
     235                 :    3605212 : }
     236                 :            : 
     237                 :            : void
     238                 :       2562 : ftl_trace_limits(struct spdk_ftl_dev *dev, int limit, size_t num_free)
     239                 :            : {
     240                 :       2562 :         struct ftl_trace *trace = &dev->trace;
     241                 :            : 
     242   [ +  +  -  + ]:       2562 :         spdk_trace_record(FTL_TRACE_LIMITS(FTL_TRACE_SOURCE_INTERNAL), ftl_trace_next_id(trace), num_free,
     243                 :            :                           limit, 0);
     244                 :       2562 : }
     245                 :            : 
     246                 :            : uint64_t
     247                 :    3607314 : ftl_trace_alloc_id(struct spdk_ftl_dev *dev)
     248                 :            : {
     249                 :    3607314 :         struct ftl_trace *trace = &dev->trace;
     250                 :            : 
     251                 :    3607314 :         return ftl_trace_next_id(trace);
     252                 :            : }
     253                 :            : 
     254                 :            : #endif /* defined(DEBUG) */

Generated by: LCOV version 1.14