Ignore:
Timestamp:
Jan 1, 2015, 7:58:56 PM (9 years ago)
Author:
alain
Message:

1) The chained buffer structure has been modified to have one single buffer descriptor per cache line (64 bytes),
in order to simplify the software cache coherence between L2 and L3 caches when the IO bridge is used.
A new buffer_descriptor_t structure has been defined, and the fbf_chbuf_t and nic_chbuf_t structures have been adapted.
2) The NIC related system call handler _sys_nic_start() and _sys_nic_move() have been modified to support a distributed
kernel chbuf (one 4 Kbytes buffer per cluster), in order to support the one Gbit Ethernet NIC controller throughput.

  • the _sys_nic_start() function initialises the distributed chbuf, using the distributed heap.
  • the _sys_nic_move() function transfer one 4 KBytes container from the local kernel chbuf to an user local buffer.

This approach has been validated on the "classif" application: no packet loss with 16 clusters for average packet
length = 600 bytes and inter-packet gap = 300 cycles.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/giet_kernel/kernel_init.c

    r467 r478  
    1616#include <xcu_driver.h>
    1717#include <ioc_driver.h>
     18#include <mmc_driver.h>
    1819#include <ctx_handler.h>
    1920#include <irq_handler.h>
     
    106107////////////////////////////////////////////////////////////////////////////////////
    107108
    108 sbt_lock_t     _tty_tx_lock[NB_TTY_CHANNELS]  __attribute__((aligned(64)));
    109 
    110109unsigned int   _tty_rx_buf[NB_TTY_CHANNELS];
    111110unsigned int   _tty_rx_full[NB_TTY_CHANNELS];
    112111
    113 
    114 
    115 
     112////////////////////////////////////////////////////////////////////////////////////
     113// Distributed locks protecting TTY terminals       
     114////////////////////////////////////////////////////////////////////////////////////
     115
     116sbt_lock_t     _tty_tx_lock[NB_TTY_CHANNELS]  __attribute__((aligned(64)));
    116117
    117118///////////////////////////////////////////////////////////////////////////////////
     
    142143    while( cpid != kernel_init_barrier ) asm volatile ( "nop" );
    143144
    144     // Step 0 : P[0,0,0] initialises the kernel FAT
    145     //          and the distributed kernel_heap descriptors array.
     145    // Step 0 : P[0,0,0] initialises various complex structures
     146    //          - kernel FAT
     147    //          - distributed kernel heaps
     148    //          - distributed locks protecting TTY channels
     149    //          - distributed locks protecting MMC components
    146150    if ( gpid == 0 )
    147151    {
     
    155159        {
    156160            _sbt_lock_init( &_tty_tx_lock[channel] );
     161
     162#if GIET_DEBUG_INIT
     163_nolock_printf("\n[DEBUG KERNEL_INIT] P[%d,%d,%d] completes TTY[%d] lock init\n",
     164               x , y , p , channel );
     165#endif
    157166        }
    158167
    159 #if GIET_DEBUG_INIT
    160 _nolock_printf("\n[DEBUG KERNEL_INIT] P[%d,%d,%d] completes TTY locks init\n", x, y, p );
    161 #endif
    162 
     168/*
     169        unsigned int cx, cy;
     170        for ( cx = 0 ; cx < X_SIZE ; cx++ )
     171        {
     172            for ( cy = 0 ; cy < X_SIZE ; cy++ )
     173            {
     174                _sbt_lock_init( &_mmc_lock[cx][cy] );
     175
     176#if GIET_DEBUG_INIT
     177_nolock_printf("\n[DEBUG KERNEL_INIT] P[%d,%d,%d] completes MMC[%d][%d] lock init\n",
     178               x , y , p , cx , cy );
     179#endif
     180            }
     181        }
     182*/
    163183        _fat_init( IOC_BOOT_MODE );
    164184
Note: See TracChangeset for help on using the changeset viewer.