Hi Adam

Thank you for your reply.
This seems strange to me too.  I as mentioned am running my own application in 
place of the Linux OS, below is the configuration of module and the .cfg used

(module.list)
entry[arch=arm64] VM-G
roottask moe rom/vm-g.cfg
module l4re
module ned
module cons
module io
module vm-g.cfg
module[arch=arm64,fname=icarmvpx3a.io] drivers.io
module uvmm
module[arch=arm64,fname=kernel.dtb]     dtb/kernel.dtb
module[arch=arm64,fname=driver_ethernet,nostrip]  
/home/user/Documents/TestEthernet/build/ethernet_loop

(vm-g.cfg)
--  vim:set ft=lua:
local L4 = require "L4";

local l = L4.default_loader;
local flags = L4.Mem_alloc_flags.Continuous
              | L4.Mem_alloc_flags.Pinned
              | L4.Mem_alloc_flags.Super_pages;

local align = 21;

-- start console server
local cons = l:new_channel();

l:start({ caps = { cons = cons:svr() }, 
          log = L4.Env.log,
        },
        "rom/cons -a");

l.log_fab = cons;

local serialdev = { arm = "ttyAMA0", arm64 = "ttyAMA0", amd64 = "ttyS0" };

-- start io server
local vbus_l4 = l:new_channel();

l:start({
          caps = {
            vbus = vbus_l4:svr(),
            icu    = L4.Env.icu,
            iommu  = L4.Env.iommu,
            sigma0 = L4.Env.sigma0,
          },
          log      = { "IO", "y" },
          l4re_dbg = L4.Dbg.Info,
          scheduler = L4.Env.user_factory:create(L4.Proto.Scheduler, 0xa0, 
0x80, 0x02);
        },
        "rom/io rom/drivers.io");

-- start vmm server
l:startv({
            caps = {
              ram = L4.Env.user_factory:create(L4.Proto.Dataspace, 0x30000000,
                                               flags, align):m("rw"),
              vbus = vbus_l4,            
             
            },
            log = { "vm", "Black" },
            l4re_dbg = L4.Dbg.Info,
            scheduler = L4.Env.user_factory:create(L4.Proto.Scheduler, 0x18, 
0x8, 0x02);
          },
          "rom/uvmm", "-v", "-i",
          "-krom/ethernet_loop",
          "-drom/kernel.dtb",
          "-b0xC0000000",
          "-cconsole=" .. serialdev[L4.Info.arch()] .. " rw"
        );



To calculate the core usage time and get performance estimates I use the 
following function:

    uint32_t cnt_freq = read_cntfrq_el0(); 

    start = read_cntpct_el0(); 
    for (volatile uint64_t i = 0; i < counter; i++) {
        __asm__ volatile("nop");
    }
    end = read_cntpct_el0(); 

    uint64_t elapsed_ticks = end - start;
    double time_ns = ((double)elapsed_ticks * 1e9) / cnt_freq;

I have done this count on different amounts of iterations, to give you an 
estimate, I will only give you the one out of 1000 counts.

1) Application in bare metal => 2719 ns
2) Application on Linux vmm => 3680 ns
3) Application on vmm without Linux (i.e. the application of point 1) => 390880 
ns

I hope you can help me understand how I can handle this situation correctly. 

Thank you for your support
_______________________________________________
l4-hackers mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to