How to Persist TCP Congestion Control algorithm change?

OpenSuSE 11.3 (but this is not likely a distro specific issue)
Kernel 2.6.34.7, but likely applies to a number of previous

Am close to launching a more extensive webpage describing in detail why and how this configuration is important, but I’m missing up to date information on how to persist the config. By default, changing the TCP Congestion Control algorithm only modifies the current system session. Docs I’ve read recommend that the command resetting the algorithm be written to

/etc/rc.d/rc.d

Am confused with all the different config files, but I suspect either an existing file should be modified or an additional file should be modified in

/etc/rc.d/rc5.d/

Question:
Need a recommendation. Should I just choose to modify a config file which might have remote relevance to kernel networking modules or should I just create a new file in rc5 something like

/etc/rc.d/rc5.d/K07networkkernel

Or, should something else be done?

BTW - As an example, the command to be implemented if implementing the veno algorithm which specially analyzes for wireless packet loss:

echo “veno” > /proc/sys/net/ipv4/tcp_congestion_control

TIA,
Tony

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

/sbin/sysctl

net.ipv4.tcp_congestion_control = cubic

So from the manpage I would guess this is the final command:

sudo /sbin/sysctl -w net.ipv4.tcp_congestion_control=cubic

Good luck.

On 01/27/2011 04:36 PM, tsu2 wrote:
>
> OpenSuSE 11.3 (but this is not likely a distro specific issue)
> Kernel 2.6.34.7, but likely applies to a number of previous
>
> Am close to launching a more extensive webpage describing in detail why
> and how this configuration is important, but I’m missing up to date
> information on how to persist the config. By default, changing the TCP
> Congestion Control algorithm only modifies the current system session.
> Docs I’ve read recommend that the command resetting the algorithm be
> written to
>
>
> Code:
> --------------------
> /etc/rc.d/rc.d
> --------------------
>
>
> Am confused with all the different config files, but I suspect either
> an existing file should be modified or an additional file should be
> modified in
>
>
> Code:
> --------------------
> /etc/rc.d/rc5.d/
> --------------------
>
>
> Question:
> Need a recommendation. Should I just choose to modify a config file
> which might have remote relevance to kernel networking modules or should
> I just create a new file in rc5 something like
>
>
> Code:
> --------------------
> /etc/rc.d/rc5.d/K07networkkernel
> --------------------
>
>
> Or, should something else be done?
>
> BTW - As an example, the command to be implemented if implementing the
> veno algorithm which specially analyzes for wireless packet loss:
>
> echo “veno” > /proc/sys/net/ipv4/tcp_congestion_control
>
> TIA,
> Tony
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.15 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBAgAGBQJNQgYeAAoJEF+XTK08PnB542AP/jlS254BZT9bDoweIfPAaNo7
C26VDVZtOQbLskmaneKC/w3NhdfcSPb7rOFk6Dfr/e6/c80OefDD7NFfDbMOhiZy
FEZO2wv/D+WjE6BTJqkPP4B27yu8yHq3WFCQonNfiswe3Robuwn40dkboeCwMBeB
VfRUcJoZGdyQ0KsStjPENVwUAlxQpn8Jj0ZBG+tpaK4yfws0BeipUghiRqKl/oWn
B2KEfwOtWe3quzmv/OD0qRbtpmTovaUdiYkQQzI/2dv7983Q9C6UzJmoNQkmLnPZ
6oJlrndWXPL8t6ofG/3s5q4NhfGfWh2wv8MFShOLhmgwoNYZ2WVIyUoMTdChsvnq
imGn/m8HiIMEsEhasIOfXMT+r/Seqql26qYLim/bOmyJ76k6qOeA/lkUVeM8ZMlZ
l/KhAcQN1pjRYBjobh/zekQGAUI5SKXo5FvSjsq1KpOW+Aj8V2l+YJ8FLDQjHdd0
gkNxDv4sFYrMVFZleyJKlhRStWznsgjT7gPLi4IpsA4sUeB6y2/KY7LccFKqOs7e
xE5Q0vA/OugX6OGSxtHRFzNGAXq95z8A2h3UClgWtOjjXzs0b55LkCv7z5jE6gVe
DffPGDH/Y14AGpaUamoa1ilv8hy/DaHVaj5kPvE5vu7ESv4fE4HNlnl9VBt5PAmy
2h9g/RmUgcCdcMYMaACZ
=5SOQ
-----END PGP SIGNATURE-----

Thx, Abe, but your post doesn’t actually address what I’m asking for…

By default, current Linux kernels default to the cubic congestion control algorithm, but it’s a very consservative algorithm that assumes small to medium file transfers with excellent network connectivity, most likely using a wired connection.

The reason why I want to change to veno is becuase that algorithm better analyzes for wireless packet loss (I usually connect using an 802.11 connection), and instead of re-compiling the kernel today it’s possible to take advantage of the kernel architecture’s “pluggable kernel modules.”

The command I posted is the proper command to invoke the veno congestion control module, but because it’s not part of the base kernel compilation, the invocation is only session-specific and is lost with the next reboot.

As I’ve posted, docs have suggested invoking the command with a config file in rc.d, but I’m asking for more specific guidance to avoid possible future issues with other configs.

If it turns out in the end that no one with specific knowledge of the kernel pluggable module architecture can recommend “best practice” I may just do whatever works, post the practice and wait for a reaction.

Thx,
Tony

Edit /etc/sysctl.conf. Read /etc/init.d/boot.sysctl and the sysctl man page and you will understand.

Thx Ken (and Abe again),

Unfortunately, still no joy.

Per your suggestions I re-read the sysctl man pages (both) and re-considered whether Abe’s original suggestion might actually work.

If I read the Man correctly, Abe’s code does write to sysctl, so I think that is the recommended method to do this. I also found a web page on the Internet that suggested that this command is supposed to “make kernel changes at runtime.” I also opened up sysctl.conf in a text editor but didn’t notice anything that makes me comfortable doing a direct edit (although maybe eventually I may try that also unless someone says to just go do it).

Unfortunately, the results are no different than my original methods. Changes are not persisted across reboots. If anyone wants to verify this is so, here are the commands (they’re safe for anyone to use)

# Determine current module loaded, default is cubic
cat /proc/sys/net/ipv4/tcp_congestion_control
# Running Abe's code writing a change to sysctl
sudo /sbin/sysctl -w net.ipv4.tcp_congestion_control=veno
# Verify module has changed to new module
cat /proc/sys/net/ipv4/tcp_congestion_control
# Reboot now.
# Determine which congestion control module is loaded
cat /proc/sys/net/ipv4/tcp_congestion_control

Am speculating that although writing to sysctl may be appropriate for many LKM (Loadable Kernel Modules), the pluggable modules for congestion control may be a special case where the recommended approach isn’t to load the appropriate module at bootup, but to modify the the module after bootup. That would probably explain the recommendation I ran into recommending changes to rc.d.

Thx,
Tony

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hmm… a SLES 11 server behaved similarly. I was able to make it
persist by simply adding the same parameter to the /etc/sysctl.conf file
which is probably a bad practice since it is owned by the procps package.
Still tinkering, but that is working properly.

The line I added:

net.ipv4.tcp_congestion_control = reno

Good luck.

On 01/31/2011 09:36 AM, tsu2 wrote:
>
> ken_yap;2284495 Wrote:
>> Edit /etc/sysctl.conf. Read /etc/init.d/boot.sysctl and the sysctl man
>> page and you will understand.
>
> Thx Ken (and Abe again),
>
> Unfortunately, still no joy.
>
> Per your suggestions I re-read the sysctl man pages (both) and
> re-considered whether Abe’s original suggestion might actually work.
>
> If I read the Man correctly, Abe’s code does write to sysctl, so I
> think that is the recommended method to do this. I also found a web page
> on the Internet that suggested that this command is supposed to “make
> kernel changes at runtime.” I also opened up sysctl.conf in a text
> editor but didn’t notice anything that makes me comfortable doing a
> direct edit (although maybe eventually I may try that also unless
> someone says to just go do it).
>
> Unfortunately, the results are no different than my original methods.
> Changes are not persisted across reboots. If anyone wants to verify this
> is so, here are the commands (they’re safe for anyone to use)
>
>
> Code:
> --------------------
> # Determine current module loaded, default is cubic
> cat /proc/sys/net/ipv4/tcp_congestion_control
> # Running Abe’s code writing a change to sysctl
> sudo /sbin/sysctl -w net.ipv4.tcp_congestion_control=veno
> # Verify module has changed to new module
> cat /proc/sys/net/ipv4/tcp_congestion_control
> # Reboot now.
> # Determine which congestion control module is loaded
> cat /proc/sys/net/ipv4/tcp_congestion_control
> --------------------
>
>
> Am speculating that although writing to sysctl may be appropriate for
> many LKM (Loadable Kernel Modules), the pluggable modules for congestion
> control may be a special case where the recommended approach isn’t to
> load the appropriate module at bootup, but to modify the the module
> after bootup. That would probably explain the recommendation I ran into
> recommending changes to rc.d.
>
> Thx,
> Tony
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.15 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBAgAGBQJNRuvGAAoJEF+XTK08PnB5gMEQAMKiB9MMLquhjRgHUoqawaUG
hotjgWnaV9q04W2DCeSkQex9kcigyPqfHbJSDP+2ld8WXlD322CyOAuTcsI/boGE
dGcyxk3bB29ToNaMvFhMT/hHpfu1wQjlwtA08onwiBSff/B+rBorRE4vBP0axS7V
Oz2X39/et4fN0mm+9UuEvZssCwPkNn6+LebnJnK8T2wODXTYLSDwV7td8Ykjy5b/
Xm2SQPVXoUq7QbBwy8hJ66jRsN9L0DvfnfNGS6NpiR06rS8gQ+vFtEZP8FYxxZZU
y5w4Tru4Ug5yZR4n2+M0sfV8EMfJUJKgwG5j3KlFxJqGzUBk45rVXcZ6tpm+MYlD
JQp0YUmXxQiAB0MddEZbaT0uXEoaS8XhG2oeuHhR+msBOnPkPXqR0eTAQVyScWCg
bLJGfrWZI7uAx5NMQ6jFKbYw7FOH85zc/QCZtFfYAY2HyfhOxqRHY9Vcsjjzm+rA
0l6TsbQJwJRRVzarzQKwvMyseQMbHi7rJJc1W3na3WkFgG7o0+lj/ftB0/XTa8/E
VJsBeslFCT6CILt5MyICr10jpBZbauLUatNtXJbC9esZuYGnsKLO/jZE6vQbAKK1
NvKN6WW1GVwO6Z8wsCxSPfFzSPBIFX7aBG+Cd1+ZURhcWtD4P/3rlWU+wSHh4op7
VNsxIqu+R1knoUuOucaY
=9J1E
-----END PGP SIGNATURE-----

Thx Abe for the update.

Before I recommend a direct edit to sysctl.conf, unless I hear from someone else I’ll probably start experimenting with modifying rc.d which to me is a more “elegant” and in my mind likely more appropriate solution if I can get it to work properly.

Tony

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I did a test using the sysctl.conf file and then upgraded the package and
the change survived the upgrade which is interesting. That would make me
think it is safe to go that route which, to me, is cleaner than using an
init script. Your call, though.

Good luck.

On 01/31/2011 10:36 AM, tsu2 wrote:
>
> Thx Abe for the update.
>
> Before I recommend a direct edit to sysctl.conf, unless I hear from
> someone else I’ll probably start experimenting with modifying rc.d which
> to me is a more “elegant” and in my mind likely more appropriate
> solution if I can get it to work properly.
>
> Tony
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.15 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBAgAGBQJNRwIBAAoJEF+XTK08PnB5U48P+gOEf5YVqq2PCAFmoETp1jjQ
IWo7TxKOu0o5aDi0rkfCfiAExLwbS/FkycTHXByEA0s98x/3+Jom28v4vgyacDRN
WRMOJQ7YP/Ood2TKexKkX0YQteJVLdNcQTXeOR4phvSVEMWTWe0BLGgWtR1kjkaR
P/J0/YwcNGJjOfKji+QSfVq17qNcoGo+tiFYFNIWpAxsEdqwtio1nf1/JygzufBa
uJ7Jbhd5EBa/d2WlNReAQnrQu5DVOqWgO8SIy4x2pLIRJBXCmOAZWSQHjSKrgm3V
vOowM6OtKx0KXXePZOaupw5CAjy5uOUbxtaFJBwlQDuBeDV6UlcKsjwWg8F2BSvl
l/0GLFkc6PrvAJbM3GtCWXAS8q29cYVr58EehEI2EjzzCXbjuXrwjRFXXsaqMTIE
6UoR5CJx8Jaf08kACw4O3NavL58nTe2HOIFzogQU3BtWZaOxUtjg+8yPGLj9uJQS
sPNdGKWoffBywm0HuNSotIybeEpzvBoIYPlWjrB/+hXIPw9+lbingY4J7b/iCAvQ
CfnKWiL/u1GbRkzBDClPZ+rdDfkveYfyxoBawCgebHdiuA7k8yJ1PVDdIUTAcWsT
NzCGdFOcHQVgQ+l9YXdyhboAsbcCA4kg8vG12Yoy5CIYpj1Qwuv1ig8Wnq6V3nQX
SVbgg2UaaR8cfXq72L1W
=sLep
-----END PGP SIGNATURE-----

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

And now I wonder if my results were simply because the sysctl.conf wasn’t
changed in the new RPM… not sure on that one since it was via an update
channel.

http://www-uxsup.csx.cam.ac.uk/~jw35/docs/rpm_config.html

It is for reasons like these that having the sysconfig side of things or
special directories for extension of conf files (as done with Apache, or
ld.so.conf, or whatever) is nice since it keeps the benefits of packages
but without the drawbacks of packages. :wink:

Good luck.

On 01/31/2011 11:40 AM, ab@novell.com wrote:
> I did a test using the sysctl.conf file and then upgraded the package and
> the change survived the upgrade which is interesting. That would make me
> think it is safe to go that route which, to me, is cleaner than using an
> init script. Your call, though.
>
> Good luck.
>
>
>
>
> On 01/31/2011 10:36 AM, tsu2 wrote:
>
>> Thx Abe for the update.
>
>> Before I recommend a direct edit to sysctl.conf, unless I hear from
>> someone else I’ll probably start experimenting with modifying rc.d which
>> to me is a more “elegant” and in my mind likely more appropriate
>> solution if I can get it to work properly.
>
>> Tony
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.15 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBAgAGBQJNRwSWAAoJEF+XTK08PnB5GvsP+wSE6mlCw2lSQwQHmich+S2n
Ploi7yKmHwFHqIMj1R6qumjPR+nE6zULquscakK/ZU4ECbe5Z5CvCN35VFjcsQWb
ed1n5F3lixx09cFp6g9EVrUlJ3nd8mRrVwOajYYVlAb4piGHDhkQFTE2j1eVEz2+
9bQ0BGiqRmeinYKaBTIFpt04f6zkpfNzCNIJlbHpcpWDV10iA/Lis1KMqTxARk4Q
bxFRcicptDbTpeMDbsEc/ZtiKMNDsDku+kNuS3evRBmunuJEOAFzpMf+idiomYyi
8dfc1uTfXrR2PnQpMfuD8Y798DwU8WaqD1Ge14iiu+z0rXXTcVZIhGUaqmbVLiyf
4uie/eAwSpXN/gfQi2C5jCmKEm6V8plIGl88svtS0+RjMGKQZPJ4VSvcQvn55iFP
mF7ndTDitXS8MZZiLpRTX/vcj/HE8gwZt+C9Ydz+hNjWIdsIxzG3HoDzVDxqd8Ie
vgu3bIAwIycqnJ4RXpClOjULIuakbHVXIZHkTE69YHAarlmqy7HAaXOPo4iCpHOX
3+7k+vPW847nNh/VDXqKaTd//7OaS9hmJG71ze6KLnOZm8yBazk1wDWqALlsQ77l
af+GR+M+iNS6FYHAa0TkePpMdKbdREba5d+SxuJZ8OD4Zt2K/GGsF0p1Wn52PPGo
ua71jUWpIxQFEEz4Z9Mw
=R8LI
-----END PGP SIGNATURE-----

Perhaps you are meant to load the module on boot instead on demand so that sysctl can modify it when that stage is reached. See /etc/sysconfig/kernel.

After skimming /etc/sysconfig/kernel, I’m uncomfortable with that approach… because

The kernel has already been compiled (original compilation) to load the cubic pluggable kernel module.
The commands I saw in the /etc/sysconfig/kernel file look like they only load, don’t unload and load, or take a loaded module and modify it. As it stands right now, I’m envisioning a race situation where simply installing a new congestion control module either could cause a conflict or if loaded before the default “cubic” module be modified back to the default.

Am pretty sure all the modules loaded in /etc/sysconfig/kernel are simply additions to the default compiled kernel, not altering an existing.

Am pretty sure the purpose of the idea of implementing an “rc.d” solution is that it ensures that the default module is loaded first as compiled, and only then when starting to invoke daemons to modify the module.

Tony

sysconfig/kernel only loads modules, perhaps with parameters, never configures them. That’s later for sysctl.

When you compile a loadable module, it’s not part of the booted kernel, it’s loaded on demand just like provided modules. If you try to load a module twice, it just ignores the second try. So there is no race condition.

I don’t know what happens if you try to load two modules that do the same thing. However you have exactly the same problem doing it in a rc script. Also it’s not clear if you have two modules or just one module with an algorithm parameter.

All that sysconfig/kernel does is load modules at boot time. It’s no different from doing it yourself later on in the boot sequence, just earlier.

Thx Ken,

The more I think about this, I tend to agree. When I opened up sysctl.config and saw references to initrd, I wasn’t sure whether that might mean a possible race condition if an alternate algorithm was invoked but the more I think about it, initrd isn’t a kernel being compiled, it’s an image of a pre-compiled kernel and likely already with the cubic algorithm embedded and enabled… So invoking a different module at <any> time thereafter should have the same effect.

The way the Loadable Kernel Modules has been described in the articles I’ve read is that they are each completely separate modules, not one module with an algorithm parameter, and a file at /proc/… points to any module that’s pre-compiled and available, optionally enabling the module. So, in this case, the value in “tcp_congestion_control” enables the specified Congestion Control module.

Your idea raising the possibility of a single module with algorithm parameter might make sense only in this case because every module manages the same packet variables, but other types of LKM aren’t so similar to each other.

Given all that,
It seems to me then that invoking a working command just about anytime during bootup would function fine, it’s now a matter of determining “best practice” placing the command in the proper place, likely along with other similar functions or commands. IMO this argues against editing sysctl.config and /etc/sysconfig/kernel which look like files which should probably be left alone and I would guess over-written with the next upgrade.

Tony

Initrd doesn’t contain a kernel. It contains an initial root filesystem for bootstrapping. The main use of it is to load modules that are needed to make it possible to mount the working root filesystem, e.g. SCSI drivers, filesystem drivers, but other actions that must be done before the working root filesystem is mounted can be done from initrd.

sysconfig and sysctl.conf should be safe against modification by updates because they hold working config info and normal practice is not to break a working config when a package is updated. If new settings are introduced, normal practice is to mark it in the RPM so that a foo.rpmnew is created if foo has been modified by the sysadmin and then the sysadmin must go and see if any reconciliation is needed to bring in new settings.

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I have confirmed this as well. SUSE’s policy is to NOT revert changes in
config files by using the %config(noreplace) option in the SPEC file. As
a result if you modify /etc/sysctl.conf it will never be changed by the
RPM again and, if it does get changed, that’s a bug (but you can check the
SPEC file yourself to confirm things are set properly if you’d like). As
a result, /etc/sysctl.conf is the officially-correct place to make this
change.

Good luck.

On 02/01/2011 05:36 PM, ken yap wrote:
>
> Initrd doesn’t contain a kernel. It contains an initial root filesystem
> for bootstrapping. The main use of it is to load modules that are needed
> to make it possible to mount the working root filesystem, e.g. SCSI
> drivers, filesystem drivers, but other actions that must be done before
> the working root filesystem is mounted can be done from initrd.
>
> sysconfig and sysctl.conf should be safe against modification by
> updates because they hold working config info and normal practice is not
> to break a working config when a package is updated. If new settings are
> introduced, normal practice is to mark it in the RPM so that a
> foo.rpmnew is created if foo has been modified by the sysadmin and then
> the sysadmin must go and see if any reconciliation is needed to bring in
> new settings.
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.15 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBAgAGBQJNSLOWAAoJEF+XTK08PnB5ABcQAIPICP0uS6kCJT/HHN3WYiFC
GCSqJszv4ss632vtL6EsB5T9fqD5qwNrw/He7TamT42uk361n8dAvmLzmrNJRkTW
2XqfPDpsiM7aVs8U8we6Ncyec6nU8ucso6o/UXQENTThAwBQ9vpamDrd1YS6SjQE
EslqClx0RfA8ICXdHaaJxiwV8SRwn3wdY4JCBivGauThDZXEQgSbcqRLGvU/+RWc
2pFEFkJTYBW6B0IJjIYxIGY27Q0T65Ptm+hMP26MnvCL69noALLk7FD2JpFdRTB6
PRUnt8d2YUfnqLUqYhytLzvkCy3xv7rJdu52H8lHXDgcZqwzLDspQ+FMWt4J+VFT
16WbLQx5GE5qTHlpr7PKGxl1A+MnvM0DmvCwYqWCJCSHKyjf0whuZt7q+JFHYjvR
lt1X5wsOv62LzQaxAJTldi6IJniELjCVFMmiOnsk7jz6ogpfQ93WSspQd7h1QDAN
6MPJ3et1lPwVUTYI5wjSaWtEh5XshS8o8Oa1BKp3Vso+6ty3cUii9SFdpg3MfF8j
ifFL2e0xKYEjwcyfypGkxD7IPdQNrBwQRUi6jX14YJMLnL9kZPr2dwwxpfmr1JEv
zfHnbjd/IiahpBsC4M72HGl3AadiDAZgWApWCr8S5xxq+eOQE/kla8krMLT0WYUa
Kavddl51skIBdPkyZoBF
=Jgjt
-----END PGP SIGNATURE-----

Hmmm, I thought that to enable bootstrapping initrd needs to contain the kernel? I’ll have to re-read info on that.

In any case, here is my latest update.

After considering the options and doing a lot more research, I now understand the relationship between sysctl and the /proc/sys/… tree, the later is the actual layout which includes all info about what is available, what is enabled and how they are configured relating to the processor. Although it’s possible to write directly to a file using the “echo” method I originally posted, the sysctl interface may be the preferred way to interact with /proc/sys/… because it implements some error-checking and is less likely to allow a potentially critical mistake.

I also was able to find more references that describe how to persist sysctl changes across reboots, mentioning both direct edits to sysctl.conf and implementing scripts in the rc.d directory.

I’ve now tried all possible ways to persist sysctl changes and it seems that editing the sysctl.conf is the only way which works. I tried creating new rc.d scripts using both the “echo” and “sysctl -w” commands, but neither works.

What you state about preserving package information relating to rpms make sense, but the sysctl.cfg doesn’t do that, it stores information related to the installed kernel… so can we assume when a new kernel is installed with an upgrade (not update), will the sysctl.config be preserved?

Yes, I can see why an update might be OK, but would an OS upgrade be different?

Tony

The bootloader loads two things: the kernel and the initrd. The initrd is optional for very simple setups.

sysctl.conf stores settings that you want to be activated for this machine. It’s not tied to a particular kernel package.

If you do an OS (as opposed to a kernel) upgrade all bets are off. The package procps which sysctl.conf belongs to may replace it or may tell you there’s an updated version. You should backup sysctl.conf just like you would backup any other file in /etc and examine it later.

Did some more reading and review, the bootloader boots both a “basic” kernel image and the initrd image to provide an “early” root file system, but it’s not an empty root file system… In most distros, it seems that LKM intended for early kernel functionality is stored in the initrd and is loaded into the kernel. By the looks of sysctl.config, OpenSUSE does exactly that, there are different sections where at different stages LKM can be loaded and because the TCP Congestion Control module is not named to me that lends further credence that the CUBIC module is pre-compiled into the base kernel.

So, to me the bottom line becomes clearer that no race condition should exist, invoking another Congestion Control module at any time should be OK.

Thx for confirming my suspicion the likelihood a custom sysctl.conf would not survive an upgrade (since 11.4 is only a month away as of this post it looks like a test is coming up). And, unfortunately some further attempts at getting an rc.d script to work are failures.

Maybe someone might notice something I’m missing. This is the latest of what I’ve tried


cat  /etc/rc.d/rc5.d/K03network-tcpconfgestioncontrol <<EOF
> veno
> EOF
chmod 777 /etc/rc.d/rc5.d/K03network-tcpconfgestioncontrol

I’ve also tried placing the script in rc3.d

I don’t think that the script is bad, I can run the following in a terminal which verifies the script works

# Verify existing algorithm which should return cubic
cat proc/sys/net/ipv4/tcp_congestion_control
# execute new custom script
/etc/rc.d/rc5.d/K03network-tcpconfgestioncontrol
# Verify that script has switched system to new algorithm
cat proc/sys/net/ipv4/tcp_congestion_control

Tony

Unlike other distros, it doesn’t work in SUSE to just place a script in a runlevel directory. You have to provide the metadata given in the example /etc/init.d/skeleton template and to insserv the script.

Thx.
Looks like a fairly involved process which will require not just decyphering the structure and parameters, it also looks like every custom entry also requires researching available and possibly submitting new namespaces to make the entry “universal” and conform to standards.

Due to time constraints, I’ll have to set aside implementing rc.d scripts for awhile…

Tony