Commit Graph

180 Commits

Author SHA1 Message Date
dc0e78cdf8 depot: update recipe hashes 2024-04-12 15:08:01 +02:00
5e5fe7291a nic/ipxe: add throttle RX interrupt support
The commit adds support to throttle the rate of the RX IRQs to a specified
value. The effect is, that no RX IRQs below the time threshold will fire and
therefore the CPU load gets reduced on the host. Trade-off gaming between
cpu load, throughput, overload.

Modular Sculpt 23.10 on S938 as testcase. In brackets the CPU affinity is
denoted.

ipxe (0,0) -> nic_router (1,0) -> Debian VM vbox6 (3,0) and (3,1)

VM: iperf -C X.X.X.X -t 60 -R

iperf server X.X.X.X is outside Sculpt and sends data due to '-R' to VM

Non representative measure points:

cpu load   - ipxe  - nic_router - iperf throughput
--------------------------------------------------
w/o  patch -  ~80% -       ~50% - ~706 MBit/s - 0    -> throttling off by default on S938
patch 651  -  ~20% -       ~35% - ~763 MBit/s - 651  -> 0.166ms throttle RX IRQ
patch 5580 -  ~15% -       ~25% - ~650 MBit/s - 5580 -> 1.4ms   throttle RX IRQ

Issue #5149
2024-04-12 15:00:44 +02:00
31e8b50b7c nic/ipxe: batch TX requests
A bunch of transmit requests received by the Uplink server (nic_router)
are currently added one by one to the ring buffer and every time the hardware
is notified to process each single request.

Instead, add as many as possible transmit requests in the ring buffer of
the hardware and when done trigger the hardware to process the ring.

Additionally, don't receive an "processed" TX IRQ for each element in the
ring, which causes high CPU load.

With this commit the TX IRQs in the ipxe driver for a

iperf -c X.X.X.X -t 60

from within a VM to the outside iperf server is reduced from about
~2'600'000 IRQs to about ~200'000. The overall CPU load for the driver
(when executed alone on CPU 0) is reduced from ~85 percent load to ~45 percent
load.

Issue #5149
2024-04-12 15:00:43 +02:00
feba5a138e nic/ipxe: batch packets on receive path
Use batching feature of Uplink client base header.

Issue #5149
2024-04-12 15:00:43 +02:00
9c7a303caf depot: update recipe hashes 2024-02-29 11:08:28 +01:00
1336b0a751 mmio: upper-bounds checks
The classes Genode::Mmio, Genode::Register_set, Genode::Attached_mmio, and
Platform::Device::Mmio now receive a template parameter 'size_t SIZE'. In each
type that derives from one of these classes, it is now statically checked that
the range of each Genode::Register::Register- and
Genode::Register_set::Register_array-deriving sub-type is within [0..SIZE).

That said, SIZE is the minimum size of the memory region provided to the above
mentioned Mmio classes in order to avoid page faults or memory corruption when
accessing the registers and register arrays declared inside.

Note, that the range end of a register array is not the end of the last item
but the end of integer access that is used for accessing the last bit in the
last item.

The constructors of Genode::Mmio, Genode::Attached_mmio, and
Platform::Device::Mmio now receive an argument 'Byte_range_ptr range' that is
expected to be the range of the backing memory region. In each type that derives
from on of these classes, it is now dynamically checked that 'range.num_bytes
>= SIZE', thereby implementing the above mention protection against page faults
and memory corruption.

The rest of the commit adapts the code throughout the Genode Labs repositories
regarding the changes. Note that for that code inside Core, the commits mostly
uses a simplified approach by constructing MMIO objects with range
[base..base+SIZE) and not with a mapping- or specification-related range size.
This should be fixed in the future.

Furthermore, there are types that derive from an MMIO class but don't declare
any registers or register arrays (especially with Platform::Device::Mmio). In
this case SIZE is set to 0. This way, the parameters must be actively corrected
by someone who later wants to add registers or register arrays, plus the places
can be easily found by grep'ing for Mmio<0>.

Fix #4081
2024-02-26 08:59:07 +01:00
c4679e7af6 depot: update recipe hashes 2023-12-13 12:33:05 +01:00
8baf19022c depot: update recipe hashes 2023-11-30 15:11:36 +01:00
b634549722 depot: update recipe hashes 2023-10-25 14:01:40 +02:00
07c4b92335 depot: update recipe hashes 2023-10-04 13:22:08 +02:00
134a785fe0 depot: update recipe hashes 2023-08-24 11:01:40 +02:00
8a279855ff cleanup file permissions
Fixes #4983
2023-08-23 13:46:37 +02:00
7aa301361d depot: update recipe hashes 2023-07-14 12:06:32 +02:00
79e262921e depot: update recipe hashes 2023-06-16 11:24:26 +02:00
583f2d6a36 depot: update recipe hashes 2023-05-30 12:13:34 +02:00
e9a497abe4 depot: update recipe hashes 2023-04-26 11:58:16 +02:00
b5f79756b3 depot: update recipe hashes 2023-04-17 14:48:30 +02:00
73771669f1 depot: update recipe hashes 2023-03-13 14:32:54 +01:00
805fae5bab Update README files
This patch removes outdated information and improves the language of
various README files.
2023-03-13 14:32:53 +01:00
e9b249b709 Replace use of base/snprintf.h by format library
Issue #2064
2023-03-13 14:32:53 +01:00
e265cf6d49 depot: update recipe hashes 2023-02-27 08:22:51 +01:00
25eac6b9e6 depot: update recipe hashes 2023-01-24 12:07:33 +01:00
b033b30f95 depot: update recipe hashes 2022-11-29 12:32:49 +01:00
c58d799f16 depot: update recipe hashes 2022-11-17 08:00:37 +01:00
847266d027 depot: update recipe hashes 2022-10-12 14:31:50 +02:00
7cf6651d2c ipxe_nic_drv: use generic platform API
Ref genodelabs/genode#4578
2022-10-12 12:09:33 +02:00
3f1870841c depot: update recipe hashes 2022-09-21 12:19:10 +02:00
7d143087c9 xml_node: change with_sub_node signature
The `with_sub_node` method is renamed to `with_optional_sub_node` to
better reflect that the non-existence of a sub node with the desired type is
ignored.
At the same time, the new `with_sub_node` now takes a second functor that is
called when no sub node of the desired type exists.

genodelabs/genode#4600
2022-09-19 14:00:33 +02:00
4dddc41b71 depot: update recipe hashes 2022-08-31 09:32:09 +02:00
44e2cd14a0 depot: update recipe hashes 2022-08-17 12:03:26 +02:00
a6a856cb70 dde_ipxe: fix allocation errors under high TX load
Under high TX load, 'irq_handler()' is rarely executed but packets
are still received since 'netdev_poll()' is called for every TX packet.

'netdev_poll()' not only handles completed transmissions but also
puts the IO buffers of received packets into the RX queue and refills the RX
ring by allocating more IO buffers. However, the IO buffers can only be freed
after they have been dequeued and passed to the 'rx_callback()'. Since
this was only done by 'irq_handler()', we exhaust the slab allocator
under high TX load.

A fix for this is to process the RX queue not only in the IRQ handler
but also when transmitting packets.

genodelabs/genode#4555
2022-08-10 13:33:03 +02:00
3105fa9e0f depot: update recipe hashes 2022-05-25 12:23:04 +02:00
0768185fea depot: update recipe hashes 2022-04-28 11:52:06 +02:00
8ece236635 depot: update recipe hashes 2022-04-13 11:54:46 +02:00
1a2677ebe6 dde_ipxe: update Intel NIC support list from upstream
Also, the repository URL was adapted to the permanent redirect to github
to prevent the following warning.

  dde_ipxe  download http://git.ipxe.org/ipxe.git
  dde_ipxe  git Cloning into 'src/lib/dde_ipxe'...
  dde_ipxe  git warning: redirecting to https://github.com/ipxe/ipxe/
  dde_ipxe  update src/lib/dde_ipxe
2022-04-13 08:07:58 +02:00
2b3370c8d8 depot: update recipe hashes 2022-02-28 11:46:35 +01:00
649647538b depot: update recipe hashes 2022-02-15 10:23:59 +01:00
51479e6be0 Convert drivers to use Platform::Session::dma_addr
This patch eliminates several calls of 'Dataspace::phys_addr'.

Issue #2243
2022-02-15 10:16:52 +01:00
65284b29f8 depot: update recipe hashes 2022-01-19 12:38:13 +01:00
7db602faec os: deprecate platform API for x86, rpi, imx53
* Move platform APIs to "legacy/" subdirectory
* Rename old pc, imx53, and rpi platform_drv
  to "legacy_*_platform_drv"

Fix #4359
2022-01-19 12:38:12 +01:00
5611fd2355 depot: update recipe hashes 2021-12-17 15:06:38 +01:00
92b7be4d11 depot: update recipe hashes 2021-11-30 12:08:54 +01:00
dc39a8db62 base: introduce Allocator::try_alloc
This patch changes the 'Allocator' interface to the use of 'Attempt'
return values instead of using exceptions for propagating errors.

To largely uphold compatibility with components using the original
exception-based interface - in particluar use cases where an 'Allocator'
is passed to the 'new' operator - the traditional 'alloc' is still
supported. But it existes merely as a wrapper around the new
'try_alloc'.

Issue #4324
2021-11-29 15:11:52 +01:00
abc9a2f232 depot: update recipe hashes 2021-10-14 13:46:25 +02:00
83c5648d33 depot: update recipe hashes 2021-08-30 15:00:39 +02:00
7618c9410a depot: update recipe hashes 2021-08-18 15:06:12 +02:00
fce525f122 depot: update recipe hashes 2021-07-28 11:27:05 +02:00
ece33d37f8 depot: update recipe hashes 2021-06-25 11:46:37 +02:00
1d52bd017d depot: update recipe hashes 2021-05-28 14:16:46 +02:00
6e85a73a28 ipxe_nic_drv: optionally report MAC address
Issue #4133
2021-05-28 14:16:45 +02:00