## Understanding and Enhancing Linux Kernel-based Packet Switching on WiFi Access Points

Shiqi Zhang, Mridul Gupta, and Behnam Dezfouli Internet of Things Research Lab, Department of Computer Science and Engineering, Santa Clara University, USA { szhang9, magupta, bdezfouli @scu.edu }

Abstract -As the number of WiFi devices and their traffic demands continue to rise, the need for a scalable and highperformance wireless infrastructure becomes increasingly essential. Central to this infrastructure are WiFi Access Points (APs), which facilitate packet switching between Ethernet and WiFi interfaces. Despite APs' reliance on the Linux kernel's data plane for packet switching, the detailed operations and complexities of switching packets between Ethernet and WiFi interfaces have not been investigated in existing works. This paper makes the following contributions towards filling this research gap. Through macro and micro-analysis of empirical experiments, our study reveals insights in two distinct categories. Firstly, while the kernel's statistics offer valuable insights into system operations, we identify and discuss potential pitfalls that can severely affect system analysis. For instance, we reveal the implications of device drivers on the meaning and accuracy of the statistics related to packet-switching tasks and processor utilization. Secondly, we analyze the impact of the packet switching path and core configuration on performance and power consumption. Specifically, we identify the differences in Ethernet-to-WiFi and WiFito-Ethernet data paths regarding processing components, multicore utilization, and energy efficiency. We show that the WiFito-Ethernet data path leverages better multi-core processing and exhibits lower power consumption.

rates, typically in the range of Mbps or Gbps. This lower switching rate is due to their focus on providing wireless network access rather than core data routing. Consequently, using the Linux kernel for software-based packet switching in APs offers a cost-effective and flexible solution that meets their data throughput requirements.

Index Terms -802.11, Linux, ARM, Measurement, Power Consumption, Processor Utilization, Function Tracing.

## I. INTRODUCTION

The advent of new applications and services, particularly those involving high-definition streaming, edge and cloud computing, and increasingly sophisticated Internet of Things (IoT) devices, necessitates the enhancement of WiFi technology in terms of rate, reliability, and scalability [1]. Parallel to this need for speed and efficiency, there is a significant increase in the number of WiFi Access Points (APs) (henceforth referred to as APs), which are mainly responsible for implementing a data plane for switching packets between their Ethernet and WiFi Network Interface Cards (NICs). Statistics show that the gigabit AP market alone is projected to increase at a compounded annual growth rate of about 32.3% from 2024 to 2034 [2]. This upsurge is a response to the expanding reach of internet connectivity and the need for high-speed and reliable coverage across various spaces.

Compared to enterprise and datacenter switches, which typically implement their dataplane functions in hardware for high-speed processing, APs often rely on the Linux kernel for packet switching tasks [3]-[5]. This architectural difference is primarily due to the differing packet switching rates: modern enterprise switches handle immense data traffic, often exceeding several Tbps, whereas APs generally manage lower

Given the rising complexity of operations and the increasing number of APs deployed in various settings, understanding and enhancing the performance of packet switching on these devices is becoming crucial. The existing research on software packet switching, however, primarily focuses on highperformance environments including resourceful servers [6][9]. Additionally, given the superior performance of kernelbypass methods like Data Plane Development Kit (DPDK), existing studies emphasize these technologies [9]-[12] for packet switching between Ethernet NICs and user-space components such as Virtual Machines (VMs) and containers. In contrast, APs have distinct requirements, primarily performing packet switching between Ethernet and WiFi NICs. Moreover, to understand and analyze the data plane of APs, it is essential to establish a systematic approach by leveraging high-level statistics provided by the kernel and the detailed insights from specific components managing tasks along the data path from one NIC to another.

In this paper, we study and analyze the operation and performance of two data paths, namely Ethernet to WiFi (E2W) and WiFi to Ethernet (W2E) packet switching paths, on WiFi APs, focusing on two main questions: (i) How and to what extent can the statistics provided by Linux and its performance monitoring tools be used to understand packet switching operation and performance? (ii) What are the differences and their causes in processing resources and power consumption between E2W and W2E packet switching? To address these questions, we first provide an overview of the primary operations and stages of packet switching in the Linux kernel. Then, we empirically study and analyze packet switching operations on an ARM-based platform, which utilizes a processor similar to those used in commercial APs. Integral to this empirical analysis, we perform both macro and microanalysis of packet switching operations to understand the performance characteristics and resource consumption patterns unique to WiFi APs.

Our main findings are as follows. (i) While Linux provides statistics about the number of Interrupt Requests (IRQs) and SoftIRQs, the meanings of these parameters are highly affected by various system configuration settings. For instance, we show that the number of RX SoftIRQs is

influenced not only by the processing of incoming packets but also by the number of TX IRQs. Also, while Linux's networking subsystem specifies a protocol for switching between New API (NAPI) (polling) and IRQ operations, some drivers override this protocol, therefore changing the meaning of the statistics provided. (ii) The processor cycles consumed by SoftIRQ processing may not be accurately accounted for and reflected in processor utilization statistics. Specifically, the SoftIRQ instances handled closely following the Top Half (TH) interrupt processing and before running a ksoftirqd thread may be considered part of the idle processor utilization instead of SoftIRQ utilization. We observe this behavior for the Ethernet interface of the platform under test. (iii) Even when the two NICs are assigned to separate cores, packet switching in the E2W path does not utilize multi-core processing. This limitation can result in a throughput drop if the core assigned to the Ethernet NIC cannot handle the maximum supported throughput of the two NICs. In contrast, packet switching in the W2E path inherently utilizes two cores. (iv) The processing load and power consumption of the E2W path are higher than those of the W2E path. However, as the throughput reaches the maximum supported levels, the differences in efficiency between the two paths reduce.

The rest of this paper is organized as follows. Section II provides an overview of packet processing stages in the Linux kernel. Testbed components and the collection of performance metrics are detailed in Section III. We present a macro-analysis of packet switching metrics in Section IV-A. In Section V, we provide an in-depth, micro-analysis of the packet switching operations. Section VI presents related work and future directions. We conclude the paper in Section VII.

## II. AN OVERVIEW OF LINUX KERNEL PACKET SWITCHING

In this section, we provide an overview of the steps involved in the Linux kernel's data path for switching packets received on an ingress Network Interface Card (NIC) to an egress NIC, based on our analysis of the latest Linux kernel source code . 1 Figure 1 illustrates the major steps in the process of packet switching from NIC 1 (ingress) to NIC 2 (egress).

## A. Ingress Side Processing

NIC to RX buffer. When a network packet arrives at a NIC, it is first stored in the NIC's internal buffers. The NIC then uses Direct Memory Access (DMA) to transfer packets to the system's main memory, specifically into the buffers managed by the driver, updating the receive (RX) buffer's pointers in the process. The RX buffer is a ring queue, facilitating producer (NIC) and consumer (driver) operation. This action triggers an Interrupt Request (IRQ), invoking the corresponding interrupt handler, often referred to as the TH. The Top Half (TH) acknowledges the interrupt, performs preliminary handling, and then schedules further processing in a deferred manner, referred to as the Bottom Half (BH).

Generating an interrupt for each packet reception results in a high interrupt processing overhead. New API (NAPI) addresses this problem by utilizing a polling mode, where the driver periodically checks if new descriptors have been used for packet reception. Within this method, processing a TH involves calling the napi\_schedule function of the kernel to start the NAPI for the RX buffer. To this end, when processing the TH for an IRQ, the napi\_schedule function is called with a napi\_struct parameter that includes a pointer to the poll function of the driver. Afterwards, the TH calls the \_\_raise\_softirq\_irqoff function to raise a SoftIRQ, specifically an RX SoftIRQ designated for receiving packet processing. At this point, BH execution of ingress processing starts.

SoftIRQ execution. If there is any pending SoftIRQ, the kernel's \_\_do\_softirq function handles RX SoftIRQs by calling the net\_rx\_action function, which processes the network packets. The net\_rx\_action function utilizes the per-core softnet\_data structure to access and iterate over the napi\_struct list. Each entry of this list represents a network device with packets ready to be processed. The function dequeues each structure in turn and runs their driver's poll functions. It is important to note that the SoftIRQ is run on the same core that ran the TH, i.e., the core that received the IRQ . It is also important to note that after processing the TH, the \_\_do\_softirq function can immediately run within the IRQ context, subject to certain limits on the number and duration of the SoftIRQs called. Once the limits are exceeded, if more SoftIRQs must be run, the \_\_do\_softirq function can execute in the context of a specific kernel thread called ksoftirqd . We will elaborate on these limitations in Observation 2.

Switching between NAPI and IRQ. The contract between the NAPI subsystem and device drivers includes an important aspect related to the deactivation of NAPI. Every time a driver's poll function is called, the number of processed packets is returned in the work\_done variable. If a driver's poll function consumes its full weight allotment (set as 64 by default), the NAPI state stays unchanged, and control is returned to the net\_rx\_action loop, which may call the poll function again if the processing time limit allows. Conversely, if the poll function does not use its entire weight, it must disable NAPI. Subsequently, NAPI will be reactivated upon receipt of the next IRQ; at this point, the driver's IRQ handler is expected to invoke the napi\_schedule function.

Delivery to IP stack. When a packet is not suitable for Generic Receive Offload (GRO) aggregation, it is processed individually. This occurs within the napi\_skb\_finish function, which calls netif\_receive\_skb to handle such packets. When the packet must be processed with GRO, and it is time to terminate the ongoing aggregation, the function napi\_gro\_complete is invoked. This function then calls netif\_receive\_skb to process the aggregated packets individually. In both cases, netif\_receive\_skb is responsible for further packet processing and delivery to the IP stack. In Section III, we will highlight that in this paper we do not utilize GRO.

Fig. 1. The main steps of packet switching. Here, we assume the ingress interface is NIC 1 and the egress interface is NIC 2.

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-1a19ee2a-2f33-4436-8d8a-aaed7aefa1fd.jpg)

## B. IP Stack Processing

For IP packets, the function ip\_rcv is called. This function calls the pre-routing hook of the Netfilter subsystem. If this hook does not drop the packet, the routing subsystem is consulted to determine its destination. If the packet is meant for another system, the ip\_forward function is called to determine the packet's next hop by consulting the routing table. Subsequently, the packet may be modified and evaluated against firewall rules within the forward Netfilter hook. The kernel performs further routing decisions after passing the forward hook. This involves consulting the routing table to determine the next-hop address and the appropriate outgoing network interface for the packet. Afterward, various IP-level checks and updates occur. If the packet is modified (e.g., TTL is decremented), the IP header checksum is recalculated. As the packet is almost ready to be sent out, it approaches the post-routing hook. This hook is the last chance to inspect and modify the packet before it leaves the system.

ring queue) of the driver by using the dev\_hard\_start\_xmit function.

## C. Egress Side Processing

One of the main components of egress side processing is qdisc . In Linux, qdisc (short for Queueing Discipline) is a mechanism used to control how packets are queued and transmitted. The default qdisc in most Linux distributions is pfifo fast, which implements a simple First-In First-Out (FIFO) queue with three bands of traffic priorities. Another algorithm is FQ-CoDel, which is a modern qdisc designed to combat bufferbloat by managing queue lengths and ensuring fair bandwidth distribution. Although Ethernet NICs utilize a qdisc on their egress direction, in Section IV we will discuss the lack of qdisc on the egress direction of WiFi NIC and its implications on performance.

IP stack to driver. With this background about qdisc , we now explain the operations of egress side processing. After IP stack processing, the packet is passed to the netdev (short for network device) subsystem using the \_\_dev\_queue\_xmit function. If there is a qdisc associated with the interface, this function passes the packet to the \_\_dev\_xmit\_skb . Otherwise, the packet is directly added to the transmit (TX) buffer (a

If there is a qdisc associated with the interface, the function \_\_dev\_xmit\_skb first acquires a lock on the qdisc , and then checks if the packet can bypass the qdisc under certain conditions, such as when the qdisc is empty. If these conditions are met, the function attempts to transmit the packet directly, via the sch\_direct\_xmit , bypassing the usual queuing mechanisms for efficiency. If \_\_dev\_xmit\_skb cannot bypass the qdisc , the packet is enqueued in the qdisc . Then, if the qdisc is not running, the function \_\_qdisc\_run is called to run it. As long as there are packets in the qdisc and the quota of running qdisc has not been fully used, \_\_qdisc\_run calls qdisc\_restart in a loop to dequeue packets from the qdisc and send them to the TX buffer. When the quota is exhausted, the \_\_netif\_schedule function is called to schedule a TX SoftIRQ, which is used for processing outgoing network packets by running the net\_tx\_action function. This function accesses the softnet\_data structure of the core to which the IRQ of the egress NIC is assigned affinity , and checks if the TX buffer has any SKBs that must be freed (using the \_\_kfree\_skb function). Then, if there are more packets in the qdisc , the function \_\_netif\_schedule runs the qdisc again.

To pass a packet to the driver, a lock is acquired by the dev\_hard\_start\_xmit function on the driver's TX buffer to prevent concurrent access to the transmit queue by other cores, ensuring that the packet transmission process is threadsafe. After attempting to transmit the packet, the transmission lock on the TX buffer is released. The function then checks if the transmission was complete. If the transmission was not successfully completed (e.g., if the network driver did not successfully validate SKB), the packet is requeued using dev\_requeue\_skb to attempt transmission again later.

Driver to NIC. The driver allocates buffers in the system's RAM, from which the DMA engine can read the data and transfer to the NIC. Once the DMA is set up, the driver triggers the network device to initiate the transmission. This usually involves writing to specific device registers, indicating the readiness of a packet for transmission and providing the DMA-prepared memory buffers' locations. Once the NIC com-

Fig. 2. The components, data plane, and control plane of the testbed. Data plane is used for data flow transmissions, and control plane is used for automation of experiments and collecting performance monitoring data.

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-5ce56294-a88b-4e1a-a775-067da8eddab8.jpg)

pletes the packet transmission, it signals this completion by generating a TX IRQ to inform the driver that the transmission has finished. The IRQ results in calling TH and then BH to perform several critical post-transmission tasks. It starts by unmapping any DMA mappings that were previously established, ensuring proper memory management and preventing resource leaks. Following this, the driver frees the memory buffers allocated for the packet, typically involving the deallocation of the associated SKBs.

## III. TESTBED COMPONENTS AND COLLECTION OF PERFORMANCE METRICS

We use the Raspberry Pi (RPi) version 4 based on the Compute Module 4 (CM4), which includes an ARM CortexA72 processor. This processor has four cores, denoted as Core 0 through Core 3. We chose this platform because of the similarity of its processor to those used in Commercial Off-TheShelf (COTS) Access Points (APs) such as those described in [13] and [14]. The CM4 module uses the BCM54210PE [15] Ethernet controller, which utilizes the Broadcom Genet driver implemented as the bcmgenet kernel module. Additionally, the CM4 module integrates a PCIe 2.0 x1 host controller, which we employed to connect an Intel AX210 WiFi 6E (802.11ax) NIC to the platform. We enabled WPA3 security on the WiFi NIC and disabled its power save mode. We used the 6 GHz band and conducted the experiments in an interference-free environment. The Ethernet NIC supports speeds of up to 1 Gbps, while the WiFi NIC supports speeds exceeding 1 Gbps. However, it should be noted that the theoretical maximum throughput of the AP's data plane between the two NICs is around 949 Mbps due to the overhead of networking protocols.

Figure 2 shows the testbed's components and their connectivity. The AP is the device under test, which is based on the ARM platform mentioned above and runs Linux kernel version 6.7. The Ethernet NIC of the AP is connected to Machine 1, and the WiFi NIC of the AP is connected to Machine 2. The qdisc used with the Ethernet interface is FQ-CoDel. These connections compose the data plane of the testbed. MTU-size, UDP data flows are generated by Machine 1 or Machine 2, depending on the packet switching path. For each packet switching path, we utilize UDP instead of TCP to study the impact of packet transmission and reception individually. Machine 1 and Machine 2 belong to different subnets; therefore, the AP performs layer-3 switching. We disabled GRO as its efficiency highly depends on the number of flows and their traffic patterns [8]. To build a control plane

Fig. 3. (a) Single-core configuration: The IRQs of both NICs are assigned to Core 0. (b) Dual-core configuration: The IRQ of the WiFi NIC is assigned to Core 0 and the IRQ of Ethernet NIC is assigned to Core 1.

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-7b848c32-f751-46c6-914b-3b34bd14ab94.jpg)

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-68f1fb03-e36b-4d20-aeed-aa62640eabfe.jpg)

for automating the experiments and performing data collection from various components of the testbed, a machine called Controller is connected to the AP, Machine 1, Machine 2, and the power measurement tool. We added a USB Ethernet dongle to the AP to provide control plane connectivity. Using this dongle introduces a negligible (less than 7%) processing overhead on one core. We developed a control plane daemon to run on the AP and collect various types of performance data. The collected data are sent to the Controller every second. This daemon is statically assigned to Core 3 of the AP to avoid interfering with packet switching tasks, which are assigned to other cores.

Since the AP's processor includes four cores, we investigate the impact of various core assignment configurations on packet switching. To facilitate this, we adjusted the IRQ affinity for the Ethernet and WiFi NICs. These configurations, referred to as 'single-core' and 'dual-core', are depicted in Figure 3. It is worth noting that on the AP platform, the system enforces that the WiFi NIC's IRQ must be assigned exclusively to Core 0, while the Ethernet NIC's IRQ can be assigned to any core. Therefore, for the single-core configuration, Core 0 is the only feasible option.

We collect various types of performance and operational data from the AP. Linux provides a suite of performance evaluation statistics accessible through the proc file system. The /proc/interrupts file offers comprehensive details about each IRQ, including the frequency of IRQ arrivals. The /proc/softirqs file represents the number of times RX SoftIRQs and TX SoftIRQs have been invoked. We utilize ethtool to collect statistics such as the number of frames received and sent. We measure processor utilization using mpstat and collect the number of cycles consumed per core using the perf utility. The power consumption of the AP is measured using a programmable power monitoring tool capable of sampling voltage and current at 1000 samples per second [16]. To specifically analyze the power consumption of the AP's processor, we subtract the power consumption of the WiFi NIC from the power measurement results.

## IV. PERFORMANCE ANALYSIS AND DEMYSTIFYING STATISTICS: A MACROALAYSIS APPROACH

In this section, we first examine the operation and performance of packet switching in the E2W path, followed by the W2E path. Subsequently, we compare the differences between the two paths. Specifically, we focus on statistics collected

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-8b4e928e-e122-4e3f-bf80-f32c030888ad.jpg)

Throughput (Mbps)

(a)

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-eba494a4-8561-4278-af2b-9557d8a39b08.jpg)

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-ae004c4d-78a9-418f-a4db-bb70d65d8739.jpg)

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-40a96317-1838-48f1-8b6b-b64b4a1025ab.jpg)

1e9

Power Consumption (mW)

Fig. 4. Ethernet-to-WiFi (E2W) packet switching using the single-core configuration. The maximum achieved throughput of this configuration is 750 Mbps.

from the proc file system, as well as processor utilization, processor cycles, and power consumption.

## A. Ethernet-to-WiFi (E2W) Packet Switching

In this section, we present and discuss the results of Ethernet to WiFi (E2W) packet switching on the AP, where a UDP flow's packets are received via the Ethernet NIC and transmitted by the WiFi NIC. The results for singlecore and dual-core configurations are presented in Figures 4 and 5, respectively. Sub-figures (a) in Figures 4 and 5 present packet switching statistics. Sub-figures (b), (c), and (d) demonstrate the utilization of the cores, the number of cycles per core per second, and power consumption, respectively. In sub-figures (b), 'Processor' refers to the average processor utilization across all the cores. In all these sub-figures, the results are presented for three distinct throughput levels. We selected two preset throughput levels, specifically 100 and 500 Mbps, alongside the maximum throughput achievable by each configuration. Notably, the highest supported throughput level for the single-core (Figure 4) and dual-core (Figure 5) configurations are 750 and 893 Mbps, respectively.

Observation 1: The number of RX IRQs and RX SoftIRQs are not directly related to the rate of incoming packet processing.

In Figures 4(a) and 5(a), as the throughput increases from 100 to 500 Mbps, and further to the peak throughput, we observe that the number of Ethernet RX IRQs (denoted as square) rises and then begins to decline. Remarkably, this count drops to a near-zero value only for the dual-core configuration, as demonstrated in Figure 5(a).

With the dual-core configuration, a maximum throughput of around 893 Mbps is achieved, as shown in Figure 5(a). In this case, the number of Ethernet RX IRQs is approximately two per second, and the number of RX SoftIRQs on Core 1 is about 1140. It is important to note that the count of RX SoftIRQs (in the proc file system) does not equate to

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-1ad369b3-14a8-4471-8278-ab9c86ad03cd.jpg)

Throughput (Mbps)

(a)

1e9

Fig. 5. Ethernet-to-WiFi (E2W) packet switching using the dual-core configuration. The maximum achieved throughput of this configuration is 893 Mbps.

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-77a1ab68-4006-4281-9f8d-04659f91ce45.jpg)

Fig. 6. Switching between NAPI and IRQ. NAPI continues as long as the poll function fully utilizes its packet processing budget.

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-ce7a8cff-7dea-456c-8c63-ef408b048673.jpg)

the total number of packets processed. This is because each invocation of this SoftIRQ can process multiple packets as long as packets are present in the driver's RX buffer, until the processing quota is exhausted. To determine the number of packets processed per RX SoftIRQ invocation, we divide the number of packets processed per second by the number of RX SoftIRQs per second, resulting in 73000 / 1140 ≈ 63 8 . . This value is very close to the default NAPI weight of 64 packets (cf. Section II-A), leading us to conclude that each iteration of the NAPI poll processes the maximum number of packets and reschedules repolling of the RX buffer without reenabling the Ethernet IRQ. Occasionally, when the number of packets processed falls below 64, the NAPI poll concludes and the Ethernet's IRQ is re-enabled, resulting in approximately two IRQs per second. The near 100% utilization of Core 1, as presented in Figure 5(b), confirms that this core is almost fully utilized by the NAPI polling mechanism.

To better understand the switching between NAPI and IRQ, we present Figure 6 and elaborate on the discussions previously presented in Section II-A. When an IRQ's BH is triggered, the initial processing is handled by immediate RX SoftIRQ processing within the \_\_do\_softirq function. This immediate processing, which runs within the interrupt context , is essential for rapidly and efficiently handling incoming network traffic. The \_\_do\_softirq function operates under two main constraints. The first constraint, defined by the

variable MAX\_SOFTIRQ\_RESTART , is the maximum number of consecutive times the SoftIRQ handling loop can execute the driver's poll function without yielding control back to the system. The second constraint, defined by the variable MAX\_SOFTIRQ\_TIME , specifies the maximum duration the kernel can spend processing SoftIRQs in a single invocation of \_\_do\_softirq . In other words, the \_\_do\_softirq function can invoke the driver's poll function up to 10 times, with each invocation capable of processing up to weight packets. Additionally, the total processing duration of these 10 invocations is limited by MAX\_SOFTIRQ\_TIME . When the packet switching load is high, not all packets can be processed within the interrupt context while enforcing the above constraints. Packets exceeding these immediate processing constraints are deferred to ksoftirqd , a kernel thread dedicated to each core for handling SoftIRQ tasks beyond the immediate IRQ context. During ksoftirqd operation, as long as 64 packets are processed per poll function invocation, the NAPI poll is rescheduled, and the NIC IRQ remains disabled. Thus, the high utilization of Core 1 in Figure 5(b) is caused by continuously renewing the NAPI and running the poll function within the ksoftirqd context.

Observation 2: The number of RX SoftIRQs is influenced not only by the processing of incoming packets but also by the number of TX IRQs. More specifically, the egress side also requires RX SoftIRQs, while TX SoftIRQs are not always necessary.

For the dual-core configuration, we observe in Figure 5(a) for 100 and 500 Mbps throughput levels that the number of RX SoftIRQs is the same as the number of RX IRQs on Core 1, confirming the activation of an RX SoftIRQ only when an Ethernet RX IRQ is triggered. However, for the singlecore configuration, an interesting observation in Figure 4(a) is that the number of RX SoftIRQs is higher than the number of Ethernet RX IRQs, which is particularly evident for the 100 Mbps rate. This behavior is surprising because when the throughput is low, the arrival of each Ethernet IRQ invokes an RX SoftIRQ, which can completely process the packets in the driver's RX buffer and exit without needing to renew the NAPI poll. Therefore, we expect the number of RX SoftIRQs to be the same as that of Ethernet RX IRQs.

To rationalize this behavior, we first note that there is one softnet\_data structure per core (cf. Section II-A); therefore, for the single-core configuration, the IRQs received from both NICs contribute to the increase in the number of SoftIRQs on that core. Additionally, by reviewing the Linux source code and using the ftrace utility [17], we notice that each TX IRQ generated by the WiFi NIC (following the transmission of one or more packets) also triggers the activation of a RX SoftIRQ on Core 0. In this case, when a TX IRQ is generated by the WiFi NIC, the IRQ handler performs two operations: it adds the driver's poll function to the list of NAPI polls for that core and then raises an RX SoftIRQ to call the driver's poll function. The driver's poll function is then responsible for performing transmission-completion tasks such as TX buffer reclaiming.

To visualize and better understand why RX SoftIRQs are

&lt;

l

a

t

e

x

i

s

h

1

\_

b

6

4

=

"

o

5

z

O

7

D

+

R

w

c

K

Q

9

Z

A

0

F

f

V

I

&gt;

B

3

N

S

8

E

J

U

r

q

/

L

G

P

g

d

2

C

j

T

k

X

u

H

M

v

n

W

m

y

p

Y

&lt;

l

a

t

e

x

i

s

h

1

\_

b

6

4

=

"

T

o

j

C

y

J

q

R

Z

K

H

8

P

W

/

E

&gt;

A

B

3

c

V

N

S

U

r

9

L

0

Y

F

2

Q

+

g

I

m

z

X

w

v

p

5

7

d

O

D

f

G

k

n

M

u

&lt;

l

a

t

e

x

i

s

h

1

\_

b

6

4

=

"

P

/

u

E

J

8

d

O

g

f

m

+

L

9

W

X

y

k

Z

r

o

M

&gt;

A

B

n

c

V

N

S

3

U

q

0

F

7

Q

2

p

I

C

j

z

w

G

H

D

v

K

T

R

5

Y

&lt;

l

a

t

e

x

i

s

h

1

\_

b

6

4

=

"

g

N

Z

p

u

Y

y

A

m

L

R

F

T

z

U

n

7

0

d

I

&gt;

B

c

V

S

8

E

J

3

r

q

/

9

Q

o

W

2

P

C

j

k

X

M

H

+

G

O

D

f

5

K

w

v

Fig. 7. At time instances t 2 and t 4 , the WiFi NIC generates TX IRQs. In both cases, after adding the poll function of iwlwifi to the poll list of softnet\_data , the RX SoftIRQ is used to call this poll function, which decides if reception, transmission, or both types of packet handling must be performed.

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-6d49f7d8-2f0c-4744-bb34-c0fbf65cabea.jpg)

triggered by the egress NIC, we analyze the code section that determines which SoftIRQ type must be scheduled. We explain the kernel's operation by presenting a single-core scenario in Figure 7. At time t 1 , an Ethernet RX IRQ arrives, the TH processing of this IRQ uses the function \_\_napi\_schedule to add the poll function of the driver to the poll list of the softnet\_data structure of the core. When the \_\_do\_softirq activates an RX SoftIRQ to call the poll function, the in\_net\_rx\_action variable is set to true . At time t 2 , while an RX SoftIRQ is running the poll function of bcmgenet driver, the WiFi NIC (egress) generates a TX IRQ. Again, the function \_\_napi\_schedule is used to add the poll function of the WiFi NIC to the softnet\_data structure of this core. At this time, since an RX SoftIRQ is in progress, the in\_net\_rx\_action variable of the softnet\_data structure on this core is true ; thereby, there is no need to schedule a new SoftIRQ instance. In other words, the RX SoftIRQ instance that is already running will call the poll function of the iwlwifi driver.

At time t 3 , there is no ongoing RX SoftIRQ and the value of in\_net\_rx\_action is false . When the WiFi NIC generates an IRQ at time t 4 , within the TH processing, the \_\_napi\_schedule function calls function \_\_raise\_softirq\_irqoff (cf. Figure 1) to mark an RX SoftIRQ as pending, ensuring that it will be processed at the next opportunity when the kernel checks for pending SoftIRQs. Notably, when calling function \_\_raise\_softirq\_irqoff by \_\_napi\_schedule , the kernel always uses RX SoftIRQ type as the argument of the function. Therefore, considering the zero number of TX SoftIRQs in Figures 4(a) and 5(a), this phenomenon occurs because TX IRQs are handled by RX SoftIRQs.

Observation 3: The Linux kernel may not correctly account for the processor cycles consumed by SoftIRQs, depending on the implementation of IRQ handler. We observed this misaccounting problem for the Ethernet driver.

The results presented in sub-figures (b), (c), and (d) of Figures 4 and 5 indicate that the number of core cycles and power consumption exhibit similar increasing trends; however, processor utilization does not follow the same pattern. For the single-core configuration, increasing throughput from 100 to 500 Mbps results in a 71% jump in utilization of Core 0, and

for the dual-core configuration, increasing the throughput from 500 Mbps to the maximum value results in an 8% increase for Core 0 and 88% for Core 1. Another related observation can be made by comparing the actual values of processor utilization and the number of cycles between the single-core and dualcore configurations. Comparing Figures 4(b) and (c) with Figures 5(b) and (c) for the 500 Mbps throughput, we observe that while the total number of cycles (consumed by Core 0 and Core 1) for the dual-core configuration is higher than that of the single-core configuration (Core 0), the processor utilization of the single-core configuration is higher.

To summarize the above remarks more formally, in Table I we present the normalized core utilization and normalized cycles consumed by the cores. Normalized core utilization is calculated by dividing the sum of the utilization of the cores involved in packet switching by the throughput level. For instance, for the dual-core configuration, since the utilization values of Core 0 and Core 1 for the 500 Mbps throughput are 6.38% and 11.63%, respectively, the table reports (6 38 + . 11 63) . / 500 = 0 0360 . for this core's normalized utilization per 1 Mbps packet switching rate for the 500 Mbps throughput level. Normalized cycles consumed is calculated by dividing the sum of the percentage of the cycles consumed by the cores involved in packet switching by throughput level. Here, the percentage of cycles per core is calculated by dividing the number of consumed cycles by the core's frequency, which is 1.5 GHz per core. For instance, for the dual-core configuration, since the cycles consumed by Core 0 and Core 1 for the 500 Mbps throughput are 182747814 and 926181648, respectively, the table reports ((182747814 + 926181648) / (1 5 . × 10 )) 9 × 100 500 / = 0 1479 . for this core's normalized cycles. The highlighted cells of Table I show the normalized utilization numbers that are much smaller than the normalized utilization values at high throughput levels. As these cells demonstrate, the system does not report the correct core utilization values for these throughput levels.

TABLE I NORMALIZED CORE UTILIZATION AND NORMALIZED CYCLES OF PACKET

SWITCHING CORES

| E2W with the Single-Core Configuration   | E2W with the Single-Core Configuration   | E2W with the Single-Core Configuration   | E2W with the Single-Core Configuration   |
|------------------------------------------|------------------------------------------|------------------------------------------|------------------------------------------|
|                                          | 100 Mbps                                 | 500 Mbps                                 | 750 Mbps                                 |
| Core 0 Utilization (%)                   | 0.0127                                   | 0.1488                                   | 0.1307                                   |
| Core 0 Cycles                            | 0.1945                                   | 0.1392                                   | 0.1206                                   |
| E2W with the Dual-Core Configuration     | E2W with the Dual-Core Configuration     | E2W with the Dual-Core Configuration     | E2W with the Dual-Core Configuration     |
|                                          | 100 Mbps                                 | 500 Mbps                                 | 893 Mbps                                 |
| Core 0 and 1 Utilization (%)             | 0.0105                                   | 0.0360                                   | 0.1280                                   |
| Core 0 and 1 Cycles                      | 0.2067                                   | 0.1479                                   | 0.1259                                   |

To understand the underlying cause of incorrect processor utilization reporting, we found that BH packet processing may not be correctly accounted for . We elaborate on this finding as follows. In Section II-A and the discussions of Observation 1, we explained that after running a TH, the kernel invokes a RX SoftIRQ to handle pending NAPI functions within the IRQ context. When the restart limit or runtime limit of \_\_do\_softirq is exhausted, a ksoftirqd kernel thread is spawned to handle the remaining RX SoftIRQs. However, for the Ethernet interface, the RX SoftIRQ instances handled closely following the TH and before running a ksoftirqd thread are considered part of the 'idle' processor utilization, instead of SoftIRQ utilization. We utilized two approaches to verify this misaccounting of SoftIRQ processor cycles. Firstly, using the perf and ftrace tools, we noticed that the functions of such RX SoftIRQs were recorded under the idle or swapper threads, and these cycles are added to the 'idle' category in /proc/stat . Therefore, tools such as mpstat misrepresent the actual processor utilization consumed by packet processing. Secondly, we modified the Linux kernel and changed the MAX\_SOFTIRQ\_RESTART value in the \_\_do\_softirq function from 10 to 1. This change decreased the number of times this function can rerun poll functions without invoking a ksoftirqd thread. Without this change, the processor utilization of Core 1 for the dual-core configuration was around 11% at 500 Mbps throughput, as Figure 5(b) shows. After applying the change to the kernel, the reported utilization on the same core increased to 67% (results are not shown in this paper).

It is worth noting that the misaccounting problem reported above does not occur when processing WiFi-related RX SoftIRQs . This is because, when an Ethernet RX IRQ occurs, its immediate RX SoftIRQs are processed as an exception running within the idle or swapper context. In contrast, the WiFi-related immediate RX SoftIRQs are processed in the context of threaded IRQs. We will further explain threaded IRQs in Observation 8.

By revealing this misaccounting problem, we can now justify the inaccuracy of the highlighted numbers reported in Table I. As throughput increases, the percentage of instances where Ethernet RX SoftIRQs run within the ksoftirqd context also increases, leading to more accurate accounting of processor cycles. Consequently, the misaccounting problem diminishes as throughput reaches its maximum value. For the dual-core configuration, as shown in Table I, the misaccounting problem persists at 100 and 500 Mbps throughput levels. This occurs because Core 1 processes an RX SoftIRQ per RX IRQ, as depicted in Figure 5(a). Therefore, RX SoftIRQs primarily run within the context of the IRQ handler, namely, the idle or swapper contexts, rather than ksoftirqd . In comparison, the single-core configuration exhibits the misaccounting problem only at the 100 Mbps throughput level. In this setup, the percentage of RX SoftIRQs that need to run in the ksoftirqd context grows more rapidly than in the dual-core configuration. Additionally, we identify a secondary, more nuanced reason for this behavior. In the single-core configuration, each core has its own softnet\_data structure (cf. Section II-A), which both NICs utilize. While the WiFi driver is reclaiming its TX buffer entries, an Ethernet RX IRQ may be generated, resulting in the addition of a NAPI instance for the Ethernet interface to the poll list of the same core's softnet\_data structure. Within the \_\_do\_softirq function, after processing the WiFi driver's function, if the poll list of Core 0 is not empty, the core proceeds with running the poll function of the Ethernet driver within the context of the thread created to handle the WiFi IRQ. Therefore, when the BH of the WiFi driver is running within a threaded interrupt context, it can execute Ethernet RX SoftIRQs. In

Fig. 8. WiFi-to-Ethernet (W2E) packet switching using the single-core configuration. The maximum achieved throughput of this configuration is 849 Mbps.

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-1dabf24e-2bf9-4e61-a4de-77d8426587d0.jpg)

Fig. 9. WiFi-to-Ethernet (W2E) packet switching using the dual-core configuration. The maximum achieved throughput of this configuration is 949 Mbps.

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-8c10c437-d351-4350-8b59-41301e5b8bbf.jpg)

this condition, the processor cycles consumed by the Ethernet RX SoftIRQs are properly accounted for under the SoftIRQ processing category. Therefore, the misaccounting problem related to a NIC depends on its driver type, its packet arrival pattern, and the type of other NICs and their associated traffic patterns.

## B. WiFi-to-Ethernet (W2E) Packet Switching

In this section, we present and discuss the results of WiFi to Ethernet (W2E) packet switching demonstrated in Figures 8 and 9. The methodologies for collecting and presenting results are the same as those described in Section IV-A.

Observation 4: While Linux specifies a protocol for switching between NAPI and IRQ modes, the NIC's driver may override the protocol.

In the discussions of Observation 2 pertaining to the E2W path, we demonstrate that packet transmissions by the WiFi

(egress) NIC trigger the execution of RX SoftIRQs, which perform tasks such as TX buffer reclaiming. For the W2E path, we observe a similar operation on the Ethernet (egress) side. The Ethernet NIC utilizes the bcmgenet driver. When a TX IRQ is generated, an RX SoftIRQ is scheduled to call the bcmgenet\_tx\_poll function to reclaim the space used by the transmitted packets. However, in Figure 8(a), the number of RX SoftIRQs exceeds the sum of Ethernet TX IRQs and WiFi RX IRQs, which is an unexpected observation for low throughput levels such as 100 Mbps. Additionally, in Figure 9(a), the number of RX SoftIRQs on Core 1 exceeds the number of TX IRQs on this core, which is unexpected for low throughput levels such as 100 Mbps. For example, for dual-core configuration at 100 Mbps, the average number of packets processed per RX SoftIRQ on the Ethernet (egress) side is 7651 / 2609 = 2 93 . , which is much lower than the default weight value of 64 required to reschedule the RX SoftIRQ using the NAPI functionality. We analyze the operations of the bcmgenet driver's bcmgenet\_tx\_poll function to investigate this behavior. Typically, a poll function is expected to return the actual number of successfully sent (processed) packets as the work\_done value. 2 However, the bcmgenet driver's bcmgenet\_tx\_poll function returns the kernel's default weight value of 64 as the work\_done , as long as the actual work\_done value is greater than 0. Thus, if at least one packet buffer is reclaimed, the NAPI is renewed to utilize an RX SoftIRQ to execute the bcmgenet\_tx\_poll function again. We speculate that this NAPI renewal method is employed to perform immediate post-transmission actions in anticipation of imminent upcoming transmissions.

Observation 5: The processor cycles misaccounting problem pertaining to the Ethernet driver is also observable when this NIC is serving as the egress interface.

In the discussions of Observation 3, we explained the processor cycle misaccounting problem when the Ethernet interface is performing ingress packet processing. The results presented in Figures 8 and 9 reveal that the problem persists for the W2E path as well. For instance, comparing Figures 9(b) and (c), when the throughput is increased from 500 Mbps to the maximum value, the utilization of Core 1 increases by 4047% whereas the increase in the number of cycles consumed by this core is 176%. Nevertheless, the misaccounting problem is less obvious for the W2E path, compared to the E2W path.

For the dual-core configuration, the main reason for the mitigated misaccounting problem in the W2E path is as follows. In the W2E path, the ingress packet processing is handled by the WiFi interface, which utilizes threaded IRQs. Threaded IRQs allow for the correct accounting of processor cycles consumed by SoftIRQs that run immediately after IRQ handling and before deferring the work to ksoftirqd . Therefore, for the W2E path, only the SoftIRQ instances that handle egress processing and are not executed within the ksoftirqd context may be misaccounted. For the singlecore configuration, in addition to the above reason, there is a

2 For incoming packet processing, as explained in Section II-A and in Observation 1, the poll function returns the number of packets processed from the driver's RX buffer.

secondary cause. As discussed in Observation 3, the processor cycles consumed by the SoftIRQ instances that run within the context of the threaded IRQ handler of the WiFi interface are properly accounted for. In the W2E path, as the number and duration of such threaded IRQ handlers increase, so does the SoftIRQ instances of the Ethernet interface that run within those threads. Therefore, the cycles of more Ethernet SoftIRQs are properly accounted for.

## C. Comparison of E2W and W2E

Comparing the results for W2E and E2W paths, we observe significant differences in the performance and operation of packet switching for these two paths. We identify and justify these observations as follows.

Observation 6: For the dual-core configuration, the W2E path inherently utilizes two cores, whereas the E2W path utilizes one core overwhelmingly.

By default, each network interface uses a qdisc as its entry point into the netdev subsystem, as discussed in Section II-C. However, WiFi interfaces may not utilize a qdisc . Specifically, to implement airtime fairness for downlink packet delivery, APs employ sophisticated queuing algorithms within the MAC layer of WiFi interfaces [3]. This part of the MAC layer, which is implemented as the mac80211 kernel module, integrates the FQ-CoDel queue management with airtime fairness methods. Consequently, qdisc is completely bypassed on the WiFi interfaces. Considering this configuration and referring to Figure 1, we explain the operation of E2W packet switching. When a packet received at the Ethernet interface reaches the function \_\_dev\_queue\_xmit , it bypasses the qdisc and proceeds to the function dev\_hard\_start\_xmit . This function forwards the packet to the mac80211 module for queuing and further processing before it is sent to the driver's TX buffer. It is important to note that after ingress Ethernet packet processing, the mac80211 packet processing continues within the interrupt or ksoftirqd context and runs on the core that is handling IRQs for the Ethernet interface; thereby, packet processing from the ingress NIC to the egress NIC is handled by a single core, which is Core 1 in our testbed. Conversely, in the W2E path, a certain percentage of packets are added to the Ethernet NIC's qdisc by the core processing incoming packets from the WiFi interface. Then the core handling the Ethernet IRQs performs qdisc processing and adds the packets to the TX buffer. This analysis of packet switching operations explains why the W2E path achieves higher throughput compared to E2W: W2E inherently utilizes multi-core processing, provided that the IRQs of the two NICs are assigned to different cores.

The number of TX SoftIRQs is related to the above discussion. In the results pertaining to E2W packet switching demonstrated in Section IV-A, Figures 4(a) and 5(a) show a value of zero for the number of TX SoftIRQs. In these results, for the ingress (Ethernet) side, it is reasonable to have a zero number of TX SoftIRQs because the UDP flow is unidirectional and the Ethernet NIC is the ingress interface. However, we expect to see TX SoftIRQs on the egress (WiFi) side. In contrast, for the W2E path, Figures

8(a) and 9(a) show a considerable number of TX SoftIRQs, especially for the maximum throughput levels. In the W2E path, processing and running the qdisc requires scheduling TX SoftIRQs. More specifically, when the qdisc 's quota is used, the \_\_netif\_schedule function (cf. Figure 1) is called to schedule a TX SoftIRQ, which is used for dequeuing packets from the qdisc by running the net\_tx\_action function. In Section V, Observation 10, we will explain how lowering the throughput increases the number of packets that can bypass the qdisc , which in turn reduces the number of TX SoftIRQs.

Observation 7: For both E2W and W2E paths, the dualcore configuration consumes more power than the single-core configuration at all throughput levels. The normalized power consumption of the E2W path is higher than that for W2E across all throughput levels.

In sub-figure (d) of Figures 4, 5, 8, and 9, we observe the following: (i) For both E2W and W2E paths, the power consumption of the dual-core configuration is higher than that of the single-core configuration, and (ii) the power consumption of the E2W path is higher than that of W2E. To better present these differences, Table II summarizes the normalized power consumption computed as milliwatts (mW) per 1 Mbps of throughput for three throughput levels. Table III shows normalized cycles consumed by the packet switching cores. By comparing these two tables, we observe a clear numerical relationship between processor cycles and power consumption.

TABLE II NORMALIZED POWER CONSUMPTION VALUES OF THE AP

|                               | 100 Mbps 500 Mbps   | 100 Mbps 500 Mbps   | Max              |
|-------------------------------|---------------------|---------------------|------------------|
| E2W Single-Core (mW)          | 3.410               | 1.426               | 1.108 (750 Mbps) |
| E2W Dual-Core (mW)            | 3.780               | 1.514               | 1.144 (893 Mbps) |
| % Dual-Core vs. Single-Core   | 10.85%              | 6.17%               | 3.21%            |
| W2E Single-Core (mW)          | 3.140               | 1.142               | 0.953 (850 Mbps) |
| W2E Dual-Core (mW)            | 3.370               | 1.244               | 1.095 (949 Mbps) |
| % Dual-Core vs. Single-Core   | 7.32%               | 8.93%               | 8.60%            |
| % E2W vs. W2E for Single-Core | 8.60%               | 24.86%              | 16.26%           |
| % E2W vs. W2E for Dual-Core   | 12.16%              | 21.70%              | 10.53%           |

TABLE III NORMALIZED PROCESSOR CYCLES OF PACKET SWITCHING CORES

|                             | 100 Mbps   | 500 Mbps   | Max               |
|-----------------------------|------------|------------|-------------------|
| E2W Single-Core             | 0.1945     | 0.1392     | 0.1206 (750 Mbps) |
| E2W Dual-Core               | 0.2067     | 0.1479     | 0.1259 (893 Mbps) |
| % Dual-Core vs. Single-Core | 6.23%      | 6.24%      | 4.40%             |
| W2E Single-Core             | 0.1277     | 0.1088     | 0.1011 (850 Mbps) |
| W2E Dual-Core               | 0.1440     | 0.1285     | 0.1242 (949 Mbps) |
| % Dual-Core vs. Single-Core | 12.8%      | 18.1%      | 22.7%             |
| % E2Wvs.W2E of Single-Core  | 52.4%      | 27.90%     | 19.21%            |
| % E2Wvs.W2E of Dual-Core    | 43.56%     | 15.07%     | 1.39%             |

We identify three key factors that contribute to the higher normalized processor cycles and, consequently, the increased normalized power consumption in the dual-core configuration. First, when a single core handles all the packet processing tasks from ingress to egress, the core checks the RX buffer less frequently than the case where a dedicated core handles ingress

TABLE IV NORMALIZED NUMBER OF CACHE INVALIDATIONS FOR PACKET SWITCHING CORES

|                 |   100 Mbps |   500 Mbps | Max               |
|-----------------|------------|------------|-------------------|
| E2W Single-Core |      7.16  |       1.46 | 1.04 (750 Mbps)   |
| E2W Dual-Core   |    290.287 |     147.55 | 89.34 (893 Mbps)  |
| W2E Single-Core |      6.91  |       1.39 | 0.89 (850 Mbps)   |
| W2E Dual-Core   |   1253.5   |     694.14 | 476.65 (949 Mbps) |

processing. Accordingly, as the chance of packet accumulation increases, more packets are processed per RX SoftIRQ, which means the IRQs are enabled and processed less often. This can be observed in Figures 4, 5, 8, and 9 as the number of RX IRQs and RX SoftIRQs are lower for the single-core configuration. For instance, on the E2W path, the increase in the number of IRQs for the dual-core configuration compared to the single-core configuration is 6% and 28.8% for 100 and 500 Mbps throughput levels, respectively, and the number of RX SoftIRQs increase by 10.9% and 50.4%, respectively. Second, we identify that the dual-core configuration results in a higher number of Layer-1 Data Cache (L1-DCache) invalidations. Table IV shows the normalized number of cache invalidations calculated by dividing the total number of cache invalidations by the throughput level. The highlighted rows of the table reveal higher cache invalidation rate for the dualcore configurations. As Figure 3 shows, each core has a dedicated L1 cache; therefore, for the dual-core configuration, the packets in Core 1's L1 cache must transfer to Core 0's L1 cache during the packet switching process, resulting in a higher number of cache invalidation. It is worth noting that for the E2W path, even though Core 1 handles both ingress and egress processing, Core 0 handles TX IRQs for packet buffer claiming; therefore, Core 0 requires access to the SKBs transmitted. Third, when two cores handle packet-switching processes, the number of context switches between kernel tasks increases. For the E2W path and 500 Mbps throughput, we measure these values for the single-core and dual-core as 3361 and 5824, respectively. For the W2E path, these numbers are 3351 and 4369, respectively.

While the above mentioned factors contribute to the higher power consumption of dual-core configuration, we leave quantitative analysis of the impact of each factor to power consumption as a future work. The above factors also justify the lower normalized power consumption and lower normalized processor cycles as throughput increases. For instance, the decrease in the number of cache invalidations versus throughput can be observed in Table IV.

## V. ANALYZING THE STAGES OF PACKET SWITCHING: A MICROANALYSIS APPROACH

The metrics and analyses presented in the previous section enabled us to describe the overarching operational framework and discern the differences in packet switching considering path and core assignment configuration. To deepen our understanding of these operations and the root causes of the observed differences, this section adopts a more granular approach by conducting a micro-analysis of packet switching

TABLE V DEFINITION OF THE STAGES IN PACKET SWITCHING

| Stage                     | Description (cf. Figure 1 for more information)                                                                                                                                                                                                          |
|---------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Total Cycles              | The number of processor cycles per second consumed by the cores assigned to packet processing. This includes packet switching and other kernel operations.                                                                                               |
| Ingress Packet Processing | Ingress Packet Processing                                                                                                                                                                                                                                |
| Init RX-IRQ               | The operations between the detection of an RX IRQ and the start of running an RX SoftIRQ.                                                                                                                                                                |
| Init Ksoftirqd            | The operations between the creation of a ksoftirqd thread and the start of running a SoftIRQ.                                                                                                                                                            |
| RX SoftIRQ                | The execution of an RX SoftIRQ until the start of running the driver's poll function. This includes the functions __do_softirq and net_rx_action , excluding the actual execution of driver's poll function.                                             |
| Poll Function             | The execution of the driver's poll function, which includes fetching packets from the device's RX buffer, performing necessary processing and passing the packets up the IP stack.                                                                       |
| IP Stack Processing       | IP Stack Processing                                                                                                                                                                                                                                      |
| IP Stack                  | The execution of IP stack for processing incoming packets. This includes the operations starting ip_rcv and before __dev_queue_xmit .                                                                                                                    |
| Egress Packet Processing  | Egress Packet Processing                                                                                                                                                                                                                                 |
| Init Xmit                 | The execution of the functions responsible for pushing the packet into the qdisc or the driver's TX buffer. This includes the operations started by the __dev_queue_xmit function.                                                                       |
| Init TX-IRQ               | The operations between the detection of a TX IRQ and the start of running a TX SoftIRQ.                                                                                                                                                                  |
| TX SoftIRQ                | The execution of a SoftIRQ until the start of running the driver's poll function to perform the TX Reclaim stage or TX Qdisc stage. This includes the functions __do_softirq , net_rx_action and net_tx_action (cf. Observation 2 for more information). |
| TX Qdisc                  | The execution of qdisc_run , which processes the packets that have been enqueued in the qdisc and pushes them into the driver's TX buffer.                                                                                                               |
| TX Reclaim                | The process of reclaiming transmission resources (SKBs) after packets have been sent out.                                                                                                                                                                |

stages. Our methodology is structured as follows. We decompose packet switching operations into distinct stages, as Table V illustrates. Figure 10 presents the normalized number of core cycles for the three throughput levels and both E2W and W2E paths using the dual-core configuration. We used the same normalization method explained in Observation 3. To quantify the processing load associated with each stage, we measured the number of processor cycles using the perf tool. The details of the mappings and the corresponding codes are available in the GitHub repository of this paper [18].

Observation 8: The difference in the number of processor cycles consumed during the Init RX-IRQ stage for E2W and W2E paths is due to the distinct IRQ handling methods employed by the WiFi and Ethernet drivers.

Figure 10 shows that the normalized number of core cycles consumed by the Init RX-IRQ stage of the W2E path are 0.005, 0.001, and 0.002 for the 100, 500 Mbps, and maximum throughout levels, respectively; whereas, for the E2W these numbers are measured as zero. This difference is caused by the use of threaded interrupt handler by the iwlwifi driver, as we briefly mentioned in Observation 3. Threaded interrupt handlers are designed to improve system responsiveness by allowing complex interrupt handling to be offloaded to kernel

Throughput: 100 Mbps

(c)

Fig. 10. The 'Total Cycles' on the x-axis refers to the normalized cycles consumed by all the cores. For each packet switching stage, the value refers to the normalized number of cycles consumed by that stage only. The results are for the dual-core configuration for (a) 100 Mbps, (b) 500 Mbps and (c) maximum throughput levels. The x-axis corresponds to the various stages outlined in Table V.

![image](https://ac.marcodsn.me/arxiv-markdown-images/2408.01013v1-figure-90bcefd0-5573-438e-b5d5-1bf4fb162b77.jpg)

threads [19]. Some WiFi drivers (e.g., iwlwifi [20] and Realtek RTW89 [21]) handle complex tasks like multiple stream management, encryption/decryption, and dynamic signal strength adaptation. These operations can be resource-intensive and may involve blocking, which makes threaded handlers particularly advantageous. When an IRQ arrives, the primary interrupt handler can quickly acknowledge the interrupt and defer the complex processing to a threaded handler, which runs in a process context and can safely sleep or wait for resources. This approach minimizes latency in the interrupt path and allows for better prioritization and scheduling of tasks. In contrast, most Ethernet interfaces, with their more straightforward processing requirements, rely on the primary handler to manage interrupt processing efficiently.

With the above discussion, we take a closer look into the operation of the iwlwifi driver. In the W2E path, when a WiFi IRQ arrives, the kernel's interrupt handling code runs iwl\_pcie\_msix\_isr , which is the primary interrupt handler for this NIC. The primary handler identifies the specific cause of the interrupt using the index associated with the Message Signaled Interrupts-Extended (MSIX) vector. Based on the identified cause, iwl\_pcie\_msix\_isr invokes a secondary function, iwl\_pcie\_irq\_rx\_msix\_handler , as a threaded handler to process the interrupt further. During the execution of the threaded handler, the local BHs on the processor assigned to this IRQ are disabled to prevent re-entrant execution while handling critical sections of the threaded handler. Within the

TH execution, once the critical sections are processed and the threaded handler completes, the TH must explicitly re-enable the local BHs using the \_\_local\_bh\_enable\_ip function. By relying on the perf tool, we observed that most of the processor cycles consumed by the Init RX-IRQ stage of the W2E path are related to the \_\_local\_bh\_enable\_ip function. This is because this function needs to check various conditions to ensure it is safe to re-enable preemption and interrupts. In contrast to the iwlwifi handler, the Ethernet IRQ handler does not require a threaded handler. This makes the Ethernet IRQ handler more efficient as it avoids the additional overhead of managing a threaded context and BHs.

Observation 9: Among all the stages, the two most processintensive stages are the Poll Function stage and the Init Xmit stage. For the WiFi interface in particular, the processing load of these stages is higher than that of the Ethernet interface.

The Poll Function stage of the WiFi ingress processing incurs higher overhead than that of the Ethernet interface. Figure 10 shows that for 100, 500 Mbps, and maximum throughput levels, the number of cycles consumed by the Poll Function stage in the W2E path are 2.3x, 2.5x, and 3.8x higher, respectively, than in the E2W path. This observation is because the poll function of the iwlwifi driver performs more operations than the bcmgenet driver. After retrieving the incoming packets from the RX buffer, the bcmgenet driver performs necessary validations (e.g., error checking, packet size validation) and passes the packets to the IP stack for further processing. In contrast, the iwlwifi driver performs more complex tasks and needs to process 802.11 headers, which are more intricate than Ethernet headers. This involves extracting and processing additional fields such as QoS control, sequence control, and security-related fields. After parsing the headers of each MAC Protocol Data Units (MPDU), the driver performs validations such as error checking and packet size validation on each MPDU. If a MPDU is part of a fragmented frame sequence, the driver handles the fragmentation and reassembly of packets. After these parsing and validation steps, the driver strips off the 802.11 headers and additional encapsulation headers before handing the packet to the IP layer.

The Init Xmit stage of the WiFi egress processing incurs higher overhead than that of the Ethernet interface. Figure 10 shows that for the 100, 500 Mbps and maximum throughput levels, the processor cycles consumed by the Init Xmit stage of the E2W path are 3x, 2.7x and 2.6x higher, respectively, than the Init Xmit stages of the W2E path. Recall that the Init Xmit stage starts after the completion of IP stack processing. At this point, the packet is passed to the netdev subsystem of the egress NIC. For the E2W path, since there is no qdisc (cf. Section IV, Observation 6), packets are passed to the mac80211 module. This module implements complex queuing methods for establishing airtime and QoS-aware delivery of egress traffic. More specifically, the mac80211 module strives to allocate a fair share of airtime to each station, and the priority of the traffic (i.e., voice, video, best-effort, and background) also affects the order of packet transmissions [3], [5]. These operations introduce queue management and locking overheads that increase with throughput. Below the

mac80211 module, the iwlwifi driver implements tasks such as retransmissions, rate control, power management, medium access control, encryption, and QoS. For instance, based on the traffic type, the driver enforces hardware-specific configurations for channel access. All of these factors contribute to the higher processing load of egress processing compared to ingress processing. Our deeper analysis (not included in this paper) of E2W path revealed that the mac80211 processing accounts for 62.6% of the Init Xmit sub-stage.

For the W2E path, the tasks for the Init Xmit stage are fewer and less complex. Specifically, for those packets that are directly transmitted, the processing load of the bcmgenet driver is less than that of the mac80211 module and iwlwifi driver. This is because the bcmgenet driver does not need to handle complex tasks such as QoS-based queuing and channel access. However, as the throughput increases, the number of packets that cannot bypass the qdisc increases, and the overhead of the qdisc also rises. We elaborate on the processing load of the qdisc as follows.

Observation 10: The W2E path is more efficient than the E2W one. However, as throughput increases, the difference in processing overhead between these two paths reduces.

Comparing Figures 10(a), (b), and (c), we observe that for all throughput levels, the number of cycles consumed by the W2E path is lower than that of the E2W path. However, as the throughput increases, the difference between the total number of cycles consumed by the W2E and E2W paths decreases.

In Observation 6, we discussed that the dual-core configuration leverages both cores in the W2E path. By adding packets to the qdisc , egress processing is offloaded to the core assigned to the Ethernet NIC (Core 1), and the packet switching load is distributed across the two cores. However, the processing load of the egress side processing in the W2E path increases as more packets are added to qdisc instead of being transmitted directly.

As discussed in Section II-C, the qdisc layer acts as an intermediary between the IP layer and the network device, managing packet queues and scheduling egress transmissions. After protocol stack processing, the \_\_dev\_xmit\_skb function (cf. Figure 1) acquires a lock on the qdisc and then checks if the packet can bypass the qdisc under certain conditions, such as when the queue is empty. Our further analysis (not included in this paper) revealed that for the 500 Mbps throughput, approximately 4% of packets are added to qdisc , and 96% of them are transmitted directly. If the qdisc can be bypassed, the sch\_direct\_xmit function releases the qdisc lock (which was acquired by \_\_dev\_xmit\_skb ) and then acquires a lock on the TX buffer. Acquiring this lock is a process-intensive task due to two reasons. First, the function sch\_direct\_xmit running on Core 0 must compete with the qdisc and the IRQ handler of the Ethernet NIC, both running on Core 1. For instance, this function needs to compete with the bcmgenet driver running on Core 1 when the driver has locked the TX buffer to perform operations such as reclaiming the buffer entries for the transmitted packets. Also, on Core 1, another instance of the function sch\_direct\_xmit may be running to transmit the packets out of qdisc . Note that the execution of qdisc is necessary for the 4% of packets added to the qdisc , because the core assigned to the Ethernet interface is the one responsible for handling packet transmissions once those are added to the qdisc .

As throughput increases, so does the number of packets that cannot bypass the qdisc . Further analysis (not included in this paper) revealed that for the maximum throughput level of the W2E path, 76% of packets are added to the qdisc , while the rest are directly transmitted. The increasing processing demand of the qdisc is reflected in the higher number of processor cycles consumed by the TX SoftIRQ and TX Qdisc stages. Specifically, comparing Figures 10(b) and (c) shows that increasing the throughput from 500 to 949 Mbps results in 3x and 61x increase in the number of processor cycles consumed by these two sub-stages on the W2E path, respectively. These significant growths are due to two reasons. First, the qdisc of the Ethernet interface implements the FQ-CoDel algorithm, a process-intensive algorithm that keeps track of the sojourn time of the packets belonging to each flow to avoid bufferbloat. Second, as discussed above, for the 24% of packets that bypass the qdisc , the system requires to compete and acquire a lock whenever access to the driver's TX buffer is needed.

## VI. RELATED WORK AND FUTURE OPPORTUNITIES

To the best of our knowledge, there is no study on understanding and enhancing the NIC-to-NIC data plane of WiFi APs. The existing works related to packet switching on WiFi APs are primarily focused on packet scheduling, queuing, and airtime fairness [3], [5], [22]-[27]. For instance, the increased latency and jitter due to excessive queueing (bufferbloat) is discussed in [3]. In another category of related works, tools have been proposed in [4] and [28] to facilitate event tracing and provide additional real-time insights into the operation of the WiFi stack. Such tools can be used in addition to the statistics provided by the kernel to better understand and enhance the kernel's data path. It is also worth noting that this paper, as well as the studies in [3]-[5], [22]-[28], all use SoftMAC-based WiFi NICs. We leave it to future work to investigate how FullMAC devices, which implement MAC functionalities in the NIC and do not utilize the mac80211 module, affect system operation and performance.

There exist several works on the evaluation and enhancement of software packet switching in high-performance settings utilizing servers with Xeon (x86-64) processors. The study [29] demonstrated that binding all forwarding operations of each packet to a single core reduces cache invalidation rate and spinlock contention compared to multi-core packet switching. A similar observation has been reported in [30]. Towards achieving predictable packet switching performance, [31] shows that cache contention is the leading cause of performance variations. They also examined the potential benefits of contention-aware task scheduling and found that it provides minimal performance improvement. Dynamic configurations based on workload demands are emphasized in [32]. Settings such as disabling Hyper-Threading (specific to x86-64 processors) and processor core isolation are shown to be crucial for achieving high and stable performance. The

study [33] shows that switching more than one million flows results in the considerably higher overhead of IP routing, which occurs when the routing table cannot fit entirely into the processor's cache. The disparity between processor utilization and the number of cycles consumed has been mentioned in [6]; however, they did not discuss the underlying causes of the problem.

Various works have modified the kernel path [34], [35] or proposed novel algorithms and methods for the dynamic configuration of packet-switching systems [36], [37]. To minimize delays for high-priority data flows, [36] proposes a method that involves assigning incoming packets to different RX buffers based on their priority levels and then employing various scheduling techniques to efficiently manage the resources assigned to processing incoming packets. The problem of finding optimal configuration parameters for a software switch to achieve maximum throughput and minimum latency has been addressed in [37]. Kafe [34] enhances kernel packet switching by introducing a cache-optimized SKB allocator that recycles pre-allocated buffers efficiently. This method reduces the overhead associated with frequent allocation and de-allocation of memory buffers, lowering cache misses. The authors in [35] proposed ZygOS, a system designed to achieve low tail latency in microsecond-scale networked tasks. ZygOS incorporates advanced interrupt handling and scheduling techniques to enhance performance. Given the flexibility of software switches in managing physical resources such as the number of processor cores and capacity of RX buffers, [11] propose a model to instantaneously estimate the minimum number of processor cores required to meet given QoS criteria.

In this paper, we leveraged several best practices, including IRQ affinity and core isolation, to enhance switching performance. Additional optimizations are orthogonal to our work and can be employed for further performance enhancements. For instance, dynamic IRQ affinity assignment and multiqueue NICs can be utilized to allocate resources based on the system's load. Furthermore, studying the impact of the number of flows and complex Network Function Virtualization (NFV) tasks (e.g., firewall, encryption, monitoring) on cache performance remains an area for future research.

Given the importance of communications between NIC and user-space applications and Virtual Machines (VMs) for cloud computing and NFV environments, understanding and enhancing this communication has also received attention. The study presented in [29] demonstrated that, under conditions of high traffic, a single core dedicated to packet switching and user-space processing allocates less than 2% of its resources to user-space tasks. Focused on packet switching between kernel and user-space, [8] demonstrated that more than 50% of the overhead is caused by packet copying operations. The overhead of traffic switching between the user-space and two NICs supporting 802.11ad and 802.11ac has been studied in [38]. Their utilized platform has four powerful cores and four small cores, and when the IRQs are assigned to small cores, sub-optimal throughput is observed. The authors of [39] revealed that packet exchanges between NIC and user-space applications do not accurately account for the application's processor demand. They proposed a kernel modification of the SoftIRQ processing to address this problem. In [40], the authors provide applications with real-time access to MAC primitives, enabling direct control over packet transmissions and retransmissions at the user space level.

As WiFi APs continue to be deployed in a wide range of applications, it is anticipated that an increasing number of NFV instances will run on these APs [41]-[44]. For example, implementing security functions like firewalls and intrusion detection directly on APs can provide faster threat responses, while deploying content caching applications at the edge can significantly reduce bandwidth consumption and improve user experience by delivering content more quickly. Therefore, an area of future work is to study the implications of packet switching performance for running NFV in the kernel or userspace and to adopt various optimization methods [10], [45], [46].

Existing works on user-space packet switching (i.e., kernel bypass methods) demonstrate superior performance compared to Linux's layer-2 and layer-3 switching [6], [11], [32]. In [6], the authors showed that for packet switching between two NICs, ther performance of the Linux bridge, Linux's IP forwarding, OVS-kernel and OVS-DPDK are 1.11, 1.58, 1.88 and 11.31 million packet per second, respectively. Implementation and analysis of user-space packet switching on WiFi APs is left as a future work.

## VII. CONCLUSION

As the number of WiFi APs and their packet switching rate and complexity increase, it becomes increasingly important to understand and enhance the operation of AP's data plane. In this paper, we presented a thorough analysis of packet switching on WiFi APs and targeted the following goals. The first goal is to rely on the statistics provided by the Linux kernel to understand the operation of the kernel's data paths for both W2E and E2W packet switching. In this regard, we showed that several factors can affect the meaning and reliability of these statistics. For instance, the kernel may not accurately account for the SoftIRQs executed within the IRQ context, the TX IRQs may contribute to the number of RX SoftIRQs, and device drivers may override NAPI operation. The second goal is to understand the differences in the two data paths, namely, E2W and W2E, regarding the components along each path and their overhead under various throughput loads. We showed that packet switching through these paths exhibits significant differences that affect core utilization and energy efficiency.

We hope that these findings pave the way towards understanding and enhancing the operation of APs. An area of future work includes dynamic system configuration, such as IRQ affinity assignment, based on the system's real-time load. Further study and improvement of APs operation using techniques such as cache-aware NFV, user-space packet switching, multiqueue drivers (with multiple RX and TX buffers), and Receive Packet Steering (RPS) are future research areas.

It is worth noting that in this work we used the Linux operating system on a certain type of hardware. While our primary aim is to identify overarching trends and establish

general principles, it is important to acknowledge that different operating systems (e.g., different Linux kernel versions) and device drivers (e.g., SoftMAC and FullMAC) may demonstrate varying operational and performance characteristics.

## ACKNOWLEDGMENT

This work was supported by NSF grant #2138633 and an internal grant from Santa Clara University's Center for Sustainability. The authors would like to thank Netgear for donating some of the materials used to conduct this research.

## REFERENCES

- [1] E. Reshef and C. Cordeiro, 'Future directions for Wi-Fi 8 and beyond,' IEEE Communications Magazine , vol. 60, no. 10, pp. 50-55, 2022.
- [2] F. M. Intelligence, 'Gigabit Wi-Fi Access Point Market Outlook for 2024 to 2034.' FMI, 2022. [Online]. Available: https://www. futuremarketinsights.com/reports/gigabit-wi-fi-access-point-market
- [3] T. Høiland-Jørgensen, M. Kazior, D. T¨ aht, P. Hurtig, and A. Brunstrom, 'Ending the Anomaly: Achieving Low Latency and Airtime Fairness in WiFi,' in USENIX Annual Technical Conference , 2017, pp. 139-151.
- [4] J. Sheth and B. Dezfouli, 'Monfi: A tool for high-rate, efficient, and programmable monitoring of wifi devices,' in IEEE Wireless Communications and Networking Conference (WCNC) . IEEE, 2021, pp. 1-7.
- [5] J. Sheth, C. Miremadi, A. Dezfouli, and B. Dezfouli, 'Eaps: Edgeassisted predictive sleep scheduling for 802.11 iot stations,' IEEE Systems Journal , vol. 16, no. 1, pp. 591-602, 2022.
- [6] P. Emmerich, D. Raumer, F. Wohlfart, and G. Carle, 'Performance characteristics of virtual switching,' in IEEE 3rd International Conference on Cloud Networking (CloudNet) , 2014, pp. 120-125.
- [7] C. Powell, C. Desiniotis, and B. Dezfouli, 'The fog development kit: A platform for the development and management of fog systems,' IEEE Internet of Things Journal , vol. 7, no. 4, pp. 3198-3213, 2020.
- [8] Q. Cai, S. Chaudhary, M. Vuppalapati, J. Hwang, and R. Agarwal, 'Understanding host network stack overheads,' in Proceedings of the ACM SIGCOMM , 2021, pp. 65-77.
- [9] P. Okelmann, L. Linguaglossa, F. Geyer, P. Emmerich, and G. Carle, 'Adaptive batching for fast packet processing in software routers using machine learning,' in IEEE 7th International Conference on Network Softwarization (NetSoft) . IEEE, 2021, pp. 206-210.
- [10] T. Zhang, L. Linguaglossa, M. Gallo, P. Giaccone, L. Iannone, and J. Roberts, 'Comparing the performance of state-of-the-art software switches for NFV,' in CoNEXT , 2019, pp. 68-81.
- [11] G. A. Gallardo, B. Baynat, and T. Begin, 'Performance modeling of virtual switching systems,' in IEEE 24th International Symposium on Modeling, Analysis and Simulation of Computer and Telecommunication Systems (MASCOTS) . IEEE, 2016, pp. 125-134.
- [12] J. Chen and B. Dezfouli, 'Predictable bandwidth slicing with open vswitch,' in IEEE Global Communications Conference (GLOBECOM) , 2021, pp. 1-6.
- [13] 'IPQ8074,' n.d., accessed: 2024-04-5. [Online]. Available: https://www.qualcomm.com/products/internet-of-things/ networking/wi-fi-networks/ipq8074
- [14] Qualcomm, 'QCS5430,' n.d., accessed: 2024-04-5. [Online]. Available: https://www.qualcomm.com/products/internet-of-things/industrial/ industrial-automation/qcs5430
- [15] Broadcom, 'BCM5420: Single Port RGMII SGMII Gigabit Ethernet Transceiver,' n.d., accessed: 2024-04-10. [Online]. Available: https://www.broadcom.com/products/ethernet-connectivity/ phy-and-poe/copper/gigabit/bcm54210
- [16] B. Dezfouli, I. Amirtharaj, and C.-C. Li, 'EMPIOT: An energy measurement platform for wireless IoT devices,' Journal of Network and Computer Applications , vol. 121, pp. 135-148, 2018.
- [17] The Linux Kernel, 'ftrace -Function Tracer,' n.d., accessed: 202402-10. [Online]. Available: https://www.kernel.org/doc/html/v6.0/trace/ ftrace.html
- [18] SIOTLAB, 'Understanding and Enhancing Linux Kernel-based Packet Switching on WiFi Access Points,' 2024. [Online]. Available: https://github.com/SIOTLAB/wifi-packet-switching-analysis
- [19] V. Rothberg, 'Interrupt handling in Linux,' University of Erlangen, Germany, Tech. Rep. CS-2015-07, November 2015.
- [20] Linux Wireless, 'iwlwifi,' https://wireless.wiki.kernel.org/en/users/ drivers/iwlwifi, n.d., accessed: 2024-03-12.
- [21] Realtek Corporation, 'A repo for the newest realtek rtw89 codes,' https: //github.com/lwfinger/rtw89, n.d., accessed: 2024-04-3.
- [22] T. Høiland-Jørgensen, D. T¨ aht, and J. Morton, 'Piece of cake: a comprehensive queue management solution for home gateways,' in IEEE International Symposium on Local and Metropolitan Area Networks (LANMAN) . IEEE, 2018, pp. 37-42.
- [23] M. Richart, J. Baliosian, J. Serrati, J.-L. Gorricho, R. Ag¨ uero, and N. Agoulmine, 'Resource allocation for network slicing in WiFi access points,' in 13th International conference on network and service management (CNSM) . IEEE, 2017, pp. 1-4.
- [24] M. Richart, J. Baliosian, J. Serrat, J.-L. Gorricho, and R. Ag¨ uero, 'Slicing with guaranteed quality of service in WiFi networks,' IEEE Transactions on Network and Service Management , vol. 17, no. 3, pp. 1822-1837, 2020.
- [25] P. H. Isolani, N. Cardona, C. Donato, G. A. P´ erez, J. M. Marquez-Barja, L. Z. Granville, and S. Latr´ e, 'Airtime-based resource allocation modeling for network slicing in IEEE 802.11 RANs,' IEEE Communications Letters , vol. 24, no. 5, pp. 1077-1080, 2020.
- [26] F. Canbal, Y. B. Ozgun, M. S. Kuran, G. Venkatesan, and N. Canpolat, 'Wi-fi qos management program: Bridging the qos gap of multimedia traffic in wi-fi networks,' IEEE Communications Magazine , 2023.
- [27] S. Deng, X. Guan, Z. Sun, S. Zhao, T. Shen, X. Chen, T. Duan, Y. Wang, J. Pan, Y. Wu et al. , 'Coorp: Satisfying low-latency and high-throughput requirements of wireless network for coordinated robotic learning,' IEEE Internet of Things Journal , vol. 10, no. 3, pp. 1946-1960, 2022.
- [28] J. Sheth, V. Ramanna, and B. Dezfouli, 'Flip: A framework for leveraging ebpf to augment WiFi access points and investigate network performance,' in Proceedings of the 19th ACM International Symposium on Mobility Management and Wireless Access , 2021, pp. 117-125.
- [29] R. Bolla and R. Bruschi, 'PC-based software routers: High performance and application service support,' in Proceedings of the ACM workshop on Programmable routers for extensible services of tomorrow , 2008, pp. 27-32.
- [30] M. Dobrescu, N. Egi, K. Argyraki, B.-G. Chun, K. Fall, G. Iannaccone, A. Knies, M. Manesh, and S. Ratnasamy, 'Routebricks: Exploiting parallelism to scale software routers,' in ACM SIGOPS 22nd symposium on Operating systems principles , 2009, pp. 15-28.
- [31] M. Dobrescu, K. Argyraki, and S. Ratnasamy, 'Toward predictable performance in software packet-processing platforms,' in USENIX Symposium on Networked Systems Design and Implementation (NSDI) , 2012, pp. 141-154.
- [32] V. Fang, T. L´ evai, S. Han, S. Ratnasamy, B. Raghavan, and J. Sherry, 'Evaluating software switches: Hard or hopeless?' EECS Department, University of California, Berkeley, Tech. Rep. UCB/EECS-2018-136, Oct 2018.
- [33] D. Raumer, F. Wohlfart, D. Scholz, P. Emmerich, and G. Carle, 'Performance exploration of software-based packet processing systems,' Leistungs-, Zuverl¨ssigkeits-und Verl¨sslichkeitsbewertung von Kommua a nikationsnetzen und verteilten Systemen , vol. 8, 2015.
- [34] C.-H. Hong, K. Lee, J. Hwang, H. Park, and C. Yoo, 'Kafe: Can os kernels forward packets fast enough for software routers?' IEEE/ACM Transactions on Networking , vol. 26, no. 6, pp. 2734-2747, 2018.
- [35] G. Prekas, M. Kogias, and E. Bugnion, 'Zygos: Achieving low tail latency for microsecond-scale networked tasks,' in Proceedings of the 26th Symposium on Operating Systems Principles (SOSP) , 2017, p. 325-341.
- [36] T. Meyer, D. Raumer, F. Wohlfart, B. E. Wolfinger, and G. Carle, 'Low latency packet processing in software routers,' in International Symposium on Performance Evaluation of Computer and Telecommunication Systems (SPECTS) . IEEE, 2014, pp. 556-563.
- [37] K. Suksomboon, N. Matsumoto, S. Okamoto, M. Hayashi, and Y. Ji, 'Configuring a software router by the erlangk -based packet latency prediction,' IEEE Journal on Selected Areas in Communications , vol. 36, no. 3, pp. 422-437, 2018.
- [38] I. Khan, M. Ghoshal, S. Aggarwal, D. Koutsonikolas, and J. Widmer, 'Multipath tcp in smartphones equipped with millimeter wave radios,' in Proceedings of the 15th ACM Workshop on Wireless Network Testbeds, Experimental evaluation &amp; Characterization , 2022, pp. 54-60.
- [39] J. Khalid, E. Rozner, W. Felter, C. Xu, K. Rajamani, A. Ferreira, and A. Akella, 'Iron: Isolating network-based cpu in container environments,' in 15th USENIX Symposium on Networked Systems Design and Implementation (NSDI) , 2018, pp. 313-328.
- [40] G. Cena, S. Scanzio, and A. Valenzano, 'SDMAC: a software-defined MAC for Wi-Fi to ease implementation of soft real-time applications,'

IEEE Transactions on Industrial Informatics , vol. 15, no. 6, pp. 31433154, 2018.

- [41] V. M. Mart´ ınez, M. R. Ribeiro, and V. F. Mota, 'Wi-Fi faces the new wireless ecosystem: a critical review,' Annals of Telecommunications , pp. 1-17, 2023.
- [42] B. Wu, J. Zeng, L. Ge, S. Shao, Y. Tang, and X. Su, 'Resource allocation optimization in the NFV-enabled MEC network based on game theory,' in IEEE International Conference on Communications (ICC) . IEEE, 2019, pp. 1-7.
- [43] S. Yang, F. Li, S. Trajanovski, R. Yahyapour, and X. Fu, 'Recent advances of resource allocation in network function virtualization,' IEEE Transactions on Parallel and Distributed Systems , vol. 32, no. 2, pp.

295-314, 2020.

- [44] R. Riggio, T. Rasheed, and R. Narayanan, 'Virtual network functions orchestration in enterprise wlans,' in IFIP/IEEE International Symposium on Integrated Network Management (IM) . IEEE, 2015, pp. 1220-1225.
- [45] R. Iyer, L. Pedrosa, A. Zaostrovnykh, S. Pirelli, K. Argyraki, and G. Candea, 'Performance contracts for software network functions,' in USENIX Symposium on Networked Systems Design and Implementation (NSDI) , 2019, pp. 517-530.
- [46] F. Pereira, F. M. Ramos, and L. Pedrosa, 'Automatic parallelization of software network functions,' in USENIX Symposium on Networked Systems Design and Implementation (NSDI) , 2024, pp. 1531-1550.
Shiqi Zhang Mridul Gupta Behnam Dezfouli
Understanding and Enhancing Linux Kernel-based Packet Switching on WiFi Access Points
As the number of WiFi devices and their traffic demands continue to rise, the
need for a scalable and high-performance wireless infrastructure becomes
increasingly essential. Central to this infrastructure are WiFi Access Points
(APs), which facilitate packet switching between Ethernet and WiFi interfaces.
Despite APs' reliance on the Linux kernel's data plane for packet switching,
the detailed operations and complexities of switching packets between Ethernet
and WiFi interfaces have not been investigated in existing works. This paper
makes the following contributions towards filling this research gap. Through
macro and micro-analysis of empirical experiments, our study reveals insights
in two distinct categories. Firstly, while the kernel's statistics offer
valuable insights into system operations, we identify and discuss potential
pitfalls that can severely affect system analysis. For instance, we reveal the
implications of device drivers on the meaning and accuracy of the statistics
related to packet-switching tasks and processor utilization. Secondly, we
analyze the impact of the packet switching path and core configuration on
performance and power consumption. Specifically, we identify the differences in
Ethernet-to-WiFi and WiFi-to-Ethernet data paths regarding processing
components, multi-core utilization, and energy efficiency. We show that the
WiFi-to-Ethernet data path leverages better multi-core processing and exhibits
lower power consumption.