Files
linux/include/linux
Caleb Sander Mateos 61bf0009a7 dim: pass dim_sample to net_dim() by reference
net_dim() is currently passed a struct dim_sample argument by value.
struct dim_sample is 24 bytes. Since this is greater 16 bytes, x86-64
passes it on the stack. All callers have already initialized dim_sample
on the stack, so passing it by value requires pushing a duplicated copy
to the stack. Either witing to the stack and immediately reading it, or
perhaps dereferencing addresses relative to the stack pointer in a chain
of push instructions, seems to perform quite poorly.

In a heavy TCP workload, mlx5e_handle_rx_dim() consumes 3% of CPU time,
94% of which is attributed to the first push instruction to copy
dim_sample on the stack for the call to net_dim():
// Call ktime_get()
  0.26 |4ead2:   call   4ead7 <mlx5e_handle_rx_dim+0x47>
// Pass the address of struct dim in %rdi
       |4ead7:   lea    0x3d0(%rbx),%rdi
// Set dim_sample.pkt_ctr
       |4eade:   mov    %r13d,0x8(%rsp)
// Set dim_sample.byte_ctr
       |4eae3:   mov    %r12d,0xc(%rsp)
// Set dim_sample.event_ctr
  0.15 |4eae8:   mov    %bp,0x10(%rsp)
// Duplicate dim_sample on the stack
 94.16 |4eaed:   push   0x10(%rsp)
  2.79 |4eaf1:   push   0x10(%rsp)
  0.07 |4eaf5:   push   %rax
// Call net_dim()
  0.21 |4eaf6:   call   4eafb <mlx5e_handle_rx_dim+0x6b>

To allow the caller to reuse the struct dim_sample already on the stack,
pass the struct dim_sample by reference to net_dim().

Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Reviewed-by: Arthur Kiyanovski <akiyano@amazon.com>
Reviewed-by: Louis Peens <louis.peens@corigine.com>
Link: https://patch.msgid.link/20241031002326.3426181-2-csander@purestorage.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-11-03 12:36:54 -08:00
..
2024-10-22 15:54:11 +02:00
2024-09-01 10:04:56 -04:00
2024-04-24 11:06:26 -07:00
2024-04-25 20:55:49 -07:00
2024-09-09 16:39:18 -07:00
2024-08-29 04:32:32 -06:00
2024-08-28 06:53:58 -07:00
2024-10-22 15:42:56 -07:00
2024-04-29 16:28:07 -07:00
2024-07-08 01:51:05 -06:00
2024-09-03 21:15:36 -07:00
2024-06-24 18:29:20 +02:00
2024-04-23 09:03:37 +09:00
2024-06-11 12:57:49 -05:00
2024-02-20 14:22:55 -05:00
2024-02-20 14:22:51 -05:00
2024-10-01 17:01:40 +02:00
2024-05-19 14:36:17 -07:00
2024-09-09 16:39:05 -07:00
2024-08-29 10:39:37 +02:00
2024-08-23 20:50:19 +02:00
2024-02-14 11:14:40 +01:00
2024-07-31 13:49:48 +01:00
2024-08-08 17:15:02 +02:00
2024-06-24 22:24:56 -07:00
2024-08-27 14:12:51 +02:00
2024-09-03 21:15:46 -07:00
2024-09-20 18:28:26 +03:00
2024-09-01 20:26:03 -07:00
2024-09-09 16:39:04 -07:00
2024-07-03 19:30:23 -07:00
2024-02-17 16:20:41 +01:00
2024-05-03 10:44:42 +01:00
2024-07-10 12:14:54 -07:00
2024-08-11 17:04:29 +01:00
2024-07-31 09:57:18 -07:00
2024-09-03 21:15:44 -07:00
2024-07-28 16:47:51 -06:00
2024-09-23 15:03:30 -04:00
2024-06-24 22:25:02 -07:00
2024-03-26 11:07:20 -07:00
2024-08-30 08:22:38 +02:00
2024-09-19 14:25:32 -05:00
2024-09-19 14:25:34 -05:00
2024-09-17 01:06:59 -07:00
2024-03-13 12:53:53 -07:00
2024-03-13 12:53:53 -07:00
2024-09-05 11:14:14 +02:00
2024-04-02 18:03:32 -07:00
2024-03-08 12:05:10 +01:00
2024-02-15 12:17:28 -05:00
2024-04-09 10:53:44 +02:00
2024-09-11 20:44:31 -07:00
2024-09-11 20:44:32 -07:00
2024-08-12 23:50:58 +05:30
2024-05-04 18:57:21 +02:00
2024-07-10 07:59:03 +02:00
2024-04-08 11:49:02 +01:00
2024-05-06 12:05:00 +02:00
2024-08-06 13:42:40 +02:00
2024-09-12 12:20:39 +02:00
2024-09-09 16:39:04 -07:00
2024-09-01 20:25:43 -07:00
2024-06-24 18:16:44 +01:00
2024-02-09 12:07:48 +00:00
2024-04-25 20:55:48 -07:00