initial checkin for rawhide

Signed-off-by: Clark Williams <williams@redhat.com>
This commit is contained in:
Clark Williams 2023-07-05 08:19:59 -05:00
parent 2e8411c3d3
commit 684db02d31
18 changed files with 1058 additions and 0 deletions

72
Makefile Normal file
View File

@ -0,0 +1,72 @@
VERSION := $(shell awk '/^Version:/ { print $$2 }' realtime-setup.spec)
$(info "Version: $(VERSION)")
RPMDIR := $(shell pwd)/rpm
RPMARGS := --define "_topdir $(RPMDIR)"
CC := gcc
ifeq ($(CFLAGS),)
CFLAGS := -O3 -g -Wall -D_GNU_SOURCE \
-fstack-protector-all -fcf-protection \
-fstack-clash-protection
endif
CFLAGS += -fPIC -fplugin=annobin
LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
DISTVER := 8.0.0
DISTGITDIR := ../realtime-setup.rhpkg
DISTGITBRANCH := rhel-$(DISTVER)
FILES := realtime-setup-kdump \
slub_cpu_partial_off \
rhel-rt.rules \
kernel-is-rt \
realtime-setup.sysconfig \
realtime-setup.systemd \
realtime.conf \
realtime-entsk.service \
realtime-setup.service \
realtime-setup.spec
all: realtime-entsk
realtime-entsk: enable-netsocket-tstamp-static-key.c
$(CC) $(CFLAGS) -c enable-netsocket-tstamp-static-key.c
$(CC) $(LDFLAGS) -o realtime-entsk enable-netsocket-tstamp-static-key.o
rpm: rpmdir tarball
cp realtime-setup-$(VERSION).tar.bz2 rpm/SOURCES
rpmbuild $(RPMARGS) -ba realtime-setup.spec
rpmdir:
@[ -d rpm ] || mkdir -p rpm/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
srpm: clean rpmdir tarball
mv realtime-setup-$(VERSION).tar.bz2 rpm/SOURCES
rpmbuild $(RPMARGS) -bs realtime-setup.spec
clean:
rm -f *~ *.tar.bz2
rm -rf rpm
rm -f realtime-entsk *.o
tarball: rpmdir
git archive --format=tar --prefix=realtime-setup-$(VERSION)/ HEAD | bzip2 >realtime-setup-$(VERSION).tar.bz2
install:
install -m 755 -D realtime-setup-kdump $(DEST)/usr/bin/realtime-setup-kdump
install -m 755 -D slub_cpu_partial_off $(DEST)/usr/bin/slub_cpu_partial_off
install -m 644 -D rhel-rt.rules $(DEST)/etc/udev/rules.d/99-rhel-rt.rules
install -m 755 -D kernel-is-rt $(DEST)/usr/sbin/kernel-is-rt
install -m 644 -D realtime-setup.sysconfig $(DEST)/etc/sysconfig/realtime-setup
install -m 755 -D realtime-setup.systemd $(DEST)/usr/bin/realtime-setup
install -m 644 -D realtime.conf $(DEST)/etc/security/limits.d/realtime.conf
install -m 644 -D realtime-entsk.service $(DEST)/usr/lib/systemd/system/realtime-entsk.service
install -m 755 -D -s realtime-entsk $(DEST)/usr/sbin/realtime-entsk
install -m 644 -D realtime-setup.service $(DEST)/usr/lib/systemd/system/realtime-setup.service
dist-git: tarball
cd $(DISTGITDIR) && rhpkg switch-branch --fetch $(DISTGITBRANCH)
cp $(FILES) $(DISTGITDIR)
cp realtime-setup-$(VERSION).tar.bz2 $(DISTGITDIR)
cd $(DISTGITDIR) && rhpkg new-sources realtime-setup-$(VERSION).tar.bz2
@echo "files copied to $(DISTGITDIR)"

View File

@ -0,0 +1,83 @@
/*
* SPDX-License-Identifier: GPL-2.0-or-later
*
* Copyright (c) 2018 Marcelo Tosatti <mtosatti@redhat.com>
* Open a socket, and enable timestamping on it.
*
* This is to avoid Chrony from changing timestamping
* user count from 0->1 and vice-versa, causing
* static key enable/disable IPIs.
*
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <ifaddrs.h>
#include <linux/errqueue.h>
#include <linux/ethtool.h>
#include <linux/net_tstamp.h>
#include <linux/sockios.h>
#include <net/if.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
int main (void)
{
int option = SOF_TIMESTAMPING_OPT_TX_SWHW;
int sock_fd;
int ret;
int pid_fd;
pid_t pid;
char buf[50];
/* open a datagram socket */
sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (sock_fd < 0) {
printf("Error opening the socket\n");
return 0;
}
/* set the timestamping option
* this is to trigger the IPIs that notify all cpus of the change
*/
if (setsockopt(sock_fd, SOL_SOCKET, SO_TIMESTAMP, &option, sizeof (option)) < 0) {
printf("Could not enable timestamping option %x", (unsigned int)option);
close(sock_fd);
return 0;
}
/* dameonize our task */
ret = daemon(0, 0);
if (ret == -1) {
perror("daemon");
exit(0);
}
/* write our pid file to make systemd happy */
pid_fd = open("/run/rt-entsk.pid", O_RDWR|O_CREAT|O_TRUNC, 0644);
if (pid_fd < 0) {
perror("open of /run/rt-entsk.pid failed:");
exit(errno);
}
pid = getpid();
sprintf(buf, "%d\n", pid);
ret = write(pid_fd, buf, strlen(buf));
if (ret == -1) {
perror("write");
exit(1);
}
close(pid_fd);
/* now just pause forever */
while (1) {
pause();
}
}

2
kernel-is-rt Executable file
View File

@ -0,0 +1,2 @@
#!/usr/bin/bash -e
[ -e /sys/kernel/realtime ]

2
kernel-rt-protect.conf Normal file
View File

@ -0,0 +1,2 @@
[main]
enabled=1

27
kernel-rt-protect.py Normal file
View File

@ -0,0 +1,27 @@
from yum.plugins import TYPE_INTERACTIVE
requires_api_version = '2.5'
plugin_type = (TYPE_INTERACTIVE,)
def config_hook(conduit):
def get_running_kernel_pkgtup(ts):
"""This takes the output of uname and figures out the pkgtup of the running
kernel (name, arch, epoch, version, release)."""
import os, glob
ver = os.uname()[2]
# we glob for the file that MIGHT have this kernel
# and then look up the file in our rpmdb.
fns = sorted(glob.glob('/boot/vmlinuz*%s*' % ver))
for fn in fns:
mi = ts.dbMatch('basenames', fn)
for h in mi:
e = h['epoch']
if h['epoch'] is None:
e = '0'
else:
e = str(e)
return (h['name'], h['arch'], e, h['version'], h['release'])
return (None, None, None, None, None)
from yum import misc
misc.get_running_kernel_pkgtup = get_running_kernel_pkgtup

12
realtime-entsk.service Normal file
View File

@ -0,0 +1,12 @@
[Unit]
Description=RT Enable Netsocket Timestap Static Key daemon
After=syslog.target network.target
StartLimitIntervalSec=0
[Service]
Type=forking
PIDFile=/run/rt-entsk.pid
ExecStart=/usr/sbin/rt-entsk
[Install]
WantedBy=multi-user.target

171
realtime-setup-kdump Normal file
View File

@ -0,0 +1,171 @@
#!/usr/bin/bash
#
# script to update /etc/sysconfig/kdump to use the latest
# kernel package as the dump kernel
#
# optional argument --grub causes kdump kernel cmdline to
# be added to rt kernel grub entries
#
me=$(basename $0)
rpmcmd='rpm -q --last'
function fatal () {
echo "$me: " $1
exit -1
}
function usage () {
echo "usage: $me [-g|--grub] [-r|--rhel] [-v|--verbose] [-h|--help]"
echo " --grub - add crashkernel arg to rt grub entries"
echo " --rhel - use the RHEL-8 kernel as the kdump kernel"
echo " (the default is to use the RHEL-RT kernel)"
echo " --verbose - print out actions"
echo " --help - print this message"
exit -1
}
function report() {
[ $verbose -eq 1 ] && echo $1
}
# return the latest package version of specified package name
function latest_package_ver() {
local pkg=$1
local ver=$($rpmcmd $pkg | head -1 | awk '{print $1}')
if [ $? -ne 0 ]; then
fatal " error fetching version for $pkg"
fi
echo ${ver#$pkg-}
return 0
}
# get the kernel version of hhe latest installed kernel
function vmlinux_ver() {
local ver=$1
local vmver=''
for i in $(cd /boot; echo vmlinuz-*); do
if [ "${i#vmlinuz-$ver}" != "$i" ]; then
vmver=${i#vmlinuz-}
echo $vmver
return 0
fi
done
return 1
}
# find all the grub indexs for installed rhel-rt kernels
# returns a comma-separated list of indices for use
# by the grubby command
function find_rt_kernel_indexes_rhel_rt() {
local awkscript='BEGIN{FS="="; ORS=","} $1 ~ /^index/{idx=$2;}
$2 ~ /.rt.*.el8.x86_64/ &&
$1 ~ /^kernel/ {print idx}'
local rt_idx_list=$(/sbin/grubby --info=ALL | /usr/bin/awk "$awkscript")
echo $rt_idx_list | sed -e 's/,$//'
return 0
}
#############################################################################
# make sure we're root
if [ $(id -u) -ne 0 ]; then
echo " must be root to run $me!"
usage
fi
# process options
dogrub=0
userhel=0
verbose=0
TEMP=$(getopt --options "grvh" --longoptions="grub,rhel,verbose,help" -- "$@")
if [ $? -ne 0 ]; then
usage
fi
eval set -- "$TEMP"
while true; do
case "$1" in
-g|--grub)
dogrub=1
shift
;;
-r|--rhel)
userhel=1
shift
;;
-v|--verbose)
verbose=1
shift
;;
-h|--help)
usage
;;
--) shift ; break ;;
*)
echo "internal error!"
usage
;;
esac
done
# warn if /etc/sysconfig/kdump does not exist
if [ ! -f /etc/sysconfig/kdump ]; then
echo " File /etc/sysconfig/kdump not found."
echo " Please, check your kexec-tools installation."
exit 1
fi
if [ $dogrub = 0 ]; then
echo "Not performing changes to /etc/grub.conf"
echo
# check if there is memory reserved for the kexec kernel
if ! cat /proc/cmdline | grep -e crashkernel > /dev/null; then
echo " Kernel DOES NOT have memory reserved for kdump kernel..."
echo " Use --grub option to enable crashkernel option on kernel command line"
echo
fi
fi
# select the right kdump kernel
if [ $userhel -eq 1 ]; then
KDUMP_KERNEL="kernel"
else
KDUMP_KERNEL="kernel-rt"
fi
# get the version of the latest installed kernel
kver=$(latest_package_ver $KDUMP_KERNEL)
if [ -z "$kver" ]; then
fatal " Can't find $KDUMP_KERNEL package information!"
fi
report " making kernel-$kver the kdump kernel"
# find the vmlinux version info for the latest kernel package
vmlinux_version=$(vmlinux_ver $kver)
if [ -z "$vmlinux_version" ]; then
fatal " Can't get vmlinux version!"
fi
# now edit the /etc/sysconfig/kdump file
sed -e "s/^KDUMP_KERNELVER.*$/KDUMP_KERNELVER=\"$vmlinux_version\"/" \
/etc/sysconfig/kdump >/tmp/kdump.$$
mv /etc/sysconfig/kdump /etc/sysconfig/kdump.save && \
mv /tmp/kdump.$$ /etc/sysconfig/kdump
# if requested, update the grub entries for the rt kernels
if [ $dogrub = 1 ]; then
rtver=$(latest_package_ver kernel-rt)
if [ -z "$rtver" ]; then
fatal " Can't find kernel-rt package information!"
fi
# RHEL-RT kernel
kernels=$(find_rt_kernel_indexes_rhel_rt)
if [ ! -z $kernels ]; then
report " adding 'crashkernel=auto' arg to grub entries: $kernels"
/sbin/grubby --update-kernel=$kernels --args="crashkernel=auto"
fi
fi
exit $?

2
realtime-setup.dracut Normal file
View File

@ -0,0 +1,2 @@
fw_dir+=":/lib/firmware/$(uname -r)"

12
realtime-setup.service Normal file
View File

@ -0,0 +1,12 @@
[Unit]
Description=RHEL-RT environment details setup
After=syslog.target
## Not a daemon
[Service]
Type=simple
ExecStart=/usr/bin/rt-setup
[Install]
WantedBy=multi-user.target

350
realtime-setup.spec.save Normal file
View File

@ -0,0 +1,350 @@
Name: rt-setup
Version: 2.1
Release: 1%{?dist}
License: GPL+
Summary: Setup RHEL-RT environment details
Group: System Environment/Base
Source: rt-setup-%{version}.tar.bz2
ExclusiveArch: x86_64
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: gcc
BuildRequires: systemd
BuildRequires: annobin
Requires: pam >= 0.99.6.2-3.26
Requires: /usr/sbin/groupadd
Requires: kexec-tools
Requires: tuna
Requires: tuned
Requires: tuned-profiles-realtime
Requires: systemd
%global debug_package %{nil}
%description
The 'rt-setup' package configures details required by RHEL-RT environment.
- creates realtime group
- adds realtime limits configuration for PAM
- adds /usr/bin/rt-setup-kdump to config kdump in RT
- adds udev specific rules for threaded irqs and /dev/rtc access
- adds /usr/bin/slub_cpu_partial_off to turn off cpu_partials in SLUB
- adds net-socket timestamp static key daemon (rt-entsk)
%prep
%setup
%build
%set_build_flags
make all
%install
rm -Rf %{buildroot}
make DEST=%{buildroot} install
%post
/usr/sbin/groupadd -f -g 71 realtime
if grep kernel.hung_task_panic /etc/sysctl.conf >/dev/null 2>&1
then
:
else
sysctl -w kernel.hung_task_panic=0 >/dev/null 2>&1
cat <<EOF >>/etc/sysctl.conf
# controls whether the system should reboot if it detects a hung task
# 1 means reboot after hung_task_timeout_secs after a hung task is detected
# default value is 0
kernel.hung_task_panic = 0
EOF
fi
if grep kernel.hung_task_timeout_secs /etc/sysctl.conf >/dev/null 2>&1
then
:
else
sysctl -w kernel.hung_task_timeout_secs=600 >/dev/null 2>&1
cat <<EOF >>/etc/sysctl.conf
# controls how long to reboot after a hung task is detected
# default is 600 seconds.
# note: this only matters if kernel.hung_task_panic=1
kernel.hung_task_timeout_secs = 600
EOF
fi
# turn on the rt-setup startup file
systemctl enable rt-setup
%preun
if [ "$1" = "0" ] ; then # uninstall
systemctl disable rt-setup
fi
%clean
rm -rf %{buildroot}
%files
%defattr(0644,root,root,0755)
%config(noreplace) %{_sysconfdir}/security/limits.d/realtime.conf
%config(noreplace) %{_sysconfdir}/udev/rules.d/99-rhel-rt.rules
%config(noreplace) %{_sysconfdir}/sysconfig/rt-setup
%attr(0755, root, root) %{_bindir}/rt-setup-kdump
%attr(0755, root, root) %{_bindir}/slub_cpu_partial_off
%attr(0755, root, root) %{_sbindir}/rt-entsk
%attr(0755, root, root) %{_sbindir}/kernel-is-rt
%attr(0644, root, root) %{_unitdir}/rt-setup.service
%attr(0755, root, root) %{_bindir}/rt-setup
%attr(0644, root, root) %{_unitdir}/rt-entsk.service
%changelog
* Wed Mar 27 2019 Clark Williams <williams@redhat.com> 2.1.1
- build for RHEL 8.1.0
- added OSCI gating test framework
Resolves: rhbz#1682427
* Tue Oct 23 2018 Clark Williams <williams@redhat.com> 2.0.10
- rebuild to see if build-id continues to appear in the rpm
* Mon Sep 24 2018 Clark Williams <williams@redhat.com> 2.0.9
- fix annocheck static source analysis errors
Resolves: rhbz#1619407
* Fri Sep 14 2018 Clark Williams <williams@redhat.com> 2.0.8
- fix some coverity complaints about shell scripts
Resolves: rhbz#1619407
* Fri Sep 14 2018 Clark Williams <williams@redhat.com> 2.0.7
- strip rt-entsk executable on installation
Resolves: rhbz#1619407
* Fri Aug 24 2018 Clark Williams <williams@redhat.com> 2.0.6
- check for open failure to make coverity happy
Resolves: rhbz#1619407
* Fri Aug 24 2018 Clark Williams <williams@redhat.com> 2.0.5
- move pidfile write to after daemonize in rt-entsk
Resolves: rhbz#1619407
* Wed Aug 22 2018 Clark Williams <williams@redhat.com> 2.0.4
- add logic to write a pid file in rt-entsk (keep systemd happy)
Resolves: rhbz#1619407
* Wed Aug 22 2018 Clark Williams <williams@redhat.com> 2.0.3
- sync with rhel-7.6 build
Resolves: rhbz#1619407
* Wed Aug 22 2018 Clark Williams <williams@redhat.com> 2.0.2
- fix installation of rt-entsk
Resolves: rhbz#1619407
* Mon Aug 20 2018 Clark Williams <williams@redhat.com> 2.0.1
- build for RHEL 8.0.0
- add rt-entsk program for forcing network timestamps enabled
Resolves: rhbz#1619407
* Wed Aug 08 2018 Clark Williams <williams@redhat.com> 1.59-8
- remove libcgroup requirement
- remove comment about irqbalance
* Fri Jun 01 2018 Luis Claudio R. Goncalves <lgoncalv@redhat.com> 1.59-7
- rt-setup no longer rrequires rtctl (1585198)
Resolves: rhbz#1585198
* Tue Jul 05 2016 John Kacur <jkacur@redhat.com> - 1.59-5
- Rebuild for rhel-7.3
Resolves: rhbz#1341783
* Tue Jun 14 2016 John Kacur <jkacur@redhat.com> - 1.59-3
- Fix some spelling mistakes in the comments in rhel-rt.rules
- Add udev rules to allow the realtime group to access msr and cpuid registers
Resolves: rhbz#1341783
* Fri Jul 10 2015 Clark Williams <williams@redhat.com> - 1.59-2
- removed post-install script that disables irqbalance (1203764)
- fixed typo in requires for tuned-profiles-realtime (1241936)
* Thu Jul 2 2015 Clark Williams <williams@redhat.com> - 1.59-1
- added tuned and tuna dependencies, removed sqlite (1203764)
* Mon Dec 29 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.58-2
- fixed rt-setup shell script called on startup (1162769)
- removed the unnecessary mrg-rt-firmware logic (1162769)
* Fri Dec 26 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.58-1
- make startup logic work with systemd (1162769)
- product name cleanup (1173312)
* Fri Nov 28 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.57-6
- remove a reference to mrg-rt-release from initscript (1162766)
* Mon Nov 24 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.57-5
- move kernel-is-rt from /sbin to /usr/sbin (1151563)
* Tue Nov 18 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.57-4
- remove the database used by mrg-rt-release (1162766)
* Tue Nov 11 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.57-3
- remove mrg-rt-release (1162766)
* Tue Nov 04 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.57-2
- remove the old dracut rules from RHEL6 (1160440)
* Wed Oct 29 2014 Clark Williams <williams@redhat.com> - 1.57-1
- added mrg-2.5.8 release to mrg-rt-release database
* Tue Sep 30 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.56-2
- added mrg-2.5.7 release to mrg-rt-release database
* Wed Aug 20 2014 Clark Williams <williams@redhat.com> - 1.56-1
- added mrg-2.5.6 release to mrg-rt-release database
- removed dracut rule that caused problems when adding firmware to initramfs
* Fri Jul 25 2014 Clark Williams <williams@redhat.com> - 1.55-8
- added mrg-2.5.2 and mrg-2.5.4 releases to mrg-rt-release database
* Tue Jun 10 2014 John Kacur <jkacur@redhat.com> - 1.55-7
- udev: Add udev rule to give group realtime write access to cpu_dma_latency
* Mon Apr 28 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.55-6
- Added mrg-2.5 GA data to the mrg-rt-release database
* Wed Apr 09 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.55-5
- Added mrg-2.4.6 data to the mrg-rt-release database
* Fri Mar 28 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.55-4
- Trim the kernel version when read from uname -rt
* Tue Feb 18 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.55-3
- Added mrg-2.4.5 data to the mrg-rt-release database
* Wed Jan 22 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.55-2
- Added mrg-2.4.3 data to the mrg-rt-release database
* Tue Dec 10 2013 Clark Williams <williams@redhat.com> - 1.55-1
- First common build for RHEL7 and RHEL6
* Thu Nov 28 2013 Luis Claudio R. Goncalves <lgoncalv@redhat.com> 1.54-2
- Enhanced update-mrg-rt-release
* Thu Nov 28 2013 Luis Claudio R. Goncalves <lgoncalv@redhat.com> 1.54-1
- Update mrg-rt-release on every boot [848433]
* Thu Aug 29 2013 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.53-4
- add /lib/firmware/$(uname -r) to dracut firmware search path (998920)
- ensure rt-firmware files are on udev firmware search path (998920)
* Thu Aug 22 2013 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.53-3
- removed the dracut config file
* Tue Aug 20 2013 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.53-2
- added configuration file for dracut (998920)
- fixed macro usage on the specfile
* Thu Apr 25 2013 Clark Williams <williams@redhat.com> - 1.53-1
- turn off cgroup mounting logic
- added Requires for libcgroup
* Tue Apr 2 2013 Clark Williams <williams@redhat.com> - 1.52-1
- added script slub_cpu_partial_off
- added cgroups to /etc/sysconfig/rt-setup
* Wed Mar 27 2013 Clark Williams <williams@redhat.com> - 1.51-1
- added code to turn off SLUB cpu_partial at startup
* Mon Nov 12 2012 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.50-1
- rt-setup-kdump: use mrg-2.x as the kdump kernel [868446] [868442] [868329]
- rt-setup-kdump: simplified the script and added --rhel option
* Tue Mar 6 2012 Clark Williams <williams@redhat.com> - 1.11-1
- removed %%post logic that disables bandwidth limiting [BZ# 791371]
- changed rtprio from 100 to 99 in realtime.conf
* Thu Oct 13 2011 Clark Williams <williams@redhat.com> - 1.10-1
- fixed thinko by removing firmware download logic
* Tue Oct 11 2011 Clark Williams <williams@redhat.com> - 1.9-1
- added sysconfig and init script for handling cgroup mounting
- changed script kernel-is-rt to use /sys/kernel/realtime
* Wed May 11 2011 Clark Williams <williams@redhat.com> - 1.8-1
- simplified mrg-rt-firmware.rules to fix boot time hang on
large core machines (BZ# 698481)
* Fri Feb 11 2011 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.7-4
- Normalized the RHEL6 firmware path search (due to uname -r changes)
* Thu May 27 2010 John Kacur <jkacur@redhat.com> - 1.7-2
- set kernel.hung_task_panic=0 (off) by default
- set kernel.hung_task_timeout_secs=600 by default
- used sysctl to set sched_rt_runtime_us at install time, not just boot time
* Tue May 18 2010 Clark Williams <williams@redhat.com> - 1.7-1
- removed requirement for kernel-rt (circular dependency)
- cleaned up mrg-rt-firmware.rules (added commas between all key/value pairs)
* Wed Nov 25 2009 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.6-3
- rt-setup-kdump: configure kdump on all MRG kernel flavors
- rt-setup-kdump: fix a log entry that was too verbose
* Wed Nov 25 2009 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.6-2
- rt-setup-kdump treats MRG v1 and v2 kernels accordingly (BZ# 517529)
* Mon Nov 2 2009 Clark Williams <williams@redhat.com> - 1.6-1
- removed "@16" specifier from rt-setup-kdump script (BZ# 517529)
* Tue Sep 1 2009 Clark Williams <williams@redhat.com> - 1.5-2
- fixed path mismatches reported by Vernon Maury
* Wed Aug 26 2009 Clark Williams <williams@redhat.com> - 1.5-1
- add udev rules and scripts for handling driver firmware download
* Thu Jul 9 2009 Clark Williams <williams@redhat.com> - 1.4-1
- blow away rtctl udev rule (compatibility problem with RHEL
version of udev)
- update /dev/rtc udev rule to use PROGRAM rather than SYMLINK
* Tue Jul 7 2009 Clark Williams <williams@redhat.com> - 1.3-1
- added udev rules file to address:
- BZ 510121 hwclock & /dev/rtc broken in rt-kernel
- BZ 466929 udev rule for hotplug rtctl
* Thu May 21 2009 Clark Williams <williams@redhat.com> - 1.2-1
- added post section to edit /etc/sysctl.conf and add the
kernel.sched_rt_runtime_us parameter = -1 line to disable
the RT scheduler bandwith limiter
* Tue Jul 15 2008 Clark Williams <williams@redhat.com> - 1.1-6%{dist}
- fixed rt-setup-kdump to handle incorrect arguments (BZ 455536)
- added help argument to rt-setup-kdump
* Fri Jun 13 2008 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.1-5%{dist}
- rt-setup-kdump now touches /etc/grub.conf only when requested
* Tue Jun 03 2008 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.1-4%{dist}
- /usr/bin/rt-setup-kdump had wrong permissions
- changed rt-setup-kdump: added a few tests for reserved memory and for the
absence of /etc/sysconfig/kdump
- now rt-setup requires kexec-tools
* Mon May 12 2008 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.1-3%{dist}
- disables irqbalance as it may hurt determinism in RT
- installs rt-setup-kdump in /usr/bin
* Tue Apr 22 2008 Clark Williams <williams@redhat.com> - 1.1-2%{?dist}
- removed sed script to edit kdump config file (using updated
kexec-tools instead)
* Mon Apr 21 2008 Clark Williams <williams@redhat.com> - 1.1-1%{?dist}
- removed --args-linux from /etc/sysconfig/kdump (BZ# 432378)
- changed BuildArch to noarch
* Thu Feb 07 2008 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.0-3%{?dist}
- BZ:399591 - Fixed spec issues pointed by Jeremy Katz
- BZ:399591 - @realtime has gid=71.
- FIXES: BZ399591
* Thu Aug 02 2007 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.0-2%{?dist}
- Fixed package description
* Mon Jul 30 2007 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 1.0-1%{?dist}
- Initial packaging
- Requires all the basic packages for RT
- Requires support for limits.d and no realtime.conf present in PAM package

4
realtime-setup.sysconfig Normal file
View File

@ -0,0 +1,4 @@
#
# Decide whether to turn off SLUB cpu_partial support
#
SLUB_CPU_PARTIAL="off"

34
realtime-setup.systemd Executable file
View File

@ -0,0 +1,34 @@
#!/usr/bin/bash
on_rt () {
if [ -f /sys/kernel/realtime ]; then
return 0
fi
return 1
}
prog="rt-setup"
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
# is this a rhel-rt kernel?
if ! on_rt; then
echo "Not running on a RHEL-RT kernel!"
exit 0
fi
# make sure that cpusets are mounted
if ! grep cpuset /proc/mounts >/dev/null 2>&1; then
echo "cpusets not mounted!"
exit 2
fi
# if not running, start it up here, usually something like "daemon $exec"
if [ "$SLUB_CPU_PARTIAL" == "off" ]; then
slub_cpu_partial_off
slub_retval=$?
else
slub_retval=0
fi
exit $slub_retval

125
realtime-setup.sysvinit Normal file
View File

@ -0,0 +1,125 @@
#!/usr/bin/bash
#
# rt-setup - script to handle setup for running an RT kernel
#
# chkconfig: 2345 00 99
# description: This script is used to setup services for use with a \
# realtime Linux kernel \
# The main use now is to setup cgroups
# Source function library.
. /etc/rc.d/init.d/functions
prog="rt-setup"
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
# if rt-firmware is installed
if [ -d /lib/firmware/mrg-rt-firmware ]; then
if ! grep mrg-rt-firmware /lib/udev/firmware.sh > /dev/null
then
logger -t rt-setup "adding rt-firmware to udev firmware search path"
sed -i 's#) /lib/firmware"#) /lib/firmware"\nFIRMWARE_DIRS="/lib/firmware/mrg-rt-firmware $FIRMWARE_DIRS"#' /lib/udev/firmware.sh
fi
fi
lockfile=/var/lock/subsys/$prog
isrt() {
[ -f /sys/kernel/realtime ] || return 1
return 0
}
start() {
echo -n $"Starting $prog: "
# if not running, start it up here, usually something like "daemon $exec"
if [ "$SLUB_CPU_PARTIAL" == "off" ]; then
slub_cpu_partial_off
slub_retval=$?
else
slub_retval=0
fi
echo
# Update /etc/mrg-rt-release based on the running kernel
/usr/bin/update-mrg-rt-release --update-etc
[ $slub_retval -eq 0 ] && touch $lockfile
return $slub_retval
}
stop() {
echo -n $"Stopping $prog: "
rm -f $lockfile
echo
return 0
}
restart() {
stop
start
}
reload() {
restart
}
force_reload() {
restart
}
rh_status() {
if ! isrt; then
echo "$prog: Not running on an RT kernel!"
return 1
fi
# make sure that cpusets are mounted
if ! grep cpuset /proc/mounts >/dev/null 2>&1; then
echo "$prog: cpusets not mounted!"
return 2
fi
echo "$prog: Running RT kernel with cpusets mounted"
return 0
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
# if we're not running on an RT kernel then bail
#if ! isrt; then
# exit 0
#fi
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
exit $?

10
realtime.conf Normal file
View File

@ -0,0 +1,10 @@
# This file specifies reasonable default limits for users
# who should be able to run realtime processes.
#
# Such users must be added to group 'realtime' to be
# affected by these limits.
@realtime soft cpu unlimited
@realtime - rtprio 99
@realtime - nice -20
@realtime - memlock unlimited

19
rhel-rt.rules Normal file
View File

@ -0,0 +1,19 @@
# udev rules specific to RHEL-RT Realtime kernel
# insure /dev/rtc points to /dev/rtc0
# we use PROGRAM rather than SYMLINK because there is
# a (good) possibility that a /dev/rtc device file
# already exists and we want to replace it (hence the
# ln -sf)
KERNEL=="rtc0", PROGRAM+="/bin/ln -sf rtc0 /dev/rtc"
# Give permission to the realtime group to write a zero to /dev/cpu_dma_latency
# This will tell the power management system not to transition to a high cstate
KERNEL=="cpu_dma_latency", GROUP="realtime"
# Give permission to the realtime group to read the per cpu msr and cpuid
# registers. This is needed by cyclictest in rt-tests when using the new
# feature to read the smi counters. This is necessary but not sufficient
# A program that wants to access these registers will also need CAP_SYS_RAWIO
SUBSYSTEM=="msr", GROUP="realtime", MODE="0640"
SUBSYSTEM=="cpuid", GROUP="realtime", MODE="0640"

78
rtapp-example.sh Normal file
View File

@ -0,0 +1,78 @@
#!/usr/bin/bash
# the following is the chkconfig init header
#
# rtapp-example: processor frequency scaling support
#
# chkconfig: 345 99 01
# description: Run realtime application
#
# the following is the LSB init header see
# http://www.linux-foundation.org/spec//booksets/LSB-Core-generic/LSB-Core-generic.html#INITSCRCOMCONV
#
### BEGIN INIT INFO
# Provides: rtapp-example
# Should-Start:
# Default-Start: 3 4 5
# Short-Description: launcher script for realtime application
# Description: This script performs all system manipulations required for
# starting/stopping rtapp-example (i.e. isolating cpus, moving IRQ
# affinities, etc). and then starts or stops the rt applications
# using the tuna command line tool
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
prog="rtapp-example"
prep() {
# do core isolation and IRQ affinity mainipulations here
}
rollback() {
# undo core isolation and IRQ affinity changes here
}
startapp() {
# start application processes
}
stopapp() {
# stop application processes
}
start() {
prep
startapp
}
stop() {
rollback
stopapp
}
status() {
}
usage() {
echo "$0: start|stop|status|help"
exit 1
}
RETVAL=0
case "$1" in
start)
start
;;
stop)
stop
;;
status)
;;
*)
esac
exit $RETVAL

12
slub_cpu_partial_off Executable file
View File

@ -0,0 +1,12 @@
#!/usr/bin/bash
#
# shell script to turn SLUB cpu_partial logic off
# for improved determinism
#
if [ "$(id -u)" != "0" ]; then
echo "Must be root to run $(basename $0)"
exit -1
fi
find /sys/kernel/slab -name 'cpu_partial' -print | \
while read f; do echo 0 > $f; done

43
what-do.txt Normal file
View File

@ -0,0 +1,43 @@
Looking at the specfile, here's what realtime-setup gets you:
1. Create a realtime group:
/usr/sbin/groupadd -f -g 71 realtime
2. Turns on "panic on hung task":
sysctl -w kernel.hung_task_panic=0 >/dev/null 2>&1
3. Sets "hung task" threshold to 600 seconds:
sysctl -w kernel.hung_task_timeout_secs=600
4. Installs and enables systemd realtime-setup service file:
install -m 644 -D realtime-setup.service /usr/lib/systemd/system/realtime-setup.service
systemctl enable realtime-setup
5. installs realtime rules in /etc/security/limits.d/realtime.conf:
@realtime soft cpu unlimited
@realtime - rtprio 99
@realtime - nice -20
@realtime - memlock unlimited
6. install udev rules in /etc/udev/rules.d/99-rhel-rt.rules
# udev rules specific to RHEL-RT Realtime kernel
# insure /dev/rtc points to /dev/rtc0
# we use PROGRAM rather than SYMLINK because there is
# a (good) possibility that a /dev/rtc device file
# already exists and we want to replace it (hence the
# ln -sf)
KERNEL=="rtc0", PROGRAM+="/bin/ln -sf rtc0 /dev/rtc"
# Give permission to the realtime group to write a zero to /dev/cpu_dma_latency
# This will tell the power management system not to transition to a high cstate
KERNEL=="cpu_dma_latency", GROUP="realtime"
# Give permission to the realtime group to read the per cpu msr and cpuid
# registers. This is needed by cyclictest in rt-tests when using the new
# feature to read the smi counters. This is necessary but not sufficient
# A program that wants to access these registers will also need CAP_SYS_RAWIO
SUBSYSTEM=="msr", GROUP="realtime", MODE="0640"
SUBSYSTEM=="cpuid", GROUP="realtime", MODE="0640"
7. install sysconfig rules for RT in /etc/sysconfig/realtime-setup
#
# Decide whether to turn off SLUB cpu_partial support
#
SLUB_CPU_PARTIAL="off"
8. install script to turn off SLUB cpu-partial support:
/usr/bin/slub_cpu_partial_off
9. install kernel-is-rt script in /usr/sbin/kernel-is-rt
10. install a C binary that enables socket timestamping:
install -m 755 -D -s realtime-entsk /usr/sbin/realtime-entsk