diff --git a/feed_rss_created.xml b/feed_rss_created.xml index 2dfcf293..b8dc82f4 100644 --- a/feed_rss_created.xml +++ b/feed_rss_created.xml @@ -1 +1 @@ - Andreas Karis BlogAndreas Karis' blog about anything Kubernetes, OpenShift, Linux and Networkinghttps://andreaskaris.github.io/blog/en Fri, 19 Jul 2024 15:36:59 -0000 Fri, 19 Jul 2024 15:36:59 -0000 1440 MkDocs RSS plugin - v1.11.1 SELinux Cheat Sheet <h1>SELinux Cheat Sheet</h1><h3>Reading SELinux status</h3><p>| Command | Description | Examples ||---|---|---|| cat /etc/selinux/config | Get SELinux boot configu...</p>https://andreaskaris.github.io/blog/linux/selinux-cheatsheet/ Fri, 19 Jul 2024 15:04:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/selinux-cheatsheet/ Protect Lenovo laptop battery <p>In order to protect your Lenovo battery, you can set charge start and end thresholds.According to [anecdotal evidence](https://linrunner.de/tlp/faq/battery....</p>https://andreaskaris.github.io/blog/linux/protect-lenovo-battery/ Thu, 20 Jun 2024 14:59:35 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/protect-lenovo-battery/ Netlink and MAC addresses <h2>Netlink address fields IFLA_ADDRESS, IFLA_BROADCAST and IFLA_PERM_ADDRESS</h2><p>A few days ago, I had to figure out how applications such as iproute2 read the ...</p>https://andreaskaris.github.io/blog/networking/netlink-address-fields/ Sun, 12 May 2024 21:25:38 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/netlink-address-fields/ CPU isolation in Red Hat OpenShift Container Platform <h2>CPU isolation in Red Hat OpenShift Container Platform</h2><p>Two complementary features allow admins to partition the node's CPUs according to their needs. The ...</p>https://andreaskaris.github.io/blog/openshift/cpu-isolation-in-openshift/ Mon, 06 May 2024 20:08:03 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/cpu-isolation-in-openshift/ udev rules to apply ethtool settings <h1>udev rules to apply ethtool settings</h1><p>In order to apply specific ethtool settings to all interfaces matching a specific regular expression, run:```cat &lt;&lt;...</p>https://andreaskaris.github.io/blog/linux/udev-ethtool/ Mon, 29 Apr 2024 19:44:04 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/udev-ethtool/ OpenShift with iSCSI multipath <h2>Kubernets iSCSI volume driver</h2><p>The iSCSI volume driver can work as both a single path iSCSI initiator or with multipath.For some information about the dr...</p>https://andreaskaris.github.io/blog/openshift/openshift-with-multipath/ Fri, 12 Jan 2024 17:53:42 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/openshift-with-multipath/ kernel-ml on OpenShift <h1>kernel-ml on OpenShift</h1><p>In order to find out if a kernel bug was already fixed upstream, it may sometimes be necessary to test the upstreamkernel on top o...</p>https://andreaskaris.github.io/blog/openshift/kernel-ml-on-openshift/ Thu, 23 Nov 2023 18:41:02 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/kernel-ml-on-openshift/ Seccomp defaults in Red Hat OpenShift Container Platform <h1>Seccomp defaults in Red Hat OpenShift Container Platform</h1><p>Seccomp can be used to restrict the syscalls that processes running inside a container are allowe...</p>https://andreaskaris.github.io/blog/openshift/seccomp-defaults-ocp/ Mon, 25 Sep 2023 19:20:43 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/seccomp-defaults-ocp/ Hands-on with OVN Interconnection <h1>Hands-on with OVN Interconnection (OVN IC)</h1><p><a href="https://docs.ovn.org/en/latest/tutorials/ovn-interconnection.html">OVN Interconnection</a> (OVN IC) allows admini...</p>https://andreaskaris.github.io/blog/networking/ovn-interconnection/ Mon, 11 Sep 2023 19:06:05 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/ovn-interconnection/ rpm-ostreed failed to find image <h2>rpm-ostreed failed to find image</h2><p>Today, I ran into a strange issue after messing around a bit too much with OpenShift's Machine Config Operator.After de...</p>https://andreaskaris.github.io/blog/openshift/rpm-ostree-failed-to-find-image/ Tue, 15 Aug 2023 20:03:49 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/rpm-ostree-failed-to-find-image/ Workaround for org.gnome.shell.overrides not installed <h1>Settings schema 'org.gnome.shell.overrides' is not installed</h1><p>I recently upgraded to Fedora 38 and Gnome 44, and one of my installed applications give this...</p>https://andreaskaris.github.io/blog/linux/org-gnome-shell-overrides/ Wed, 03 May 2023 19:38:38 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/org-gnome-shell-overrides/ DedicatedServiceMonitors in OpenShift Monitoring <h2>DedicatedServiceMonitors in Red Hat OpenShift Monitoring</h2><h3>Introduction</h3><p>By default, OpenShift's Prometheus stack will pull pod CPU and memory usage fr...</p>https://andreaskaris.github.io/blog/openshift/dedicated-service-monitors/ Wed, 03 May 2023 15:53:44 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/dedicated-service-monitors/ Using cgroups for CFS bandwidth control <h1>Using cgroups for CFS bandwidth control (CPU quotas)</h1><p>CFS bandwidth control is a feature that allows you to limit the amount of CPU time that a control gro...</p>https://andreaskaris.github.io/blog/linux/cgroups_cpu_quota/ Mon, 27 Mar 2023 11:28:05 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/cgroups_cpu_quota/ How kubelet monitors filesystems <h1>How kubelet monitors filesystems</h1><p>Kubelet can monitor 2 file systems, nodefs and imagefs. nodefs is auto-discovered by the presence of <code>/var/lib/kubelet</code>....</p>https://andreaskaris.github.io/blog/openshift/kubelet-filesystems/ Wed, 22 Mar 2023 17:03:35 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/kubelet-filesystems/ Golang IP address conversion <h2>IP address conversion with golang</h2><h3>Finding an IP network's broadcast IP</h3><p>The following function calculates the broadcast IP for both IPv4 and IPv6 net...</p>https://andreaskaris.github.io/blog/coding/golang-ip-conversion/ Fri, 24 Feb 2023 12:45:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/golang-ip-conversion/ Controller Reconciliation <h2>Reconciliation with the Operator SDK</h2><p>In the Operator SDK, controllers implement the [Reconciler](https://github.com/kubernetes-sigs/controller-runtime/bl...</p>https://andreaskaris.github.io/blog/coding/operator-sdk-reconciliation/ Fri, 24 Feb 2023 12:45:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/operator-sdk-reconciliation/ My vimrc <h1>My vimrc</h1><p>Below my configuration for vim which I use for go and python development:~~~cat &lt;&lt;'EOF' &gt; ~/.vimrccall plug#begin() Plug 'vim-airline/vim-ai...</p>https://andreaskaris.github.io/blog/coding/vimrc/ Fri, 24 Feb 2023 12:45:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/vimrc/ SCCs and mutating webhooks - a lesson learned <p><img alt="title" src="https://user-images.githubusercontent.com/3291433/220175185-f58bf274-e886-45ef-ab32-92b6cd3f1739.png"></p><h1>SCCs and mutating webhooks - or how to lear...</h1>https://andreaskaris.github.io/blog/openshift/openshift-scc-with-mutating-webhooks/ Mon, 13 Feb 2023 22:16:16 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/openshift-scc-with-mutating-webhooks/ Building custom release images for OpenShift <h2>Building custom release images for OpenShift</h2><h3>Using custom container image for a specific component / operator</h3><p>The following example builds a custom ...</p>https://andreaskaris.github.io/blog/openshift/ocp-custom-release-image/ Wed, 19 Oct 2022 14:17:44 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/ocp-custom-release-image/ OVN standalone on Fedora <h1>OVN standalone on Fedora</h1><p>For instruction to build OVN and OVS from source, see: https://docs.ovn.org/en/latest/intro/install/fedora.html#fedora-rhel-7-...</p>https://andreaskaris.github.io/blog/networking/ovn_standalone_on_fedora/ Tue, 14 Jun 2022 13:38:40 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/ovn_standalone_on_fedora/ \ No newline at end of file + Andreas Karis BlogAndreas Karis' blog about anything Kubernetes, OpenShift, Linux and Networkinghttps://andreaskaris.github.io/blog/en Thu, 08 Aug 2024 21:36:32 -0000 Thu, 08 Aug 2024 21:36:32 -0000 1440 MkDocs RSS plugin - v1.11.1 RSS, IRQ affinity and RPS on Linux <h1>RSS, IRQ affinity and RPS on Linux</h1><h2>Lab setup</h2><p>2 RHEL 9 virtual machines with 2 interfaces each. We are going to connect to the instances via eth0 and w...</p>https://andreaskaris.github.io/blog/networking/rss-irq-affinity-and-rps/ Thu, 08 Aug 2024 23:36:27 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/rss-irq-affinity-and-rps/ SELinux Cheat Sheet <h1>SELinux Cheat Sheet</h1><h3>Reading SELinux status</h3><p>| Command | Description | Examples ||---|---|---|| cat /etc/selinux/config | Get SELinux boot configu...</p>https://andreaskaris.github.io/blog/linux/selinux-cheatsheet/ Fri, 19 Jul 2024 15:04:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/selinux-cheatsheet/ Protect Lenovo laptop battery <p>In order to protect your Lenovo battery, you can set charge start and end thresholds.According to [anecdotal evidence](https://linrunner.de/tlp/faq/battery....</p>https://andreaskaris.github.io/blog/linux/protect-lenovo-battery/ Thu, 20 Jun 2024 14:59:35 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/protect-lenovo-battery/ Netlink and MAC addresses <h2>Netlink address fields IFLA_ADDRESS, IFLA_BROADCAST and IFLA_PERM_ADDRESS</h2><p>A few days ago, I had to figure out how applications such as iproute2 read the ...</p>https://andreaskaris.github.io/blog/networking/netlink-address-fields/ Sun, 12 May 2024 21:25:38 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/netlink-address-fields/ CPU isolation in Red Hat OpenShift Container Platform <h2>CPU isolation in Red Hat OpenShift Container Platform</h2><p>Two complementary features allow admins to partition the node's CPUs according to their needs. The ...</p>https://andreaskaris.github.io/blog/openshift/cpu-isolation-in-openshift/ Mon, 06 May 2024 20:08:03 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/cpu-isolation-in-openshift/ udev rules to apply ethtool settings <h1>udev rules to apply ethtool settings</h1><p>In order to apply specific ethtool settings to all interfaces matching a specific regular expression, run:```cat &lt;&lt;...</p>https://andreaskaris.github.io/blog/linux/udev-ethtool/ Mon, 29 Apr 2024 19:44:04 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/udev-ethtool/ OpenShift with iSCSI multipath <h2>Kubernets iSCSI volume driver</h2><p>The iSCSI volume driver can work as both a single path iSCSI initiator or with multipath.For some information about the dr...</p>https://andreaskaris.github.io/blog/openshift/openshift-with-multipath/ Fri, 12 Jan 2024 17:53:42 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/openshift-with-multipath/ kernel-ml on OpenShift <h1>kernel-ml on OpenShift</h1><p>In order to find out if a kernel bug was already fixed upstream, it may sometimes be necessary to test the upstreamkernel on top o...</p>https://andreaskaris.github.io/blog/openshift/kernel-ml-on-openshift/ Thu, 23 Nov 2023 18:41:02 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/kernel-ml-on-openshift/ Seccomp defaults in Red Hat OpenShift Container Platform <h1>Seccomp defaults in Red Hat OpenShift Container Platform</h1><p>Seccomp can be used to restrict the syscalls that processes running inside a container are allowe...</p>https://andreaskaris.github.io/blog/openshift/seccomp-defaults-ocp/ Mon, 25 Sep 2023 19:20:43 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/seccomp-defaults-ocp/ Hands-on with OVN Interconnection <h1>Hands-on with OVN Interconnection (OVN IC)</h1><p><a href="https://docs.ovn.org/en/latest/tutorials/ovn-interconnection.html">OVN Interconnection</a> (OVN IC) allows admini...</p>https://andreaskaris.github.io/blog/networking/ovn-interconnection/ Mon, 11 Sep 2023 19:06:05 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/ovn-interconnection/ rpm-ostreed failed to find image <h2>rpm-ostreed failed to find image</h2><p>Today, I ran into a strange issue after messing around a bit too much with OpenShift's Machine Config Operator.After de...</p>https://andreaskaris.github.io/blog/openshift/rpm-ostree-failed-to-find-image/ Tue, 15 Aug 2023 20:03:49 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/rpm-ostree-failed-to-find-image/ Workaround for org.gnome.shell.overrides not installed <h1>Settings schema 'org.gnome.shell.overrides' is not installed</h1><p>I recently upgraded to Fedora 38 and Gnome 44, and one of my installed applications give this...</p>https://andreaskaris.github.io/blog/linux/org-gnome-shell-overrides/ Wed, 03 May 2023 19:38:38 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/org-gnome-shell-overrides/ DedicatedServiceMonitors in OpenShift Monitoring <h2>DedicatedServiceMonitors in Red Hat OpenShift Monitoring</h2><h3>Introduction</h3><p>By default, OpenShift's Prometheus stack will pull pod CPU and memory usage fr...</p>https://andreaskaris.github.io/blog/openshift/dedicated-service-monitors/ Wed, 03 May 2023 15:53:44 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/dedicated-service-monitors/ Using cgroups for CFS bandwidth control <h1>Using cgroups for CFS bandwidth control (CPU quotas)</h1><p>CFS bandwidth control is a feature that allows you to limit the amount of CPU time that a control gro...</p>https://andreaskaris.github.io/blog/linux/cgroups_cpu_quota/ Mon, 27 Mar 2023 11:28:05 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/cgroups_cpu_quota/ How kubelet monitors filesystems <h1>How kubelet monitors filesystems</h1><p>Kubelet can monitor 2 file systems, nodefs and imagefs. nodefs is auto-discovered by the presence of <code>/var/lib/kubelet</code>....</p>https://andreaskaris.github.io/blog/openshift/kubelet-filesystems/ Wed, 22 Mar 2023 17:03:35 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/kubelet-filesystems/ Golang IP address conversion <h2>IP address conversion with golang</h2><h3>Finding an IP network's broadcast IP</h3><p>The following function calculates the broadcast IP for both IPv4 and IPv6 net...</p>https://andreaskaris.github.io/blog/coding/golang-ip-conversion/ Fri, 24 Feb 2023 12:45:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/golang-ip-conversion/ Controller Reconciliation <h2>Reconciliation with the Operator SDK</h2><p>In the Operator SDK, controllers implement the [Reconciler](https://github.com/kubernetes-sigs/controller-runtime/bl...</p>https://andreaskaris.github.io/blog/coding/operator-sdk-reconciliation/ Fri, 24 Feb 2023 12:45:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/operator-sdk-reconciliation/ My vimrc <h1>My vimrc</h1><p>Below my configuration for vim which I use for go and python development:~~~cat &lt;&lt;'EOF' &gt; ~/.vimrccall plug#begin() Plug 'vim-airline/vim-ai...</p>https://andreaskaris.github.io/blog/coding/vimrc/ Fri, 24 Feb 2023 12:45:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/vimrc/ SCCs and mutating webhooks - a lesson learned <p><img alt="title" src="https://user-images.githubusercontent.com/3291433/220175185-f58bf274-e886-45ef-ab32-92b6cd3f1739.png"></p><h1>SCCs and mutating webhooks - or how to lear...</h1>https://andreaskaris.github.io/blog/openshift/openshift-scc-with-mutating-webhooks/ Mon, 13 Feb 2023 22:16:16 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/openshift-scc-with-mutating-webhooks/ Building custom release images for OpenShift <h2>Building custom release images for OpenShift</h2><h3>Using custom container image for a specific component / operator</h3><p>The following example builds a custom ...</p>https://andreaskaris.github.io/blog/openshift/ocp-custom-release-image/ Wed, 19 Oct 2022 14:17:44 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/ocp-custom-release-image/ \ No newline at end of file diff --git a/feed_rss_updated.xml b/feed_rss_updated.xml index 26459582..63cec5c3 100644 --- a/feed_rss_updated.xml +++ b/feed_rss_updated.xml @@ -1 +1 @@ - Andreas Karis BlogAndreas Karis' blog about anything Kubernetes, OpenShift, Linux and Networkinghttps://andreaskaris.github.io/blog/en Fri, 19 Jul 2024 15:36:59 -0000 Fri, 19 Jul 2024 15:36:59 -0000 1440 MkDocs RSS plugin - v1.11.1 SELinux Cheat Sheet <h1>SELinux Cheat Sheet</h1><h3>Reading SELinux status</h3><p>| Command | Description | Examples ||---|---|---|| cat /etc/selinux/config | Get SELinux boot configu...</p>https://andreaskaris.github.io/blog/linux/selinux-cheatsheet/ Fri, 19 Jul 2024 17:19:19 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/selinux-cheatsheet/ Protect Lenovo laptop battery <p>In order to protect your Lenovo battery, you can set charge start and end thresholds.According to [anecdotal evidence](https://linrunner.de/tlp/faq/battery....</p>https://andreaskaris.github.io/blog/linux/protect-lenovo-battery/ Thu, 20 Jun 2024 14:59:35 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/protect-lenovo-battery/ Netlink and MAC addresses <h2>Netlink address fields IFLA_ADDRESS, IFLA_BROADCAST and IFLA_PERM_ADDRESS</h2><p>A few days ago, I had to figure out how applications such as iproute2 read the ...</p>https://andreaskaris.github.io/blog/networking/netlink-address-fields/ Mon, 13 May 2024 11:22:39 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/netlink-address-fields/ CPU isolation in Red Hat OpenShift Container Platform <h2>CPU isolation in Red Hat OpenShift Container Platform</h2><p>Two complementary features allow admins to partition the node's CPUs according to their needs. The ...</p>https://andreaskaris.github.io/blog/openshift/cpu-isolation-in-openshift/ Mon, 06 May 2024 22:24:07 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/cpu-isolation-in-openshift/ udev rules to apply ethtool settings <h1>udev rules to apply ethtool settings</h1><p>In order to apply specific ethtool settings to all interfaces matching a specific regular expression, run:```cat &lt;&lt;...</p>https://andreaskaris.github.io/blog/linux/udev-ethtool/ Mon, 29 Apr 2024 19:44:04 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/udev-ethtool/ OpenShift with iSCSI multipath <h2>Kubernets iSCSI volume driver</h2><p>The iSCSI volume driver can work as both a single path iSCSI initiator or with multipath.For some information about the dr...</p>https://andreaskaris.github.io/blog/openshift/openshift-with-multipath/ Fri, 12 Jan 2024 18:05:09 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/openshift-with-multipath/ kernel-ml on OpenShift <h1>kernel-ml on OpenShift</h1><p>In order to find out if a kernel bug was already fixed upstream, it may sometimes be necessary to test the upstreamkernel on top o...</p>https://andreaskaris.github.io/blog/openshift/kernel-ml-on-openshift/ Thu, 23 Nov 2023 18:46:14 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/kernel-ml-on-openshift/ Setting journalctl limits <h2>Changing the size of data that journald retains</h2><p>The systemd journal by default retains 4GB of data. In order to increase or decrease that value, set `Sys...</p>https://andreaskaris.github.io/blog/linux/setting-journalctl-limits/ Thu, 09 Nov 2023 17:19:41 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/setting-journalctl-limits/ Seccomp defaults in Red Hat OpenShift Container Platform <h1>Seccomp defaults in Red Hat OpenShift Container Platform</h1><p>Seccomp can be used to restrict the syscalls that processes running inside a container are allowe...</p>https://andreaskaris.github.io/blog/openshift/seccomp-defaults-ocp/ Wed, 11 Oct 2023 18:48:34 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/seccomp-defaults-ocp/ Hands-on with OVN Interconnection <h1>Hands-on with OVN Interconnection (OVN IC)</h1><p><a href="https://docs.ovn.org/en/latest/tutorials/ovn-interconnection.html">OVN Interconnection</a> (OVN IC) allows admini...</p>https://andreaskaris.github.io/blog/networking/ovn-interconnection/ Mon, 11 Sep 2023 19:16:51 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/ovn-interconnection/ rpm-ostreed failed to find image <h2>rpm-ostreed failed to find image</h2><p>Today, I ran into a strange issue after messing around a bit too much with OpenShift's Machine Config Operator.After de...</p>https://andreaskaris.github.io/blog/openshift/rpm-ostree-failed-to-find-image/ Tue, 15 Aug 2023 20:03:49 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/rpm-ostree-failed-to-find-image/ My vimrc <h1>My vimrc</h1><p>Below my configuration for vim which I use for go and python development:~~~cat &lt;&lt;'EOF' &gt; ~/.vimrccall plug#begin() Plug 'vim-airline/vim-ai...</p>https://andreaskaris.github.io/blog/coding/vimrc/ Tue, 25 Jul 2023 13:34:48 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/vimrc/ Workaround for org.gnome.shell.overrides not installed <h1>Settings schema 'org.gnome.shell.overrides' is not installed</h1><p>I recently upgraded to Fedora 38 and Gnome 44, and one of my installed applications give this...</p>https://andreaskaris.github.io/blog/linux/org-gnome-shell-overrides/ Wed, 03 May 2023 19:38:38 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/org-gnome-shell-overrides/ DedicatedServiceMonitors in OpenShift Monitoring <h2>DedicatedServiceMonitors in Red Hat OpenShift Monitoring</h2><h3>Introduction</h3><p>By default, OpenShift's Prometheus stack will pull pod CPU and memory usage fr...</p>https://andreaskaris.github.io/blog/openshift/dedicated-service-monitors/ Wed, 03 May 2023 16:41:21 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/dedicated-service-monitors/ Using cgroups for CFS bandwidth control <h1>Using cgroups for CFS bandwidth control (CPU quotas)</h1><p>CFS bandwidth control is a feature that allows you to limit the amount of CPU time that a control gro...</p>https://andreaskaris.github.io/blog/linux/cgroups_cpu_quota/ Mon, 27 Mar 2023 11:42:03 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/cgroups_cpu_quota/ How kubelet monitors filesystems <h1>How kubelet monitors filesystems</h1><p>Kubelet can monitor 2 file systems, nodefs and imagefs. nodefs is auto-discovered by the presence of <code>/var/lib/kubelet</code>....</p>https://andreaskaris.github.io/blog/openshift/kubelet-filesystems/ Wed, 22 Mar 2023 17:18:49 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/kubelet-filesystems/ Golang IP address conversion <h2>IP address conversion with golang</h2><h3>Finding an IP network's broadcast IP</h3><p>The following function calculates the broadcast IP for both IPv4 and IPv6 net...</p>https://andreaskaris.github.io/blog/coding/golang-ip-conversion/ Fri, 24 Feb 2023 12:45:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/golang-ip-conversion/ Controller Reconciliation <h2>Reconciliation with the Operator SDK</h2><p>In the Operator SDK, controllers implement the [Reconciler](https://github.com/kubernetes-sigs/controller-runtime/bl...</p>https://andreaskaris.github.io/blog/coding/operator-sdk-reconciliation/ Fri, 24 Feb 2023 12:45:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/operator-sdk-reconciliation/ SCCs and mutating webhooks - a lesson learned <p><img alt="title" src="https://user-images.githubusercontent.com/3291433/220175185-f58bf274-e886-45ef-ab32-92b6cd3f1739.png"></p><h1>SCCs and mutating webhooks - or how to lear...</h1>https://andreaskaris.github.io/blog/openshift/openshift-scc-with-mutating-webhooks/ Mon, 20 Feb 2023 19:22:20 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/openshift-scc-with-mutating-webhooks/ Useful commands <h1>Useful commands</h1><h2>Tracking the evolution of conntrack with lnstat</h2><p>lnstat is a neat tool to check the evolution of entries (and other counters) in the co...</p>https://andreaskaris.github.io/blog/networking/useful-commands/ Tue, 17 Jan 2023 15:36:04 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/useful-commands/ \ No newline at end of file + Andreas Karis BlogAndreas Karis' blog about anything Kubernetes, OpenShift, Linux and Networkinghttps://andreaskaris.github.io/blog/en Thu, 08 Aug 2024 21:36:32 -0000 Thu, 08 Aug 2024 21:36:32 -0000 1440 MkDocs RSS plugin - v1.11.1 RSS, IRQ affinity and RPS on Linux <h1>RSS, IRQ affinity and RPS on Linux</h1><h2>Lab setup</h2><p>2 RHEL 9 virtual machines with 2 interfaces each. We are going to connect to the instances via eth0 and w...</p>https://andreaskaris.github.io/blog/networking/rss-irq-affinity-and-rps/ Thu, 08 Aug 2024 23:36:27 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/rss-irq-affinity-and-rps/ SELinux Cheat Sheet <h1>SELinux Cheat Sheet</h1><h3>Reading SELinux status</h3><p>| Command | Description | Examples ||---|---|---|| cat /etc/selinux/config | Get SELinux boot configu...</p>https://andreaskaris.github.io/blog/linux/selinux-cheatsheet/ Fri, 19 Jul 2024 17:46:48 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/selinux-cheatsheet/ Protect Lenovo laptop battery <p>In order to protect your Lenovo battery, you can set charge start and end thresholds.According to [anecdotal evidence](https://linrunner.de/tlp/faq/battery....</p>https://andreaskaris.github.io/blog/linux/protect-lenovo-battery/ Thu, 20 Jun 2024 14:59:35 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/protect-lenovo-battery/ Netlink and MAC addresses <h2>Netlink address fields IFLA_ADDRESS, IFLA_BROADCAST and IFLA_PERM_ADDRESS</h2><p>A few days ago, I had to figure out how applications such as iproute2 read the ...</p>https://andreaskaris.github.io/blog/networking/netlink-address-fields/ Mon, 13 May 2024 11:22:39 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/netlink-address-fields/ CPU isolation in Red Hat OpenShift Container Platform <h2>CPU isolation in Red Hat OpenShift Container Platform</h2><p>Two complementary features allow admins to partition the node's CPUs according to their needs. The ...</p>https://andreaskaris.github.io/blog/openshift/cpu-isolation-in-openshift/ Mon, 06 May 2024 22:24:07 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/cpu-isolation-in-openshift/ udev rules to apply ethtool settings <h1>udev rules to apply ethtool settings</h1><p>In order to apply specific ethtool settings to all interfaces matching a specific regular expression, run:```cat &lt;&lt;...</p>https://andreaskaris.github.io/blog/linux/udev-ethtool/ Mon, 29 Apr 2024 19:44:04 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/udev-ethtool/ OpenShift with iSCSI multipath <h2>Kubernets iSCSI volume driver</h2><p>The iSCSI volume driver can work as both a single path iSCSI initiator or with multipath.For some information about the dr...</p>https://andreaskaris.github.io/blog/openshift/openshift-with-multipath/ Fri, 12 Jan 2024 18:05:09 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/openshift-with-multipath/ kernel-ml on OpenShift <h1>kernel-ml on OpenShift</h1><p>In order to find out if a kernel bug was already fixed upstream, it may sometimes be necessary to test the upstreamkernel on top o...</p>https://andreaskaris.github.io/blog/openshift/kernel-ml-on-openshift/ Thu, 23 Nov 2023 18:46:14 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/kernel-ml-on-openshift/ Setting journalctl limits <h2>Changing the size of data that journald retains</h2><p>The systemd journal by default retains 4GB of data. In order to increase or decrease that value, set `Sys...</p>https://andreaskaris.github.io/blog/linux/setting-journalctl-limits/ Thu, 09 Nov 2023 17:19:41 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/setting-journalctl-limits/ Seccomp defaults in Red Hat OpenShift Container Platform <h1>Seccomp defaults in Red Hat OpenShift Container Platform</h1><p>Seccomp can be used to restrict the syscalls that processes running inside a container are allowe...</p>https://andreaskaris.github.io/blog/openshift/seccomp-defaults-ocp/ Wed, 11 Oct 2023 18:48:34 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/seccomp-defaults-ocp/ Hands-on with OVN Interconnection <h1>Hands-on with OVN Interconnection (OVN IC)</h1><p><a href="https://docs.ovn.org/en/latest/tutorials/ovn-interconnection.html">OVN Interconnection</a> (OVN IC) allows admini...</p>https://andreaskaris.github.io/blog/networking/ovn-interconnection/ Mon, 11 Sep 2023 19:16:51 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/networking/ovn-interconnection/ rpm-ostreed failed to find image <h2>rpm-ostreed failed to find image</h2><p>Today, I ran into a strange issue after messing around a bit too much with OpenShift's Machine Config Operator.After de...</p>https://andreaskaris.github.io/blog/openshift/rpm-ostree-failed-to-find-image/ Tue, 15 Aug 2023 20:03:49 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/rpm-ostree-failed-to-find-image/ My vimrc <h1>My vimrc</h1><p>Below my configuration for vim which I use for go and python development:~~~cat &lt;&lt;'EOF' &gt; ~/.vimrccall plug#begin() Plug 'vim-airline/vim-ai...</p>https://andreaskaris.github.io/blog/coding/vimrc/ Tue, 25 Jul 2023 13:34:48 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/vimrc/ Workaround for org.gnome.shell.overrides not installed <h1>Settings schema 'org.gnome.shell.overrides' is not installed</h1><p>I recently upgraded to Fedora 38 and Gnome 44, and one of my installed applications give this...</p>https://andreaskaris.github.io/blog/linux/org-gnome-shell-overrides/ Wed, 03 May 2023 19:38:38 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/org-gnome-shell-overrides/ DedicatedServiceMonitors in OpenShift Monitoring <h2>DedicatedServiceMonitors in Red Hat OpenShift Monitoring</h2><h3>Introduction</h3><p>By default, OpenShift's Prometheus stack will pull pod CPU and memory usage fr...</p>https://andreaskaris.github.io/blog/openshift/dedicated-service-monitors/ Wed, 03 May 2023 16:41:21 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/dedicated-service-monitors/ Using cgroups for CFS bandwidth control <h1>Using cgroups for CFS bandwidth control (CPU quotas)</h1><p>CFS bandwidth control is a feature that allows you to limit the amount of CPU time that a control gro...</p>https://andreaskaris.github.io/blog/linux/cgroups_cpu_quota/ Mon, 27 Mar 2023 11:42:03 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/linux/cgroups_cpu_quota/ How kubelet monitors filesystems <h1>How kubelet monitors filesystems</h1><p>Kubelet can monitor 2 file systems, nodefs and imagefs. nodefs is auto-discovered by the presence of <code>/var/lib/kubelet</code>....</p>https://andreaskaris.github.io/blog/openshift/kubelet-filesystems/ Wed, 22 Mar 2023 17:18:49 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/kubelet-filesystems/ Golang IP address conversion <h2>IP address conversion with golang</h2><h3>Finding an IP network's broadcast IP</h3><p>The following function calculates the broadcast IP for both IPv4 and IPv6 net...</p>https://andreaskaris.github.io/blog/coding/golang-ip-conversion/ Fri, 24 Feb 2023 12:45:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/golang-ip-conversion/ Controller Reconciliation <h2>Reconciliation with the Operator SDK</h2><p>In the Operator SDK, controllers implement the [Reconciler](https://github.com/kubernetes-sigs/controller-runtime/bl...</p>https://andreaskaris.github.io/blog/coding/operator-sdk-reconciliation/ Fri, 24 Feb 2023 12:45:32 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/coding/operator-sdk-reconciliation/ SCCs and mutating webhooks - a lesson learned <p><img alt="title" src="https://user-images.githubusercontent.com/3291433/220175185-f58bf274-e886-45ef-ab32-92b6cd3f1739.png"></p><h1>SCCs and mutating webhooks - or how to lear...</h1>https://andreaskaris.github.io/blog/openshift/openshift-scc-with-mutating-webhooks/ Mon, 20 Feb 2023 19:22:20 +0000Andreas Karis Bloghttps://andreaskaris.github.io/blog/openshift/openshift-scc-with-mutating-webhooks/ \ No newline at end of file diff --git a/index.html b/index.html index d7e460fa..ae58f222 100644 --- a/index.html +++ b/index.html @@ -2741,6 +2741,35 @@

Latest posts

+
+

+ RSS, IRQ affinity and RPS on Linux +

+ +

+ +

+
+ Published at: 8/8/24, 11:36 PM +
+
+
+ + + + + + + + + + + + + + + +

SELinux Cheat Sheet @@ -2989,6 +3018,12 @@

+

+ + +
+ + @@ -3018,12 +3053,6 @@

-

- - -
- - @@ -3285,6 +3314,12 @@

+

+ + +
+ + @@ -3314,12 +3349,6 @@

-

- - -
- - @@ -3581,6 +3610,12 @@

+

+ + +
+ + @@ -3610,12 +3645,6 @@

-

- - -
- - @@ -3877,6 +3906,12 @@

+

+ + +
+ + @@ -3906,12 +3941,6 @@

-

- - -
- - @@ -4173,6 +4202,12 @@

+

+ + +
+ + @@ -4202,12 +4237,6 @@

-

- - -
- - @@ -4469,6 +4498,12 @@

+

+ + +
+ + @@ -4498,12 +4533,6 @@

-

- - -
- - @@ -4765,6 +4794,12 @@

+

+ + +
+ + @@ -4794,12 +4829,6 @@

-

- - -
- - @@ -5061,6 +5090,12 @@

+

+ + +
+ + @@ -5137,9 +5172,14 @@

8 + + + + 9 +

-
Total 80 posts.
+
Total 81 posts.

diff --git a/networking/index.html b/networking/index.html index 1ed7543e..930e405b 100644 --- a/networking/index.html +++ b/networking/index.html @@ -2725,6 +2725,35 @@

Networking

+
+

+ RSS, IRQ affinity and RPS on Linux +

+ +

+ +

+
+ Published at: 8/8/24, 11:36 PM +
+
+
+ + + + + + + + + + + + + + + +

Netlink and MAC addresses @@ -2973,6 +3002,12 @@

+

+ + +
+ + @@ -3002,12 +3037,6 @@

-

- - -
- - @@ -3288,7 +3317,7 @@

-
Total 19 posts.
+
Total 20 posts.

diff --git a/networking/rss-irq-affinity-and-rps/index.html b/networking/rss-irq-affinity-and-rps/index.html new file mode 100644 index 00000000..a01f0f8c --- /dev/null +++ b/networking/rss-irq-affinity-and-rps/index.html @@ -0,0 +1,3222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + RSS, IRQ affinity and RPS on Linux - Andreas Karis Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

RSS, IRQ affinity and RPS on Linux

+

Lab setup

+

2 RHEL 9 virtual machines with 2 interfaces each. We are going to connect to the instances via eth0 and we are going to +run our tests via eth1.

+
1
+2
+3
+4
+5
+6
+7
+8
+9
 ┌──────────────────────┐                       ┌──────────────────────┐ 
+                                                                     
+                   ┌─────────────┐   ┌─────────────┐                   
+         LG             eth1    ├───┤     eth1          DUT          
+                   └─────────────┘   └─────────────┘                   
+    ┌──────────────┐                             ┌──────────────┐    
+ └───│     eth0     │───┘                       └───│     eth0     │───┘ 
+     └──────────────┘                               └──────────────┘     
+                    192.168.123.11 <-> 192.168.123.10
+
+
+

DUT: Device Under Test (server, VM with 4 queues on eth1) + LG: Load Generator (client)

+
+

Both VMs have 8 GB of memory and 8 CPUs each:

+
1
+2
+3
  <memory unit='KiB'>8388608</memory>
+  <currentMemory unit='KiB'>8388608</currentMemory>
+  <vcpu placement='static'>8</vcpu>
+
+

In addition, the secondary interface of the Device Under Test (DUT) is configured to have 4 queues:

+
1
+2
+3
+4
+5
+6
+7
+8
+9
    <interface type='network'>
+      <mac address='52:54:00:de:e0:51'/>
+      <source network='isol1' portid='cd8d35ef-9ac1-4254-beea-ee8f57b0d176' bridge='virbr5'/>
+      <target dev='vnet3'/>
+      <model type='virtio'/>
+      <driver name='vhost' queues='4'/>
+      <alias name='net1'/>
+      <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
+    </interface>
+
+
+

Note If you set up your VMs with Virtual Machine Manager, you have to add line <driver name='vhost' queues='4'/> +via the XML input field.

+
+

Test application

+

The test application is a simple client <-> server application written in Golang. The client opens a connection, writes +a message which is received by the server, and closes the connection. It does so asynchronously at a given provided +rate. The application's goal is not to be particularly performant; instead, it shall be easy to understand, have a +configurable rate and support both IPv4 UDP and TCP.

+

You can find the code at https://github.com/andreaskaris/golang-loadgen/.

+

The application can send/receive traffic for both TCP and UDP. In the interest of brevity, I'll focus on the UDP part +only.

+

Server code

+

The entire UDP server code is pretty simple and should be self explanatory:

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
func main() {
+(...)
+    // Code for the server. See server() for more details.
+    if *serverFlag {
+        if err := server(protocol, *hostFlag, *portFlag); err != nil {
+            log.Fatalf("could not create server, err: %q", err)
+        }
+        return
+    }
+(...)
+}
+
+// server implements the logic for the server. It uses helper functions tcpServer and udpServer to implement servers
+// for the respective protocols.
+func server(proto, host string, port int) error {
+    hostPort := fmt.Sprintf("%s:%d", host, port)
+    if proto == UDP {
+        return udpServer(proto, hostPort)
+    }
+    if proto == TCP {
+        return tcpServer(proto, hostPort)
+    }
+    return fmt.Errorf("unsupported protocol: %q", proto)
+}
+
+// udpServer implements the logic for a UDP server. It listens on a given UDP socket. It reads from the socket and
+// prints the message of the client if flag -debug was provided.
+func udpServer(proto, hostPort string) error {
+    addr, err := net.ResolveUDPAddr(proto, hostPort)
+    if err != nil {
+        return err
+    }
+    conn, err := net.ListenUDP("udp", addr)
+    if err != nil {
+        return err
+    }
+    defer conn.Close()
+    buffer := make([]byte, 1024)
+    for {
+        n, remote, err := conn.ReadFromUDP(buffer)
+        if err != nil {
+            log.Printf("could not read from UDP buffer, err: %q", err)
+            continue
+        }
+        if *debugFlag {
+            log.Printf("read from remote %s: %s", remote, string(buffer[:n]))
+        }
+    }
+}
+
+

The client code is even simpler:

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
func main() {
+(...)
+    // Code for the client. The client calculates the sleep time between subsequent attempts based on the rate.
+    // For example, if the rate is 1000, sleep for 1,000,000,000 / 1,000 = 1,000,000 nanoseconds between messages
+    // -> send 100 messages per second.
+    sleepInterval := NANOSECONDS_PER_SECOND / *rateFlag
+    sleepTime := time.Nanosecond * time.Duration(sleepInterval)
+    for {
+        time.Sleep(sleepTime)
+        // Run each client in its own go routine. See client() for the rest of the client logic.
+        go func() {
+            if err := client(protocol, *hostFlag, *portFlag, "msg"); err != nil {
+                log.Printf("got error on connection attempt, err: %q", err)
+            }
+        }()
+    }
+(...)
+}
+
+// client implements the client logic for a single connection. It opens a connection of type proto (TCP or UDP) to
+// <host>:<port> and it writes <message> to the connection before closing it.
+// Note: The terminology may be a bit confusing as the client pushes data to the server, not the other way around.
+func client(proto, host string, port int, message string) error {
+    conn, err := net.Dial(proto, fmt.Sprintf("%s:%d", host, port))
+    if err != nil {
+        return err
+    }
+    defer conn.Close()
+    fmt.Fprint(conn, message)
+    return nil
+}
+
+

Disabling irqbalance

+

irqbalance would actually interfere with our tests. Therefore, let's disable it:

+
1
+2
+3
+4
+5
+6
+7
[root@dut ~]# systemctl disable --now irqbalance
+[root@dut ~]# systemctl status irqbalance
+ irqbalance.service - irqbalance daemon
+     Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; disabled; preset: enabled)
+     Active: inactive (dead)
+       Docs: man:irqbalance(1)
+             https://github.com/Irqbalance/irqbalance
+
+

Isolating CPUs with tuned

+

Let's isolate the last 4 CPUs of the Device Under Test with tuned. First, install tuned and the tuned-profiles-realtime +package:

+
1
[root@dut ~]# yum install tuned tuned-profiles-realtime
+
+

Configure the isolated cores in /etc/tuned/realtime-variables.conf:

+
1
+2
[root@dut ~]# grep ^isolated_cores /etc/tuned/realtime-variables.conf 
+isolated_cores=4-7
+
+

Enable the realtime profile and reboot:

+
1
+2
[root@dut ~]# tuned-adm profile realtime
+[root@dut ~]# reboot
+
+

When the system is back up, verify that isolation is configured:

+
1
+2
+3
+4
[root@dut ~]# cat /proc/cmdline  | grep -Po "isolcpus=.*? "
+isolcpus=managed_irq,domain,4-7
+[root@dut ~]# cat /proc/$$/status  | grep Cpus_allowed_list
+Cpus_allowed_list:  0-3
+
+

Building the application

+

Build the test application on both nodes:

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
[root@dut ~]# git clone https://github.com/andreaskaris/golang-loadgen.git
+Cloning into 'golang-loadgen'...
+remote: Enumerating objects: 13, done.
+remote: Counting objects: 100% (13/13), done.
+remote: Compressing objects: 100% (8/8), done.
+remote: Total 13 (delta 4), reused 11 (delta 2), pack-reused 0
+Receiving objects: 100% (13/13), done.
+Resolving deltas: 100% (4/4), done.
+[root@dut ~]# cd golang-loadgen/
+[root@dut golang-loadgen]# make build
+go build -o _output/loadgen
+
+

Running the test application with debug output

+

Start the test application on the client:

+
1
[root@lg golang-loadgen]# _output/loadgen -host 192.168.123.10 -port 8080 -protocol udp -rate-per-second 10
+
+

Start the test application on the server and force it to run on CPUs 6 and 7:

+
1
+2
+3
+4
+5
+6
+7
[root@dut golang-loadgen]#  taskset -c 6,7 _output/loadgen -server -host 192.168.123.10 -port 8080 -protocol udp -debug
+2024/08/08 15:46:05 read from remote 192.168.123.11:54244: msg
+2024/08/08 15:46:05 read from remote 192.168.123.11:59288: msg
+2024/08/08 15:46:05 read from remote 192.168.123.11:38316: msg
+2024/08/08 15:46:05 read from remote 192.168.123.11:54288: msg
+2024/08/08 15:46:05 read from remote 192.168.123.11:58354: msg
+2024/08/08 15:46:06 read from remote 192.168.123.11:60341: msg
+
+

RSS + Tuning NIC queues and RX interrupt affinity

+

What's RSS?

+

RSS, short for Receive Side Scaling, is an in-hardware feature that allows a NIC to "send different packets to different +queues to distribute processing among CPUs. The NIC distributes packets by applying a filter to each packet that assigns +it to one of a small number of logical flows. Packets for each flow are steered to a separate receive queue, which in +turn can be processed by separate CPUs." For more details, have a look at the +Scaling in the Linux Networking Stack.

+

RSS happens in hardware for modern NICs and is enabled by default. Virtio supports multiqueue and RSS when the vhostnet +driver is used (see our Virtual Machine setup instructions earlier).

+

It's possible to show some information about RSS with ethtool -x <interface>. As far as I know, it's not possible to +modify RSS configuration for virtio (when I tried, my VM froze). However, for real NICs such as recent Intel or +Mellanox/Nvidia devices, plenty of configuration options are available to influence how RSS steers packets to queues.

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
[root@dut ~]# ethtool -x eth1
+
+RX flow hash indirection table for eth1 with 2 RX ring(s):
+Operation not supported
+RSS hash key:
+Operation not supported
+RSS hash function:
+    toeplitz: on
+    xor: off
+    crc32: off
+
+

Reducing queue count to 2

+

To make things a little bit more manageable, let's reduce our queue count (both for RX and TX) to 2:

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
[root@dut golang-loadgen]# ethtool -l eth1
+Channel parameters for eth1:
+Pre-set maximums:
+RX:     n/a
+TX:     n/a
+Other:      n/a
+Combined:   4
+Current hardware settings:
+RX:     n/a
+TX:     n/a
+Other:      n/a
+Combined:   4
+[root@dut golang-loadgen]# ethtool -L eth1 combined 2
+[root@dut golang-loadgen]# ethtool -l eth1
+Channel parameters for eth1:
+Pre-set maximums:
+RX:     n/a
+TX:     n/a
+Other:      n/a
+Combined:   4
+Current hardware settings:
+RX:     n/a
+TX:     n/a
+Other:      n/a
+Combined:   2
+
+

Identifying and reading per queue interrupts

+

Let's find the interrupt names for eth1. Get the bus-info:

+
1
+2
[root@dut golang-loadgen]# ethtool -i eth1 | grep bus-info
+bus-info: 0000:07:00.0
+
+

And let's get the device name as it appears in /proc/interrupts:

+
1
+2
+3
+4
[root@dut golang-loadgen]# find /sys/devices -name 0000:07:00.0
+/sys/devices/pci0000:00/0000:00:02.6/0000:07:00.0
+[root@dut golang-loadgen]# ls -d /sys/devices/pci0000:00/0000:00:02.6/0000:07:00.0/virtio*
+/sys/devices/pci0000:00/0000:00:02.6/0000:07:00.0/virtio6
+
+

We can now read the interrupts for the NIC:

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
[root@dut golang-loadgen]# cat /proc/interrupts | grep -E 'CPU|virtio6'
+           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       
+ 52:          0          0          0          0          0          0          0          0  PCI-MSIX-0000:07:00.0   0-edge      virtio6-config
+ 53:    7159429          0          1          0          0          0          0          0  PCI-MSIX-0000:07:00.0   1-edge      virtio6-input.0
+ 54:        417          0          0          1          0          0          0          0  PCI-MSIX-0000:07:00.0   2-edge      virtio6-output.0
+ 55:          0          0   11189465          0          1       2260          0          0  PCI-MSIX-0000:07:00.0   3-edge      virtio6-input.1
+ 56:          0          0        165          0        220          1          0          0  PCI-MSIX-0000:07:00.0   4-edge      virtio6-output.1
+ 57:          0          0          0   11296239          0          0          1          0  PCI-MSIX-0000:07:00.0   5-edge      virtio6-input.2
+ 58:          0          0          0          0          0          0          0          0  PCI-MSIX-0000:07:00.0   6-edge      virtio6-output.2
+ 59:   11620198          0          0          0          0          0          2          0  PCI-MSIX-0000:07:00.0   7-edge      virtio6-input.3
+ 60:          0         13          0          0          0          0          0          0  PCI-MSIX-0000:07:00.0   8-edge      virtio6-output.3
+
+

Note that virtio will show all 4 queues for each input and output in /proc/interrupts, even though 2 of each are disabled.

+

We can however easily check that the setting is working. Let's start our application on the server on CPUs 6 and 7:

+
1
[root@dut golang-loadgen]#  taskset -c 6,7 _output/loadgen -server -host 192.168.123.10 -port 8080 -protocol udp
+
+

And on the client:

+
1
[root@lg golang-loadgen]# _output/loadgen -host 192.168.123.10 -port 8080 -protocol udp -rate-per-second 1000000000
+
+

And you can see that interrupts for queues virtio6-input.0 and virtio6-input.1 increment as RSS balances flows +across the 2 remaining queues. At the same time, queues 2 and 3 are disabled.

+
1
+2
+3
+4
+5
+6
+7
+8
+9
[root@dut ~]# for i in {1..2}; do grep virtio6-input /proc/interrupts; sleep 5; done
+ 53:   65257722          0          1          0          0          0          0          0  PCI-MSIX-0000:07:00.0   1-edge      virtio6-input.0
+ 55:          0          0   11189465          0          1   34166088          0          0  PCI-MSIX-0000:07:00.0   3-edge      virtio6-input.1
+ 57:          0          0          0   11296239          0          0          1          0  PCI-MSIX-0000:07:00.0   5-edge      virtio6-input.2
+ 59:   11620198          0          0          0          0          0          2          0  PCI-MSIX-0000:07:00.0   7-edge      virtio6-input.3
+ 53:   65419955          0          1          0          0          0          0          0  PCI-MSIX-0000:07:00.0   1-edge      virtio6-input.0
+ 55:          0          0   11189465          0          1   34272710          0          0  PCI-MSIX-0000:07:00.0   3-edge      virtio6-input.1
+ 57:          0          0          0   11296239          0          0          1          0  PCI-MSIX-0000:07:00.0   5-edge      virtio6-input.2
+ 59:   11620198          0          0          0          0          0          2          0  PCI-MSIX-0000:07:00.0   7-edge      virtio6-input.3
+
+

Configuring SMP affinity for RX queue interrupts

+

Next, let's move the SMP affinity for our queues' interrupts to CPUs 4 and 5. The softirqs will be processed on the same +NICs by default.

+

You can get the interrupt numbers for virtio6-input.0 (in this case 53) and virtio6-input.1 (in this case 55) from +/proc/interrupts.

+
1
+2
+3
+4
+5
+6
+7
+8
[root@dut golang-loadgen]# cat /proc/irq/53/smp_affinity
+0f
+[root@dut golang-loadgen]# cat /proc/irq/53/smp_affinity_list
+0-3
+[root@dut golang-loadgen]# cat /proc/irq/55/smp_affinity
+f0
+[root@dut golang-loadgen]# cat /proc/irq/55/smp_affinity_list
+4-7
+
+

That matches what we saw earlier: virtio6-input.0's affinity currently is CPUs 0-3 and in /proc/interrupts we saw that +it generated interrupts on CPU 0. virtio6-input.1's affinity currently is CPUs 4-7 and in /proc/interrupts we saw that +it generated interrupts on CPU 5. But wait, irqbalance is switched off, and we even rebooted the system. Why are our +IRQs distributed between our CPUs and why aren't they allowed on all CPUs? To be confirmed, but the answer may be in +this commit.

+

Let's force virtio6-input.0 onto CPU 2 and virtio6-input.1 onto CPU 3. The affinity can be any CPU, regardless of our +tuned configuration, either from the system CPU set or from the isolated CPU set. But I already moved IRQs to isolated +CPUs during an earlier test, so for the sake of it, I want to move them to system reserved CPUs now :-)

+
1
+2
+3
+4
+5
+6
[root@dut golang-loadgen]# echo 04 > /proc/irq/53/smp_affinity
+[root@dut golang-loadgen]# cat /proc/irq/53/smp_affinity_list
+2
+[root@dut golang-loadgen]# echo 08 > /proc/irq/55/smp_affinity
+[root@dut golang-loadgen]# cat /proc/irq/55/smp_affinity_list
+3
+
+

Start the server and the client again with the same affinity for the server:

+
1
[root@dut golang-loadgen]#  taskset -c 6,7 _output/loadgen -server -host 192.168.123.10 -port 8080 -protocol udp
+
+
1
[root@lg golang-loadgen]# _output/loadgen -host 192.168.123.10 -port 8080 -protocol udp -rate-per-second 1000000000
+
+

And now, interrupts increase for virtio6-input.0 on CPU 2 and for virtio6-input.1 on CPU 3:

+
1
+2
+3
+4
+5
+6
+7
+8
+9
[root@dut ~]# for i in {1..2}; do grep virtio6-input /proc/interrupts; sleep 5; done
+ 53:   72469349          0     677467          0          0          0          0          0  PCI-MSIX-0000:07:00.0   1-edge      virtio6-input.0
+ 55:          0          0   11189465     350044          1   38659605          0          0  PCI-MSIX-0000:07:00.0   3-edge      virtio6-input.1
+ 57:          0          0          0   11296239          0          0          1          0  PCI-MSIX-0000:07:00.0   5-edge      virtio6-input.2
+ 59:   11620198          0          0          0          0          0          2          0  PCI-MSIX-0000:07:00.0   7-edge      virtio6-input.3
+ 53:   72469349          0     995563          0          0          0          0          0  PCI-MSIX-0000:07:00.0   1-edge      virtio6-input.0
+ 55:          0          0   11189465     535187          1   38659605          0          0  PCI-MSIX-0000:07:00.0   3-edge      virtio6-input.1
+ 57:          0          0          0   11296239          0          0          1          0  PCI-MSIX-0000:07:00.0   5-edge      virtio6-input.2
+ 59:   11620198          0          0          0          0          0          2          0  PCI-MSIX-0000:07:00.0   7-edge      virtio6-input.3
+
+

Using flamegraphs to analyze CPU activity

+

Now that we configured out server to run on CPUs 6 and 7, and our receive queue interrupts on CPUs 2 and 3, let's +profile our CPUs. Let's use perf script to create flamegraphs:

+
1
+2
[root@dut ~]# for c in {0..7}; do $(d=$(pwd)/irq_smp_affinity.$c; mkdir $d; pushd $d; perf script flamegraph -C $c -F 99 sleep 5; popd) & done
+(... wait for > 5 seconds ) ...
+
+

Now, copy the flamegraphs to your local system for analysis. You can access the flamegraphs of my test runs here: +IRQ smp affinity - flamegraph 0 +IRQ smp affinity - flamegraph 1 +IRQ smp affinity - flamegraph 2 +IRQ smp affinity - flamegraph 3 +IRQ smp affinity - flamegraph 4 +IRQ smp affinity - flamegraph 5 +IRQ smp affinity - flamegraph 6 +IRQ smp affinity - flamegraph 7

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 1c6d27dd..5b03503d 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,437 +2,442 @@ https://andreaskaris.github.io/blog/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/ceph/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/ceph/ceph-manual-test/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/coding/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/coding/golang-ip-conversion/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/coding/operator-sdk-reconciliation/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/coding/vimrc/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/cgroups/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/cgroups_cpu_quota/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/containers/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/get-process-cgroup-info-and-limits/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/hugepages/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/ipxe-boot-environment/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/java-idrac-issues/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/libvirt-uefi-without-secureboot/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/meson/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/namespaces/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/old_java_version_with_xorgs_in_container/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/org-gnome-shell-overrides/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/protect-lenovo-battery/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/selinux-cheatsheet/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/setting-journalctl-limits/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/linux/udev-ethtool/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/accept-source-routing/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/arp_and_the_neighbor_table/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/bonding_in_linux/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/bpf-and-tcpdump/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/geneve_tunneling/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/haproxy-and-h2c/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/install-openvswitch-on-rocky/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/juniper_x520/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/netlink-address-fields/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/netlink/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/ovn-interconnection/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/ovn_standalone_on_fedora/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/ovs-vxlan-tunnels-and-dscp/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/ovs_recirculation/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/ovs_with_gdb/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/packet-tracing-with-ovn/ - 2024-07-19 + 2024-08-08 + daily + + + https://andreaskaris.github.io/blog/networking/rss-irq-affinity-and-rps/ + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/sctp/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/useful-commands/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/networking/wireguard/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/HPA/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/alertmanager/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/analyzing-cni/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/cpu-isolation-in-openshift/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/cpu-manager-with-custom-machine-config-pool/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/crio-conmon-runc/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/dedicated-service-monitors/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/etcd_perf/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/fix-selinux-labels-coreos/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/get-vs-list-api-calls/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/how_rhcos_updates_work/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/ingress-controller-sharding-on-separate-vip/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/ingresscontroller_router_sharding_ocp_on_osp/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/istio-1.6-on-ocp.4.x/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/kata/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/kernel-ml-on-openshift/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/kind-with-private-registry/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/kubelet-filesystems/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/kubernetes_cluster/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/list_docker_registry_containers/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/mounting-container-image/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/ocp-custom-release-image/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/ocp4-infra-nodes-with-machineset-without-worker-label/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/openshift-scc-with-mutating-webhooks/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/openshift-with-multipath/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/openshift_httpbin_tshark_sidecar/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/openshift_mirror_registry/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/openshift_troubleshooting_etcd_state/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/ovn-kind-hybrid-overlay/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/patch-service-loadbalancer-ingress-ip/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/private-registry/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/proxy-ocp-4.5/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/rpm-ostree-failed-to-find-image/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/scc/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/seccomp-defaults-ocp/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/troubleshooting_openshift_on_openstack_worker_creation/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/useful-ocp-commands/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openshift/useful-ocp-sdn-commands/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openstack/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openstack/install_openshift_on_openstack/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openstack/reattach_to_running_deployment/ - 2024-07-19 + 2024-08-08 daily https://andreaskaris.github.io/blog/openstack/using_clouds_yaml/ - 2024-07-19 + 2024-08-08 daily \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index c705e12d..b80eef18 100644 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ diff --git a/src/rss-irq-affinity-and-rps/irq_smp_affinity.0/flamegraph.html b/src/rss-irq-affinity-and-rps/irq_smp_affinity.0/flamegraph.html new file mode 100644 index 00000000..ee64b8ec --- /dev/null +++ b/src/rss-irq-affinity-and-rps/irq_smp_affinity.0/flamegraph.html @@ -0,0 +1,30 @@ + + + + + Flame Graph + + +
+ + + +
+ + +
+
+
+ +
+
Loading Flame Graph...
+
+ + + + diff --git a/src/rss-irq-affinity-and-rps/irq_smp_affinity.1/flamegraph.html b/src/rss-irq-affinity-and-rps/irq_smp_affinity.1/flamegraph.html new file mode 100644 index 00000000..3a6145a2 --- /dev/null +++ b/src/rss-irq-affinity-and-rps/irq_smp_affinity.1/flamegraph.html @@ -0,0 +1,30 @@ + + + + + Flame Graph + + +
+ + + +
+ + +
+
+
+ +
+
Loading Flame Graph...
+
+ + + + diff --git a/src/rss-irq-affinity-and-rps/irq_smp_affinity.2/flamegraph.html b/src/rss-irq-affinity-and-rps/irq_smp_affinity.2/flamegraph.html new file mode 100644 index 00000000..8441538a --- /dev/null +++ b/src/rss-irq-affinity-and-rps/irq_smp_affinity.2/flamegraph.html @@ -0,0 +1,30 @@ + + + + + Flame Graph + + +
+ + + +
+ + +
+
+
+ +
+
Loading Flame Graph...
+
+ + + + diff --git a/src/rss-irq-affinity-and-rps/irq_smp_affinity.3/flamegraph.html b/src/rss-irq-affinity-and-rps/irq_smp_affinity.3/flamegraph.html new file mode 100644 index 00000000..6796a7e5 --- /dev/null +++ b/src/rss-irq-affinity-and-rps/irq_smp_affinity.3/flamegraph.html @@ -0,0 +1,30 @@ + + + + + Flame Graph + + +
+ + + +
+ + +
+
+
+ +
+
Loading Flame Graph...
+
+ + + + diff --git a/src/rss-irq-affinity-and-rps/irq_smp_affinity.4/flamegraph.html b/src/rss-irq-affinity-and-rps/irq_smp_affinity.4/flamegraph.html new file mode 100644 index 00000000..394dfbe8 --- /dev/null +++ b/src/rss-irq-affinity-and-rps/irq_smp_affinity.4/flamegraph.html @@ -0,0 +1,30 @@ + + + + + Flame Graph + + +
+ + + +
+ + +
+
+
+ +
+
Loading Flame Graph...
+
+ + + + diff --git a/src/rss-irq-affinity-and-rps/irq_smp_affinity.5/flamegraph.html b/src/rss-irq-affinity-and-rps/irq_smp_affinity.5/flamegraph.html new file mode 100644 index 00000000..394dfbe8 --- /dev/null +++ b/src/rss-irq-affinity-and-rps/irq_smp_affinity.5/flamegraph.html @@ -0,0 +1,30 @@ + + + + + Flame Graph + + +
+ + + +
+ + +
+
+
+ +
+
Loading Flame Graph...
+
+ + + + diff --git a/src/rss-irq-affinity-and-rps/irq_smp_affinity.6/flamegraph.html b/src/rss-irq-affinity-and-rps/irq_smp_affinity.6/flamegraph.html new file mode 100644 index 00000000..1ea3c5e1 --- /dev/null +++ b/src/rss-irq-affinity-and-rps/irq_smp_affinity.6/flamegraph.html @@ -0,0 +1,30 @@ + + + + + Flame Graph + + +
+ + + +
+ + +
+
+
+ +
+
Loading Flame Graph...
+
+ + + + diff --git a/src/rss-irq-affinity-and-rps/irq_smp_affinity.7/flamegraph.html b/src/rss-irq-affinity-and-rps/irq_smp_affinity.7/flamegraph.html new file mode 100644 index 00000000..394dfbe8 --- /dev/null +++ b/src/rss-irq-affinity-and-rps/irq_smp_affinity.7/flamegraph.html @@ -0,0 +1,30 @@ + + + + + Flame Graph + + +
+ + + +
+ + +
+
+
+ +
+
Loading Flame Graph...
+
+ + + +