Hi, if it is a bare-metal code running in a VM, does it run with caching enabled?
Adam On Mon May 12, 2025 at 06:12:27 -0000, [email protected] wrote: > 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] _______________________________________________ l4-hackers mailing list -- [email protected] To unsubscribe send an email to [email protected]
