diff options
| author | CoprDistGit <infra@openeuler.org> | 2024-07-26 17:19:39 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2024-07-26 17:19:39 +0000 |
| commit | 5be00af7c80ed4972c1f3379e6db9937e1a8b7bd (patch) | |
| tree | 7938404f19676c304f68d0d47e475fe4a1440452 /kdump-udev-throttler | |
| parent | ad07ec0c7538028e4d732f63e34d58150f5ffd42 (diff) | |
automatic import of kexec-tools
Diffstat (limited to 'kdump-udev-throttler')
| -rwxr-xr-x | kdump-udev-throttler | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/kdump-udev-throttler b/kdump-udev-throttler new file mode 100755 index 0000000..cd77a31 --- /dev/null +++ b/kdump-udev-throttler @@ -0,0 +1,42 @@ +#!/bin/bash +# This util helps to reduce the workload of kdump service restarting +# on udev event. When hotplugging memory / CPU, multiple udev +# events may be triggered concurrently, and obviously, we don't want +# to restart kdump service for each event. + +# This script will be called by udev, and make sure kdump service is +# restart after all events we are watching are settled. + +# On each call, this script will update try to aquire the $throttle_lock +# The first instance acquired the file lock will keep waiting for events +# to settle and then reload kdump. Other instances will just exit +# In this way, we can make sure kdump service is restarted immediately +# and for exactly once after udev events are settled. + +throttle_lock="/var/lock/kdump-udev-throttle" + +exec 9>$throttle_lock +if [ $? -ne 0 ]; then + echo "Failed to create the lock file! Fallback to non-throttled kdump service restart" + /bin/kdumpctl reload + exit 1 +fi + +flock -n 9 +if [ $? -ne 0 ]; then + echo "Throttling kdump restart for concurrent udev event" + exit 0 +fi + +# Wait for at least 1 second, at most 4 seconds for udev to settle +# Idealy we will have a less than 1 second lag between udev events settle +# and kdump reload +sleep 1 && udevadm settle --timeout 3 + +# Release the lock, /bin/kdumpctl will block and make the process +# holding two locks at the same time and we might miss some events +exec 9>&- + +/bin/kdumpctl reload + +exit 0 |
