Ignore:
Timestamp:
Feb 27, 2014, 12:32:14 PM (11 years ago)
Author:
devigne
Message:

Invalidation from memcache on a non-coherent line can cause a cleanup_data.
While sending this cleanup the processor can do a write on the same line.
However there is no guarantee that the memcache will receive transactions in
the correct order, ie it can handle writing before cleanup and therefore
overwrite the new value of writing that is more current than the data contained
in the cleanup.
To solve this problem we have block writes to ZOMBIE lines, they are unlocked
when the line becomes EMPTY.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/RWT/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h

    r615 r645  
    541541    //bool                    *r_dcache_in_tlb;           // copy exist in dtlb or itlb
    542542    //bool                    *r_dcache_contains_ptd;     // cache line contains a PTD
    543     int                     *r_dcache_content_state;    // content state of one cache line
    544     int                     *r_dcache_dirty_word;    // content state of one cache line
     543    int                     *r_dcache_content_state; // content state of one cache line
     544    int                     *r_dcache_dirty_word;   
     545    bool                    *r_dcache_zombi_ncc;     
    545546    //////////////////////////////////////////////////////////////////////////////////////
    546547
     
    644645    // Activity counters
    645646    ////////////////////////////////
    646     uint32_t m_cpt_dcache_data_read;        // DCACHE DATA READ
    647     uint32_t m_cpt_dcache_data_write;       // DCACHE DATA WRITE
    648     uint32_t m_cpt_dcache_dir_read;         // DCACHE DIR READ
    649     uint32_t m_cpt_dcache_dir_write;        // DCACHE DIR WRITE
    650 
    651     uint32_t m_cpt_icache_data_read;        // ICACHE DATA READ
    652     uint32_t m_cpt_icache_data_write;       // ICACHE DATA WRITE
    653     uint32_t m_cpt_icache_dir_read;         // ICACHE DIR READ
    654     uint32_t m_cpt_icache_dir_write;        // ICACHE DIR WRITE
    655 
    656     uint32_t m_cpt_frz_cycles;              // number of cycles where the cpu is frozen
    657     uint32_t m_cpt_total_cycles;                // total number of cycles
     647    uint32_t m_cpt_dcache_data_read;           // DCACHE DATA READ
     648    uint32_t m_cpt_dcache_data_write;          // DCACHE DATA WRITE
     649    uint32_t m_cpt_dcache_dir_read;            // DCACHE DIR READ
     650    uint32_t m_cpt_dcache_dir_write;           // DCACHE DIR WRITE
     651
     652    uint32_t m_cpt_icache_data_read;           // ICACHE DATA READ
     653    uint32_t m_cpt_icache_data_write;          // ICACHE DATA WRITE
     654    uint32_t m_cpt_icache_dir_read;            // ICACHE DIR READ
     655    uint32_t m_cpt_icache_dir_write;           // ICACHE DIR WRITE
     656
     657    uint32_t m_cpt_frz_cycles;                 // number of cycles where the cpu is frozen
     658    uint32_t m_cpt_total_cycles;                   // total number of cycles
    658659
    659660    // Cache activity counters
    660     uint32_t m_cpt_data_read;               // total number of read data
    661     uint32_t m_cpt_data_write;              // total number of write data
     661    uint32_t m_cpt_data_read;                  // total number of read data
     662    uint32_t m_cpt_data_write;                 // total number of write data
    662663    uint32_t m_cpt_data_write_back;
    663664    uint32_t m_cpt_data_cleanup;
    664665    uint32_t m_cpt_data_sc;
    665     uint32_t m_cpt_data_miss;               // number of read miss
    666     uint32_t m_cpt_ins_miss;                // number of instruction miss
    667     uint32_t m_cpt_unc_read;                // number of read uncached
    668     uint32_t m_cpt_write_cached;            // number of cached write
    669     uint32_t m_cpt_ins_read;                // number of instruction read
    670     uint32_t m_cpt_ins_spc_miss;            // number of speculative instruction miss
    671 
    672     uint32_t m_cost_write_frz;              // number of frozen cycles related to write buffer
    673     uint32_t m_cost_data_miss_frz;          // number of frozen cycles related to data miss
    674     uint32_t m_cost_unc_read_frz;           // number of frozen cycles related to uncached read
    675     uint32_t m_cost_ins_miss_frz;           // number of frozen cycles related to ins miss
    676 
    677     uint32_t m_cpt_imiss_transaction;       // number of VCI instruction miss transactions
    678     uint32_t m_cpt_dmiss_transaction;       // number of VCI data miss transactions
    679     uint32_t m_cpt_unc_transaction;         // number of VCI uncached read transactions
    680     uint32_t m_cpt_dunc_transaction;         // number of VCI uncached read transactions
    681     uint32_t m_cpt_ll_transaction;         // number of VCI uncached read transactions
    682     uint32_t m_cpt_write_transaction;       // number of VCI write transactions
     666    uint32_t m_cpt_data_miss;                  // number of read miss
     667    uint32_t m_cpt_ins_miss;                   // number of instruction miss
     668    uint32_t m_cpt_unc_read;                   // number of read uncached
     669    uint32_t m_cpt_write_cached;               // number of cached write
     670    uint32_t m_cpt_ins_read;                   // number of instruction read
     671    uint32_t m_cpt_ins_spc_miss;               // number of speculative instruction miss
     672
     673    uint32_t m_cost_write_frz;                 // number of frozen cycles related to write buffer
     674    uint32_t m_cost_data_miss_frz;             // number of frozen cycles related to data miss
     675    uint32_t m_cost_unc_read_frz;              // number of frozen cycles related to uncached read
     676    uint32_t m_cost_ins_miss_frz;              // number of frozen cycles related to ins miss
     677
     678    uint32_t m_cpt_imiss_transaction;          // number of VCI instruction miss transactions
     679    uint32_t m_cpt_dmiss_transaction;          // number of VCI data miss transactions
     680    uint32_t m_cpt_unc_transaction;            // number of VCI uncached read transactions
     681    uint32_t m_cpt_dunc_transaction;           // number of VCI uncached read transactions
     682    uint32_t m_cpt_ll_transaction;             // number of VCI uncached read transactions
     683    uint32_t m_cpt_write_transaction;          // number of VCI write transactions
    683684    uint32_t m_cpt_icache_unc_transaction;
    684685
    685     uint32_t m_cost_imiss_transaction;      // cumulated duration for VCI IMISS transactions
    686     uint32_t m_cost_dmiss_transaction;      // cumulated duration for VCI DMISS transactions
    687     uint32_t m_cost_unc_transaction;        // cumulated duration for VCI UNC transactions
    688     uint32_t m_cost_write_transaction;      // cumulated duration for VCI WRITE transactions
    689     uint32_t m_cost_icache_unc_transaction; // cumulated duration for VCI IUNC transactions
    690     uint32_t m_length_write_transaction;    // cumulated length for VCI WRITE transactions
     686    uint32_t m_cost_imiss_transaction;         // cumulated duration for VCI IMISS transactions
     687    uint32_t m_cost_dmiss_transaction;         // cumulated duration for VCI DMISS transactions
     688    uint32_t m_cost_unc_transaction;           // cumulated duration for VCI UNC transactions
     689    uint32_t m_cost_write_transaction;         // cumulated duration for VCI WRITE transactions
     690    uint32_t m_cost_icache_unc_transaction;    // cumulated duration for VCI IUNC transactions
     691    uint32_t m_length_write_transaction;       // cumulated length for VCI WRITE transactions
    691692
    692693    // TLB activity counters
    693     uint32_t m_cpt_ins_tlb_read;            // number of instruction tlb read
    694     uint32_t m_cpt_ins_tlb_miss;            // number of instruction tlb miss
    695     uint32_t m_cpt_ins_tlb_update_acc;      // number of instruction tlb update
    696     uint32_t m_cpt_ins_tlb_occup_cache;     // number of instruction tlb occupy data cache line
    697     uint32_t m_cpt_ins_tlb_hit_dcache;      // number of instruction tlb hit in data cache
    698 
    699     uint32_t m_cpt_data_tlb_read;           // number of data tlb read
    700     uint32_t m_cpt_data_tlb_miss;           // number of data tlb miss
    701     uint32_t m_cpt_data_tlb_update_acc;     // number of data tlb update
    702     uint32_t m_cpt_data_tlb_update_dirty;   // number of data tlb update dirty
    703     uint32_t m_cpt_data_tlb_hit_dcache;     // number of data tlb hit in data cache
    704     uint32_t m_cpt_data_tlb_occup_cache;    // number of data tlb occupy data cache line
     694    uint32_t m_cpt_ins_tlb_read;               // number of instruction tlb read
     695    uint32_t m_cpt_ins_tlb_miss;               // number of instruction tlb miss
     696    uint32_t m_cpt_ins_tlb_update_acc;         // number of instruction tlb update
     697    uint32_t m_cpt_ins_tlb_occup_cache;        // number of instruction tlb occupy data cache line
     698    uint32_t m_cpt_ins_tlb_hit_dcache;         // number of instruction tlb hit in data cache
     699
     700    uint32_t m_cpt_data_tlb_read;              // number of data tlb read
     701    uint32_t m_cpt_data_tlb_miss;              // number of data tlb miss
     702    uint32_t m_cpt_data_tlb_update_acc;        // number of data tlb update
     703    uint32_t m_cpt_data_tlb_update_dirty;      // number of data tlb update dirty
     704    uint32_t m_cpt_data_tlb_hit_dcache;        // number of data tlb hit in data cache
     705    uint32_t m_cpt_data_tlb_occup_cache;       // number of data tlb occupy data cache line
    705706    uint32_t m_cpt_tlb_occup_dcache;
    706707
    707     uint32_t m_cost_ins_tlb_miss_frz;       // number of frozen cycles related to instruction tlb miss
    708     uint32_t m_cost_data_tlb_miss_frz;      // number of frozen cycles related to data tlb miss
     708    uint32_t m_cost_ins_tlb_miss_frz;          // number of frozen cycles related to instruction tlb miss
     709    uint32_t m_cost_data_tlb_miss_frz;         // number of frozen cycles related to data tlb miss
    709710    uint32_t m_cost_ins_tlb_update_acc_frz;    // number of frozen cycles related to instruction tlb update acc
    710711    uint32_t m_cost_data_tlb_update_acc_frz;   // number of frozen cycles related to data tlb update acc
     
    722723    uint32_t m_cpt_dtlb_sc_dirty_transaction;  // number of dtlb sc dirty transactions
    723724
    724     uint32_t m_cost_itlbmiss_transaction;       // cumulated duration for VCI instruction TLB miss transactions
    725     uint32_t m_cost_itlb_ll_transaction;        // cumulated duration for VCI instruction TLB ll acc transactions
    726     uint32_t m_cost_itlb_sc_transaction;        // cumulated duration for VCI instruction TLB sc acc transactions
    727     uint32_t m_cost_dtlbmiss_transaction;       // cumulated duration for VCI data TLB miss transactions
    728     uint32_t m_cost_dtlb_ll_transaction;        // cumulated duration for VCI data TLB ll acc transactions
    729     uint32_t m_cost_dtlb_sc_transaction;        // cumulated duration for VCI data TLB sc acc transactions
    730     uint32_t m_cost_dtlb_ll_dirty_transaction;  // cumulated duration for VCI data TLB ll dirty transactions
    731     uint32_t m_cost_dtlb_sc_dirty_transaction;  // cumulated duration for VCI data TLB sc dirty transactions
     725    uint32_t m_cost_itlbmiss_transaction;      // cumulated duration for VCI instruction TLB miss transactions
     726    uint32_t m_cost_itlb_ll_transaction;       // cumulated duration for VCI instruction TLB ll acc transactions
     727    uint32_t m_cost_itlb_sc_transaction;       // cumulated duration for VCI instruction TLB sc acc transactions
     728    uint32_t m_cost_dtlbmiss_transaction;      // cumulated duration for VCI data TLB miss transactions
     729    uint32_t m_cost_dtlb_ll_transaction;       // cumulated duration for VCI data TLB ll acc transactions
     730    uint32_t m_cost_dtlb_sc_transaction;       // cumulated duration for VCI data TLB sc acc transactions
     731    uint32_t m_cost_dtlb_ll_dirty_transaction; // cumulated duration for VCI data TLB ll dirty transactions
     732    uint32_t m_cost_dtlb_sc_dirty_transaction; // cumulated duration for VCI data TLB sc dirty transactions
    732733
    733734    // coherence activity counters
    734     uint32_t m_cpt_cc_update_icache;            // number of coherence update instruction commands
    735     uint32_t m_cpt_cc_update_dcache;            // number of coherence update data commands
    736     uint32_t m_cpt_cc_inval_icache;             // number of coherence inval instruction commands
    737     uint32_t m_cpt_cc_inval_dcache;             // number of coherence inval data commands
    738     uint32_t m_cpt_cc_broadcast;                // number of coherence broadcast commands
    739 
    740     uint32_t m_cost_updt_data_frz;              // number of frozen cycles related to coherence update data packets
    741     uint32_t m_cost_inval_ins_frz;              // number of frozen cycles related to coherence inval instruction packets
    742     uint32_t m_cost_inval_data_frz;             // number of frozen cycles related to coherence inval data packets
    743     uint32_t m_cost_broadcast_frz;              // number of frozen cycles related to coherence broadcast packets
    744 
    745     uint32_t m_cpt_cc_cleanup_ins;              // number of coherence cleanup packets
    746     uint32_t m_cpt_cc_cleanup_data;             // number of coherence cleanup packets
    747     uint32_t m_cpt_cleanup_data_not_dirty;
    748     uint32_t m_cpt_cleanup_data_dirty_word;
    749 
    750     uint32_t m_cpt_icleanup_transaction;        // number of instruction cleanup transactions
    751     uint32_t m_cpt_dcleanup_transaction;        // number of instructinumber of data cleanup transactions
    752     uint32_t m_cost_icleanup_transaction;       // cumulated duration for VCI instruction cleanup transactions
    753     uint32_t m_cost_dcleanup_transaction;       // cumulated duration for VCI data cleanup transactions
    754 
    755     uint32_t m_cost_ins_tlb_inval_frz;      // number of frozen cycles related to checking ins tlb invalidate
    756     uint32_t m_cpt_ins_tlb_inval;           // number of ins tlb invalidate
    757 
    758     uint32_t m_cost_data_tlb_inval_frz;     // number of frozen cycles related to checking data tlb invalidate
    759     uint32_t m_cpt_data_tlb_inval;          // number of data tlb invalidate
     735    uint32_t m_cpt_cc_update_icache;           // number of coherence update instruction commands
     736    uint32_t m_cpt_cc_update_dcache;           // number of coherence update data commands
     737    uint32_t m_cpt_cc_inval_icache;            // number of coherence inval instruction commands
     738    uint32_t m_cpt_cc_inval_dcache;            // number of coherence inval data commands
     739    uint32_t m_cpt_cc_broadcast;               // number of coherence broadcast commands
     740
     741    uint32_t m_cost_updt_data_frz;             // number of frozen cycles related to coherence update data packets
     742    uint32_t m_cost_inval_ins_frz;             // number of frozen cycles related to coherence inval instruction packets
     743    uint32_t m_cost_inval_data_frz;            // number of frozen cycles related to coherence inval data packets
     744    uint32_t m_cost_broadcast_frz;             // number of frozen cycles related to coherence broadcast packets
     745
     746    uint32_t m_cpt_cc_cleanup_ins;             // number of coherence cleanup packets
     747    uint32_t m_cpt_cc_cleanup_data;            // number of coherence cleanup packets
     748    uint32_t m_cpt_cleanup_data_not_dirty;     // number of total cleanup data without extra data flits
     749    uint32_t m_cpt_cleanup_data_dirty_word;    // number of total words dirty in cleanup data
     750    uint32_t m_cpt_data_write_miss;            // number of total write miss
     751    uint32_t m_cpt_data_write_on_zombi;        // number of frozen cycles related to blocked write on line NCC/CC ZOMBI
     752    uint32_t m_cpt_data_write_on_zombi_ncc;    // number of frozen cycles related to blocked write on line NCC ZOMBI
     753
     754    uint32_t m_cpt_icleanup_transaction;       // number of instruction cleanup transactions
     755    uint32_t m_cpt_dcleanup_transaction;       // number of instructinumber of data cleanup transactions
     756    uint32_t m_cost_icleanup_transaction;      // cumulated duration for VCI instruction cleanup transactions
     757    uint32_t m_cost_dcleanup_transaction;      // cumulated duration for VCI data cleanup transactions
     758
     759    uint32_t m_cost_ins_tlb_inval_frz;         // number of frozen cycles related to checking ins tlb invalidate
     760    uint32_t m_cpt_ins_tlb_inval;              // number of ins tlb invalidate
     761
     762    uint32_t m_cost_data_tlb_inval_frz;        // number of frozen cycles related to checking data tlb invalidate
     763    uint32_t m_cpt_data_tlb_inval;             // number of data tlb invalidate
    760764
    761765    // FSM activity counters
Note: See TracChangeset for help on using the changeset viewer.