From 06cf01cd1ef7c09c8490e7a6c87f56162d40f6cc Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 11 Feb 2022 12:25:53 +0100 Subject: [PATCH] Kernel/E1000: Bump RX/TX buffer count to 256/256 We were frequently dropping packets when downloading large files. Then we had to wait for TCP retransmission which slowed things down. This patch dramatically improves E1000 throughput by increasing the number of RX/TX buffers from 32/8 to 256/256. The largest chunk of JavaScript from Discord now downloads in roughly 1 second instead of 7 seconds. :^) --- Kernel/Net/Intel/E1000NetworkAdapter.cpp | 4 ++-- Kernel/Net/Intel/E1000NetworkAdapter.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Kernel/Net/Intel/E1000NetworkAdapter.cpp b/Kernel/Net/Intel/E1000NetworkAdapter.cpp index 8d3db08ae8..5fc6ec6d86 100644 --- a/Kernel/Net/Intel/E1000NetworkAdapter.cpp +++ b/Kernel/Net/Intel/E1000NetworkAdapter.cpp @@ -231,8 +231,8 @@ UNMAP_AFTER_INIT E1000NetworkAdapter::E1000NetworkAdapter(PCI::Address address, : NetworkAdapter(move(interface_name)) , PCI::Device(address) , IRQHandler(irq) - , m_rx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(e1000_rx_desc) * number_of_rx_descriptors + 16).release_value_but_fixme_should_propagate_errors(), "E1000 RX Descriptors", Memory::Region::Access::ReadWrite).release_value()) - , m_tx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(e1000_tx_desc) * number_of_tx_descriptors + 16).release_value_but_fixme_should_propagate_errors(), "E1000 TX Descriptors", Memory::Region::Access::ReadWrite).release_value()) + , m_rx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(e1000_rx_desc) * number_of_rx_descriptors).release_value_but_fixme_should_propagate_errors(), "E1000 RX Descriptors", Memory::Region::Access::ReadWrite).release_value()) + , m_tx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(e1000_tx_desc) * number_of_tx_descriptors).release_value_but_fixme_should_propagate_errors(), "E1000 TX Descriptors", Memory::Region::Access::ReadWrite).release_value()) { } diff --git a/Kernel/Net/Intel/E1000NetworkAdapter.h b/Kernel/Net/Intel/E1000NetworkAdapter.h index 0ce4806b6c..b0905e231a 100644 --- a/Kernel/Net/Intel/E1000NetworkAdapter.h +++ b/Kernel/Net/Intel/E1000NetworkAdapter.h @@ -79,8 +79,8 @@ protected: void receive(); - static constexpr size_t number_of_rx_descriptors = 32; - static constexpr size_t number_of_tx_descriptors = 8; + static constexpr size_t number_of_rx_descriptors = 256; + static constexpr size_t number_of_tx_descriptors = 256; IOAddress m_io_base; VirtualAddress m_mmio_base;