{"id":567,"date":"2026-05-20T02:53:33","date_gmt":"2026-05-20T02:53:33","guid":{"rendered":"https:\/\/sunpathservers.net\/blog\/?p=567"},"modified":"2026-05-25T18:05:16","modified_gmt":"2026-05-25T18:05:16","slug":"tuning-linux-iops-and-memory-for-ethereum-nodes","status":"publish","type":"post","link":"https:\/\/sunpathservers.net\/blog\/tuning-linux-iops-and-memory-for-ethereum-nodes\/","title":{"rendered":"Tuning Linux IOPS and Memory for Ethereum Nodes"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In Web3 infrastructure, keeping a validator node or RPC endpoint perfectly synced comes down to one metric: <strong>Database I\/O<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As state history balloons, the Ethereum Execution Layer (EL)\u2014whether you run Geth, Nethermind, or Besu\u2014relentlessly hammers the underlying storage subsystem with random reads and writes. If your disk infrastructure cannot sustain the required Input\/Output Operations Per Second (IOPS), or if your Linux kernel is misconfigured, your node will suffer from high block-validation latency, miss critical attestations, and fall out of sync.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide walks through advanced system hardening, Linux kernel tuning, and filesystem configurations designed to maximize IOPS and eliminate disk bottlenecks on bare-metal blockchain hardware.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. File System Architecture: Abandon ext4 for XFS or ZFS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">While <code>ext4<\/code> is the reliable default for standard Linux environments, it suffers from severe journaling and lock contention under the aggressive parallel write loads of an active blockchain database.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why XFS Wins for Execution Databases<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">XFS handles massive files and high-concurrency parallel I\/O far better than ext4 because it uses allocation groups. It spreads metadata across the disk, preventing a single internal bottleneck when multiple threads write to the database (like Nethermind\u2019s RocksDB layout) simultaneously.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When formatting your dedicated NVMe drive for node data, use optimal block sizing:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"\" style=\"font-size:clamp(16px, 1rem, 24px);line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sudo mkfs.xfs -f -d agcount=32 -l size=128m \/dev\/nvme0n1<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F69D50\">sudo<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">mkfs.xfs<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">-f<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">-d<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">agcount=<\/span><span style=\"color: #6CB6FF\">32<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">-l<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">size=<\/span><span style=\"color: #6CB6FF\">128<\/span><span style=\"color: #96D0FF\">m<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">\/dev\/nvme0n1<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>agcount=32<\/code><\/strong>: Increases the number of allocation groups, allowing up to 32 parallel allocation operations.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>size=128m<\/code><\/strong>: Expands the log section size to prevent log buffer wrapping during intense sync periods.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. Advanced Disk Tuning via <code>sysfs<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Linux defaults are optimized for rotational hard drives or generic cloud storage. For enterprise-grade NVMe drives hosting Web3 databases, you need to manually alter how the kernel schedules and batches disk requests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create a persistent <code>udev<\/code> rule to optimize your NVMe device performance directly:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"\" style=\"font-size:clamp(16px, 1rem, 24px);line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># \/etc\/udev\/rules.d\/99-nvme-performance.rules\nACTION==\"add|change\", KERNEL==\"nvme*\", ATTR{queue\/scheduler}=\"none\", ATTR{queue\/read_ahead_kb}=\"0\", ATTR{queue\/nr_requests}=\"256\"<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #768390\"># \/etc\/udev\/rules.d\/99-nvme-performance.rules<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">ACTION<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">=&quot;add|change&quot;,<\/span><span style=\"color: #ADBAC7\"> KERNEL<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">=&quot;nvme*&quot;,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">ATTR<\/span><span style=\"color: #ADBAC7\">{queue\/scheduler}=<\/span><span style=\"color: #F69D50\">&quot;none&quot;<\/span><span style=\"color: #F69D50\">,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">ATTR{queue\/read_ahead_kb}=&quot;0&quot;,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">ATTR{queue\/nr_requests}=&quot;256&quot;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">The Breakdown:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>scheduler=none<\/code><\/strong>: NVMe drives possess thousands of internal hardware queues. Software-level I\/O schedulers like <code>bfq<\/code> or <code>kyber<\/code> add CPU overhead. Setting this to <code>none<\/code> (or <code>noop<\/code>) passes the raw queries straight to the hardware controller.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>read_ahead_kb=0<\/code><\/strong>: Blockchains request unpredictable, highly random chunks of data. Standard Linux read-ahead pulls subsequent blocks into memory assuming linear reading. Setting this to <code>0<\/code> prevents the disk from wasting precious IOPS fetching data the node never requested.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3. Kernel Virtual Memory (<code>sysctl<\/code>) Hardening<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To prevent your operating system from suddenly locking up or freezing execution layer tasks while flushing data to disk, you must tune Linux&#8217;s dirty page memory management.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Add the following network and memory overrides to your sysctl configurations:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"\" style=\"font-size:clamp(16px, 1rem, 24px);line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># \/etc\/sysctl.d\/99-ethereum-node.conf\n\n# Force kernel to background-write dirty pages early to avoid massive write spikes\nvm.dirty_background_ratio = 5\nvm.dirty_ratio = 10\n\n# Prevent aggressive swapping out of active execution memory\nvm.swappiness = 10\n\n# Maximize network socket buffers to capture heavy P2P gossip traffic (Discv5)\nnet.core.rmem_max = 16777216\nnet.core.wmem_max = 16777216<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #768390\"># \/etc\/sysctl.d\/99-ethereum-node.conf<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #768390\"># Force kernel to background-write dirty pages early to avoid massive write spikes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">vm.dirty_background_ratio<\/span><span style=\"color: #ADBAC7\"> = 5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">vm.dirty_ratio<\/span><span style=\"color: #ADBAC7\"> = 10<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #768390\"># Prevent aggressive swapping out of active execution memory<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">vm.swappiness<\/span><span style=\"color: #ADBAC7\"> = 10<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #768390\"># Maximize network socket buffers to capture heavy P2P gossip traffic (Discv5)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">net.core.rmem_max<\/span><span style=\"color: #ADBAC7\"> = 16777216<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">net.core.wmem_max<\/span><span style=\"color: #ADBAC7\"> = 16777216<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Apply the changes instantly:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"\" style=\"font-size:clamp(16px, 1rem, 24px);line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sudo sysctl --system<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F69D50\">sudo<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">sysctl<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">--system<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">4. Execution Client Database Memory Sizing (The Silver Bullet)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No matter how fast your physical NVMe drive is, <strong>RAM is always faster.<\/strong> The absolute cleanest way to protect your disk IOPS is to cache as much of the active state trie in memory as possible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When setting your client runtime flags, ensure you are assigning an aggressive cache allocation. For a machine equipped with 64 GB of RAM, you should carve out a massive block exclusively for the database cache:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>For Geth:<\/strong> Use the <code>--cache<\/code> flag (value in Megabytes). Target at least <code>16384<\/code> to <code>24576<\/code> (16-24 GB).<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"\" style=\"font-size:clamp(16px, 1rem, 24px);line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>geth --cache 24576 --datadir \/mnt\/nvme\/ethereum ...<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F69D50\">geth<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">--cache<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24576<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">--datadir<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">\/mnt\/nvme\/ethereum<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">...<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"\" style=\"font-size:clamp(16px, 1rem, 24px);line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>* **For Nethermind:** Modify the `DbConfig` settings in your `.cfg` file to scale up memory buffers:\n  ```json\n  \"DbConfig\": {\n    \"CacheSize\": 25769803776\n  }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">* **For Nethermind:** Modify the `DbConfig` settings in your `.cfg` file to scale up memory buffers:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  ```json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #96D0FF\">&quot;DbConfig&quot;<\/span><span style=\"color: #ADBAC7\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #8DDB8C\">&quot;CacheSize&quot;<\/span><span style=\"color: #ADBAC7\">: <\/span><span style=\"color: #6CB6FF\">25769803776<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Monitoring the Bottleneck<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once configured, verify your disk isn&#8217;t hitting saturation limits using <code>iostat<\/code>. Run the following command in your terminal while your nodes are processing block states:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"\" style=\"font-size:clamp(16px, 1rem, 24px);line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>iostat -xz 1 nvme0n1<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F69D50\">iostat<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">-xz<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">nvme0n1<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Keep a close eye on the <code>%util<\/code> (percentage of CPU time during which I\/O requests were issued) and <code>await<\/code> (average time in milliseconds for I\/O requests to be served). If <code>%util<\/code> hovers near 100% or <code>await<\/code> spikes past 5-10ms during peak gossip slots, it&#8217;s a clear sign your drive is choking on data\u2014meaning it&#8217;s time to upgrade your hardware or dive deeper into client cache allocation.<\/p>\n\n\n\n<div style=\"background-color: #121212; border-left: 4px solid #FFCF4D; padding: 25px 30px; margin-top: 40px; border-radius: 0 8px 8px 0; font-family: sans-serif;\">\n    <h4 style=\"color: #FFCF4D; margin-top: 0; margin-bottom: 14px; font-size: 1.5rem; letter-spacing: 1px; text-transform: uppercase; font-weight: 700;\">\n        \u26a1 Bare-Metal Architecture for Ethereum Nodes\n    <\/h4>\n    <p style=\"color: #e0e0e0; font-size: 1.5rem; line-height: 1.6; margin-bottom: 18px;\">\n        Even the most optimized execution clients like Nethermind or Geth will choke if your state trie is fighting for disk IOPS on a crowded virtual machine. To avoid missed attestations and dropped peers, you need dedicated hardware that can handle intense, continuous multi-threaded cryptographic computation.\n    <\/p>\n    <p style=\"color: #e0e0e0; font-size: 1.5rem; line-height: 1.6; margin-bottom: 0;\">\n        \ud83d\udc49 <a href=\"https:\/\/sunpathservers.net\/sunpath-inventory.html\" style=\"color: #40FFFF; text-decoration: none; border-bottom: 1px dashed #40FFFF;\">\n            View Our Live Unmanaged Server Inventory\n        <\/a> \n        to deploy raw, bare-metal configurations packed with enterprise NVMe storage, massive RAM caching capacity, and high-frequency CPUs built for node architecture.\n    <\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In Web3 infrastructure, keeping a validator node or RPC endpoint perfectly synced comes down to one metric: Database I\/O. As state history balloons, the Ethereum Execution Layer (EL)\u2014whether you run Geth, Nethermind, or Besu\u2014relentlessly hammers the underlying storage subsystem with random reads and writes. If your disk infrastructure cannot sustain the required Input\/Output Operations Per [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":533,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[111],"tags":[303,264,114,271,422,421,128,118,423],"class_list":["post-567","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web3-infrastructure","tag-ethereum","tag-geth","tag-kernel-tuning","tag-nethermind","tag-node-optimization-2","tag-nvme-iops-2","tag-virtual-memory","tag-web3-infrastructure","tag-xfs-filesystem"],"_links":{"self":[{"href":"https:\/\/sunpathservers.net\/blog\/wp-json\/wp\/v2\/posts\/567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sunpathservers.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sunpathservers.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sunpathservers.net\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/sunpathservers.net\/blog\/wp-json\/wp\/v2\/comments?post=567"}],"version-history":[{"count":0,"href":"https:\/\/sunpathservers.net\/blog\/wp-json\/wp\/v2\/posts\/567\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sunpathservers.net\/blog\/wp-json\/wp\/v2\/media\/533"}],"wp:attachment":[{"href":"https:\/\/sunpathservers.net\/blog\/wp-json\/wp\/v2\/media?parent=567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sunpathservers.net\/blog\/wp-json\/wp\/v2\/categories?post=567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sunpathservers.net\/blog\/wp-json\/wp\/v2\/tags?post=567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}