-
Notifications
You must be signed in to change notification settings - Fork 169
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tuning of individual kernel threads #628
base: master
Are you sure you want to change the base?
Conversation
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
c2c554a
to
1c03a83
Compare
tuned/plugins/plugin_kthread.py
Outdated
self._kthread_scan(initial=True) | ||
|
||
@classmethod | ||
def _get_config_options(self): |
Check notice
Code scanning / CodeQL
First parameter of a class method is not named 'cls'
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please fix. The base plugin should be also fixed, but this should be done in new PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done... one of these days I need to learn how to run those checks locally before I push... :)
# command definitions: entry point for device tuning | ||
# | ||
@command_custom("_instance", per_device=True) | ||
def _instance_kthread(self, start, value, device, verify, ignore_missing): |
Check notice
Code scanning / CodeQL
Explicit returns mixed with implicit (fall through) returns
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please fix.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added return None
.
""" | ||
def __init__(self, monitor_repository, storage_factory, hardware_inventory, device_matcher, device_matcher_udev, plugin_instance_factory, global_cfg, variables): | ||
super(KthreadPlugin, self).__init__(monitor_repository, storage_factory, hardware_inventory, device_matcher, device_matcher_udev, plugin_instance_factory, global_cfg, variables) | ||
self._has_dynamic_options = True |
Check warning
Code scanning / CodeQL
Overwriting attribute in super-class or sub-class
It's OK for me, in long-term it's a candidate for rewrite/refactor, but there are other plugins using it as well. We will probably keep the idea and if we change the implementation, this could be then updated in all affected plugins the same way. |
Regarding the cgroups, there is support for cgroups v1 in the scheduler plugin and we would also like to add support for the v2 for completeness. It could be useful for somebody. It's OK if you are not using some plugin. We even wanted to add global configuration option allowing selective disablement of specific plugins in the stock profiles. |
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
1c03a83
to
826223f
Compare
I found the whole cgroup topic to be rather tricky, because in modern systems, SystemD is the "cgroup manager", and it owns (by convention) the cgroup tree. So any creation of new cgroups should happen via SystemD, and can then use Delegation to create further sub-groups. I've had some success with:
But simply having TuneD move processes around seems like it could have unwanted side-effects, and should be handled with care... |
In combination with #596 and #580, this PR implements the third feature needed to dynamically tune all relevant aspects of a realtime application using a dedicated HW device (typically a NIC).
Two things might need some discussion:
scheduler
plugin, but means we still need_has_dynamic_options
, which is marked as a hack in plugins/base.py. The alternative would be to have one plugin instance per "group", which would make the profiles much longer.group.ktimers=0:f:2:*:^\[ktimers
scheduler
plugin and thekthread
plugin, we'd have two threads doing the same thing. For my applications that's not a problem, because I no longer use thescheduler
plugin at all:scheduler
handles three things: IRQ affinities, kernel threads, and userland threadsirq
pluginkthread