Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package google-guest-configs for
openSUSE:Factory checked in at 2023-08-16 14:17:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/google-guest-configs (Old)
and /work/SRC/openSUSE:Factory/.google-guest-configs.new.11712 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "google-guest-configs"
Wed Aug 16 14:17:25 2023 rev:16 rq:1104058 version:20230808.00
Changes:
--------
---
/work/SRC/openSUSE:Factory/google-guest-configs/google-guest-configs.changes
2023-06-27 23:18:06.547900940 +0200
+++
/work/SRC/openSUSE:Factory/.google-guest-configs.new.11712/google-guest-configs.changes
2023-08-16 14:17:30.295149163 +0200
@@ -1,0 +2,12 @@
+Tue Aug 15 13:49:04 UTC 2023 - John Paul Adrian Glaubitz
<[email protected]>
+
+- Update to version 20230808.00
+ * 64-gce-disk-removal.rules: delete (#51)
+- from version 20230801.00
+ * Replace xxd with dd for google_nvme_id (#56)
+- from version 20230729.00
+ * Setup irq binding for a3 8g vm (#57)
+- from version 20230724.00
+ * Debian packaging: add xxd dependency (#55)
+
+-------------------------------------------------------------------
Old:
----
google-guest-configs-20230626.00.tar.gz
New:
----
google-guest-configs-20230808.00.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ google-guest-configs.spec ++++++
--- /var/tmp/diff_new_pack.izdceo/_old 2023-08-16 14:17:31.023154260 +0200
+++ /var/tmp/diff_new_pack.izdceo/_new 2023-08-16 14:17:31.027154288 +0200
@@ -23,7 +23,7 @@
%define _udevdir %(pkg-config --variable udev_dir udev)
%endif
Name: google-guest-configs
-Version: 20230626.00
+Version: 20230808.00
Release: 0
Summary: Google Cloud Guest Configs
License: Apache-2.0
++++++ google-guest-configs-20230626.00.tar.gz ->
google-guest-configs-20230808.00.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/guest-configs-20230626.00/src/lib/udev/google_nvme_id
new/guest-configs-20230808.00/src/lib/udev/google_nvme_id
--- old/guest-configs-20230626.00/src/lib/udev/google_nvme_id 2023-06-23
23:25:28.000000000 +0200
+++ new/guest-configs-20230808.00/src/lib/udev/google_nvme_id 2023-08-08
17:33:56.000000000 +0200
@@ -58,7 +58,7 @@
#######################################
function get_namespace_device_name() {
local nvme_json
- nvme_json="$("$nvme_cli_bin" id-ns -b "$1" | xxd -p -seek 384 | xxd -p -r)"
+ nvme_json="$("$nvme_cli_bin" id-ns -b "$1" | dd bs=1 skip=384 2>/dev/null)"
if [[ $? -ne 0 ]]; then
return 1
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/guest-configs-20230626.00/src/lib/udev/rules.d/64-gce-disk-removal.rules
new/guest-configs-20230808.00/src/lib/udev/rules.d/64-gce-disk-removal.rules
---
old/guest-configs-20230626.00/src/lib/udev/rules.d/64-gce-disk-removal.rules
2023-06-23 23:25:28.000000000 +0200
+++
new/guest-configs-20230808.00/src/lib/udev/rules.d/64-gce-disk-removal.rules
1970-01-01 01:00:00.000000000 +0100
@@ -1,17 +0,0 @@
-# Copyright 2016 Google Inc. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# When a disk is removed, unmount any remaining attached volumes.
-
-ACTION=="remove", SUBSYSTEM=="block", KERNEL=="sd*|vd*|nvme*", RUN+="/bin/sh
-c '/bin/umount -fl /dev/$name && /usr/bin/logger -p daemon.warn -s WARNING:
hot-removed /dev/$name that was still mounted, data may have been corrupted'"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/guest-configs-20230626.00/src/usr/bin/google_set_multiqueue
new/guest-configs-20230808.00/src/usr/bin/google_set_multiqueue
--- old/guest-configs-20230626.00/src/usr/bin/google_set_multiqueue
2023-06-23 23:25:28.000000000 +0200
+++ new/guest-configs-20230808.00/src/usr/bin/google_set_multiqueue
2023-08-08 17:33:56.000000000 +0200
@@ -43,6 +43,54 @@
ethtool -L "${1}" combined "${2}" > /dev/null 2>&1
}
+function set_irq_range() {
+ local -r nic="$1"
+ local core="$2"
+
+ # The user may not have this $nic configured on their VM, if not, just skip
+ # it, no need to error out.
+ if [ ! -d "/sys/class/net/"$nic"/device" ]; then
+ return;
+ fi
+
+ # We count the number of rx queues and assume number of rx queues == tx
+ # queues. Currently the GVE configuration at boot is 16 rx + 16 tx.
+ num_q=$(ls -1 /sys/class/net/"$nic"/queues/ | grep rx | wc -l)
+
+ echo "Setting irq binding for "$nic" to core [$core - $((core + num_q - 1))]
..."
+
+ irqs=($(ls /sys/class/net/"$nic"/device/msi_irqs | sort -g))
+ for ((queue = 0; queue < "$num_q"; queue++)); do
+ tx_irq=${irqs[$queue]}
+ rx_irq=${irqs[$((queue + num_q))]}
+
+ # this is GVE's TX irq. See gve_tx_idx_to_ntfy().
+ echo "$core" > /proc/irq/"$tx_irq"/smp_affinity_list
+
+ # this is GVE's RX irq. See gve_rx_idx_to_ntfy().
+ echo "$core" > /proc/irq/"$rx_irq"/smp_affinity_list
+
+ # XPS (Transmit Packet Steering) allows a core to decide which queue to
+ # select if its mask is found in one of the queue's xps_cpus
+ cp /proc/irq/"$tx_irq"/smp_affinity
/sys/class/net/"$nic"/queues/tx-"$queue"/xps_cpus
+
+ echo -en "$nic:q-$queue: \ttx: irq $tx_irq bind to $core \trx: irq $rx_irq
bind to $core"
+ echo -e " \txps_cpus bind to $(cat
/sys/class/net/"$nic"/queues/tx-"$queue"/xps_cpus)"
+
+ core=$((core + 1))
+ done
+}
+
+# returns 0 (success) if it's running on a3 platform.
+function is_a3_platform() {
+ machine_type=$(curl -H "Metadata-Flavor: Google" \
+ http://169.254.169.254/computeMetadata/v1/instance/machine-type)
+
+ [[ "$machine_type" == *"a3-highgpu-8g"* ]] || return 1
+
+ return 0
+}
+
echo "Running $(basename $0)."
VIRTIO_NET_DEVS=/sys/bus/virtio/drivers/virtio_net/virtio*
@@ -160,3 +208,70 @@
echo ${xps_string} > $q
printf "Queue %d XPS=%s for %s\n" $queue_num `cat $q` $q
done | sort -n -k2
+
+if ! is_a3_platform; then
+ exit
+fi
+
+
+# Assign IRQ binding for network interfaces based on pci bus ordering.
+#
+# Below logics explains how we rank interfaces by pci bus order.
+# > find /sys/class/net -type l | xargs -L 1 realpath | sort
+# /sys/devices/pci0000:00/0000:00:0b.0/net/enp0s11
+#
/sys/devices/pci0000:01/0000:01:00.0/0000:02:00.0/0000:03:02.0/0000:06:00.0/net/enp6s0
+#
/sys/devices/pci0000:07/0000:07:00.0/0000:08:00.0/0000:09:02.0/0000:0c:00.0/net/enp12s0
+#
/sys/devices/pci0000:81/0000:81:00.0/0000:82:00.0/0000:83:02.0/0000:86:00.0/net/enp134s0
+#
/sys/devices/pci0000:87/0000:87:00.0/0000:88:00.0/0000:89:02.0/0000:8c:00.0/net/enp140s0
+# /sys/devices/virtual/net/lo
+#
+# > find /sys/class/net -type l | xargs -L 1 realpath | sort | xargs -L 1
basename | grep -v lo
+# enp0s11
+# enp6s0
+# enp12s0
+# enp134s0
+# enp140s0
+
+# IRQ binding for numa 0, CPUs [0, 51] and [104, 155] are for numa 0.
+numa0_irq_start=1
+find /sys/class/net -type l | xargs -L 1 realpath | sort | xargs -L 1 basename
| grep -v lo | while read nic_name; do
+ nic_numa_node=$(cat /sys/class/net/"$nic_name"/device/numa_node)
+ if [[ $nic_numa_node -ne 0 ]]; then
+ continue
+ fi
+
+ nic_num_queues=$(ls -1 /sys/class/net/"$nic_name"/queues/ | grep rx | wc -l)
+ bind_cores_begin=$numa0_irq_start
+ bind_cores_end=$((bind_cores_begin + nic_num_queues))
+
+ if [[ $bind_cores_begin -lt 51 ]] && [[ $bind_cores_end -gt 51 ]]; then
+ bind_cores_begin=104
+ bind_cores_end=$((bind_cores_begin + nic_num_queues))
+ fi
+
+ set_irq_range "$nic_name" "$bind_cores_begin"
+
+ numa0_irq_start=$bind_cores_end
+done
+
+# IRQ binding for numa 1, CPUs [52, 103] and [156, 207] are for numa 1.
+numa1_irq_start=52
+find /sys/class/net -type l | xargs -L 1 realpath | sort | xargs -L 1 basename
| grep -v lo | while read nic_name; do
+ nic_numa_node=$(cat /sys/class/net/"$nic_name"/device/numa_node)
+ if [[ $nic_numa_node -ne 1 ]]; then
+ continue
+ fi
+
+ nic_num_queues=$(ls -1 /sys/class/net/"$nic_name"/queues/ | grep rx | wc -l)
+ bind_cores_begin=$numa1_irq_start
+ bind_cores_end=$((bind_cores_begin + nic_num_queues))
+
+ if [[ $bind_cores_begin -lt 103 ]] && [[ $bind_cores_end -gt 103 ]]; then
+ bind_cores_begin=156
+ bind_cores_end=$((bind_cores_begin + nic_num_queues))
+ fi
+
+ set_irq_range "$nic_name" "$bind_cores_begin"
+
+ numa1_irq_start=$bind_cores_end
+done