Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
400 lines (365 sloc) 16 KB
* building (CMAKE stuff):
- set initial flags for each BUILD_TYPE (Debug, Release, MinSizeRel,
- use GCC link time optimization (LTO) by default
- use BUILD_TYPE "Release" as default
* add ulatencyd --version option, which prints ulatencyd version,
used build configuration and flags, and some definitions like
install directories, rule directories etc.
* implemented USession subsystem: tracks real user sessions; has
interface for session tracking agents (modules); different agents
may register, but only one may be active
- consolekit agent for USession
- LUA and DBUS bindings
Documented in doxygen USession module.
* implemented UFocus subsystem which replaces active lists (and other
stuff from groups.c) - works on real user sessions, different focus
tracker may be active for each user session
- xwatch module updated to work on real sessions (USession) and
adapted to be focus tracker (UFocus)
- LUA and DBUS bindings
* ulatency client
- updated to above changes
* initial hooks implementation, code may currently trigger/listen to
following events (no LUA binding yet):
- session added / removed / active hint changed / idle hint changed
- focus tracker changed / unset tracker request triggered
- process major property changed
- process exits
- all modules loaded
- measures time elapsed in hooks; logged with verbosity level
Documented in doxygen UHook module.
* mappings
- consider process w/ user.idle label being active only if focused,
this allows attach user.idle labels to processes which creates X
window (high priority if focused, otherwise user.idle)
- attached user.idle labels to Dropbox, Ubuntu-One, Deja-dup
- attached label to MPV
[thanks Feminist-Software-Foundation]
- distinguish kernel processes from dead and zombies
* add more run-time tests and assertions, especially in DEVELOP_MODE
- Briefly documented in doxygen UAssert module
- fix and improve assertions while decrementing/incrementing
reference counters
- addes assert alternatives to DEC_REF(P)/INC_REF(P) macros:
- INC_REF_FORBID_UNREF(P) - forbids reference count drop to 0 in
- DEC_REF_ALLOW_UNREF(P) - allows reference count drop to 0 in
* improved parsing of /proc/<pid>/ files
- g_file_get_contents() no more used because it is not suitable for
reading files from procfs
- implemented u_pid_read_file() which is more suitable: it uses
unbuffered read(), allocates less memory, uses standard errno
reporting (including important ESRCH which GLib does not define),
makes it easier to detect whether file is empty or contains a null
byte (precisely: makes it easier detectable by callers without need
to propagate number of read bytes), and should be faster
- this also allows to detect whether a process vanished or is a
zombie or whether other - unexpected - error occurred
- most other function reading from procfs were updated to use
- u_read_0file() renamed to u_pid_read_0file(); for consistant
* u_proc_ensure() reworked
- internally splits to separate function to update each of sets
of properties, which
- use u_pid_read_file()
- handles read errors more strictly; any unexpected error triggers
critical warning to ensure ulatencyd assumptions of processes
states and behaviour are/will be correct (this also helps debugging
for different Linux kernel versions)
- u_proc properties preserves their values once successfully parsed,
until the u_proc instance is freed
- more precise way to specify on what condition properties should
be updated (each time; once per iteration; only once in an u_proc
life; never)
- allows to invalidate properties and force re-parsing on next call
to u_proc_ensure() (used on netlink EXEC events)
- avoids useless parsing of EXE, CMDLINE, ENVIRON if process is
zombie or kernel thread
- u_proc_ensure() returns success (TRUE) if required properties are
set (were parsed successfully at least once)
- fixed ensuring of task property
- U_PROC_HAS_STATE() macro made more robust
- more precise detection of vanished processes / kernel processes
and newly - zombies
- avoids handling more them aggressive, if it's useless
- this changes also fixes warnings triggered when ulatencyd tried to
handle kernel / zombie processes as user-space alive processes and
allows more strictly handling of other errors
- new UPROC_MASK_DEAD - mask to test if a process vanished or is a
* Added U_PROC_FORMAT and U_PROC_FORMAT_ARGS(P) macros which make easy
adding u_proc instance description to printf(), e.g. to log
* scheduler: avoids scheduling of dead (including zombie processes)
* proc_by_pid_with_retry() - returns an #u_proc instance each time it
is possible (parses a pid if not yet known; determines if given pid
is a process or a task (thread), in the later case parse and
returns its thread leader
* really avoid tasks (threads) pollute the process tree
* make sure no tasks (threads) go unnoticed through
* netlink:
- fixed handling of fork events: forks were unintentionally ignored
in 0.6.0-alpha.1 and their parents (forking processes) were not
reliable determined since linux_netlink support was implemented
- minor improvement to netlink_fallback
* dbus.c: updated + ensures correctness of PID arguments passed by
* fixed a small memory leak in consolekit module
* removed embedded libproc, coreutils, lbc; but needs to be statically linked
against external (system) libproc (issue #37)
* CGROUPS handling changes
- ulatencyd does not touch foreign cgroups
- scheduler skips processes in groups created outside ulatencyd
- stores own cgroups in private cgroup hierarchies
- unused cgroups may manually removed via DBUS call
- org.quamquam.ulatencyd.System.cgroupsCleanup method
- new cgroups release agent script (passes request to scheduler via dbus)
- cleans cgroups on exit (scheduler switches to 99-cleanup.lua mappings)
- removes cgroups left behind the previous ulatencyd instance
- reimplemented u_proc.cgroup* stuff in the C core
+ U_PROC:get_cgroup(subsys)
+ U_PROC:set_cgroup(subsys, cgroup_path)
+ U_PROC.cgroup => u_proc.cgroup (GHashTable)
+ U_PROC.cgroup_raw => u_proc.cgroup_raw (char **)
+ U_PROC.cgroup_origin => u_proc.cgroup_origin (GHashTable)
+ U_PROC.cgroup_origin_raw => u_proc.cgroup_origin (char **)
+ u_proc_ensure(proc, CGROUP, ...)
* support for process isolation (Isolate filter, via isolate flag)
see simple.d/isolate.conf, rules/zz_isolate.lua
* added flexibility to scheduler mappings
- sysflags prefilter
- mulitple checks functions
- rule may be skipped till end of current scheduler run
- multiple adjusts function
- adjust functions to be run only once per scheduler run
- ulatency.match_flag()
- scheduler:register_after_hook(): registers function to be run after the
scheduling of processes is finished.
- string:rtrim()
- fix CGroup:get_value()
- ulatency.is_pid_alive(pid): tests if /proc/pid/ exists
* reimplemented tasks (now stored in a hash table, persistent across
iterations and usable/extensible in LUA, reference counting)
+ U_TASK.is_valid
+ U_TASK.is_invalid
+ U_TASK.tid
+ U_TASK.proc_pid
(if U_TASK.is_valid:)
+ U_TASK.proc
+ all proc_t fields (ppid,tgid,euid, etc.)
- ulatency.get_tid(tid) from LUA
- ulatency.get_pid(pid,include_tasks) if `include_tasks` and pid is a
thread, returns its thread leader.
* sessions
+ disable xwatch polling and clear the active pids lists of users with no
active session
+ on session change run full iteration and make sure it is run before next
xwatch poll
* ulatency client:
- fixed sysflags command
- ulatency clear <cgroup>|ALL
+ tries to thaw frozen groups
+ does not clear cgroups not created by ulatencyd
+ clears ulatencyd private hierarchies
+ keeps ulatencyd private hierarchy synced with cgroup hierarchy that
subsystem controller
- ulatency mounts: added column with ulatencyd private hierarchies
- new command "clear-empty": clears all empty cgroups created by ulatencyd;
- ulatency --cmd: fixed if /proc/#/cmdline contains UTF-8 chars
* configuration changes for ulatencyd.conf:
- raised default io.threshold from 500 to 3000, 500 was IMHO too low
* configuration changes in cgroups.conf:
- added memory.move_charge_at_immigrate'] = 1 to memory subsys defaults.
- remove support for complex cgroups hierarchies and mount points,
supports only the most usual scenario with each cgroup subsystem mounted
in separate hierarchy (unde CGROUP_ROOT/<subsystem>).
CGROUP_MOUNTPOINTS option was replaced with CGROUP_SUBSYSTEMS - simple
array of enabled subsystems.
* split src/core.lua to modules inside src/lua/
* U_PROC extensible in LUA
* modules are loaded vie gmodule (from GLib)
* netlink_fallback module; used if kernel is not compiled with PROC_EVENTS
* delay queue related fixes and optimizations
* u_proc_ensure() optimizations
* improved signal handling (quit, suspend)
* fixed linux signal handling to be async safe
* logging enhancements
* system "startup" flag set until first iteration finished
* commit a new cgroup setting prior any process is added
* sample logrotate file (scripts/logrotate)
* sample sysv-rc init file (scripts/service/sysv-rc/); probably containins
Debian specific code.
* sched_autogroup in linux kernel is restored on shutdown
* umask is set to 022 instead of 0
* doesn't die when cgroup subsystem cannot be mounted, just print warning
* fixed a lot of memory leaks
* cgroups removed outside ulatencyd now correctly handled (issue #28)
* detects valid range of values of cgroup parameters (issue #36)
* if process is blocked from scheduling, print the reason
* fix SMP: Attach isolated cpuset cgroups to all online CPUs
* fixed merge_config pre rules handling (scheduler/00-common)
* fixed io priority for (to real-time)
* fixes in default scheduler (20-desktop.lua)
* fix the out of source directory build
* io.rule turns NCQ (IOPS) mode on block devices under load
* limits user.* labels to users and {daemon,system}.* to system processes
* added label (for mpd)
* doxygen documentation (not finished)
* a lot updated simple rules
* new __experimental__ scheduler mappings "one_seat_desktop"
* other bug fixes not mentioned here
0.5.0 / 2011-04-05
* bump version
* fix single task config
* hide videoplayback for now
* test if subsystem is loaded
* Merge branch 'master' into develop
* fix missing labels on game and single_task config
* add video_playback config
* cache available cgroup names
* add xfce & lxde configs
* list configs with no info object as well
* better error reporting and handling
* better error messages on connecting errors
* retry process lookup in remote api calls
* install all man pages
* fix typo schduler -> scheduler in ulatency
* add manpage for run-single-task
* add manpage for run-game
* add ulatency-gui to ulatency.1 manpage
* fix goption warning for G_OPTION_FLAG_NO_ARG
0.5.0-rc3 / 2011-03-24
* fix client install rules
0.5.0-rc2 / 2011-03-24
* also run instant filters on processes
* do mixture of read/write on mem pages
* don't put active processes into rt io
* implement stress mode in memleak
* implement io prio settings for processes
* add banshee player
* Merge commit 'dbdcb918d051d71c913e63ed6bea605088b457ed'
* more robust version of terminal size detection
* fix io bottleneck detector
* catch errors caused in terminal detection
* Merge commit 'f6715991672ccc8c7fd239b8139aae74dac3a3f5'
* work without python-dbus-qt4
* add set config menu in window
0.5.0-rc1 / 2011-03-23
* Merge commit 'd8b2bd5c248c06b39c7d7da56a3961cad1d36cc9'
* update readme to reflect recent depencies
* let gui survive daemon restart
* update gui to use policykit
* install doc files, bump version
* Merge commit '4d65ec602b0673876732fe100506f68fbc8e08b0'
* updates to documentation
* optimize doxygen for project
* Updated Start Hacking (markdown)
* don't start ulatencyd more then once
* optional build docs
* Merge commit 'bd23966e9e27132cedceb775d01c8fe91e5bb9f3'
* add make docs target
* Updated Home (markdown)
* rename file
* Merge commit '76d54cf31eacbb060bcad7f5d41b8e6d78976bb0'
* start changing documentation
* add api doc generation trough doxygen
* add manpages. thanks Alessandro
* add script for update external repositories
* Add 'docs/wiki/' from commit '978fb5626ac4f2c61c6704dba636c7562b3ce09e'
* add script to run ulatencyd under alleyoop
* Merge commit '0a9ff7e9373c6d7a9f202f1ebd2252291e65e86a'
* adjust cmake rules
* implement policykit support
* better run command code
* use glob matching in simplerules
* cleanup exe readlink
* add recrusive flags api to dbus interface
* add rules for boinc client
* use full path on exe matches, not substring
* adjust dbus interface to recrusive list flags changes
* add u_proc_list_flags function, inherit changes
* ensure notifiy release agent is set
* add extra executable for gui/close window change
* print help config on run command
* add support for execute process in switches scheduler config
* use u_task struct for task storage
* add /usr/local/games to game path
* add single_task & game config
* bug fix: check data if none
* bug fix:function prnt doesnt worked under python3
* move scheduler configs into own path
* implement hard limits on memory usage
* reduce io prio on poison targets
* bump version
* fix install rules
* Updated 1   FAQ (rest)
* Updated Home (markdown)
* Updated Flag system (markdown)
* Updated Flag system (markdown)
* Updated Flag system (markdown)
* Updated Home (markdown)
* Created (markdown)
* Updated Home (markdown)
* Updated 1   FAQ (rest)
* Write a small message here explaining this change. (Optional)
* Updated Writing Rules (markdown)
* Updated Adjusting default scheduler (markdown)
* Updated 1   FAQ (rest)
* Updated How does it work (markdown)
* Updated How does it work (markdown)
* Updated 1   FAQ (rest)
* Updated 1   FAQ (rest)
* Updated Start Hacking (markdown)
* Created Start-hacking (markdown)
* Updated Home (markdown)
* Updated 1   FAQ (rest)
* Updated Home (markdown)
* Updated Home (markdown)
* Updated Home (markdown)
* Updated Home (markdown)
* Updated Home (markdown)
* Updated Home (markdown)
* Updated Home (markdown)
* Created Adjusting default scheduler (markdown)
* Updated Home (markdown)
* Updated Home (markdown)
* started writing rules howto
* Created How does it work (markdown)
* Updated Home (markdown)
* Updated 1   FAQ (rest)
* Updated 1   FAQ (rest)
* Updated 1   FAQ (rest)
* Updated 1   FAQ (rest)
* Write a small message here explaining this change. (Optional)
* Updated 1   FAQ (rest)
* Updated Home (markdown)
* Updated Home (markdown)
* Updated Home (markdown)
* Updated 1   Does ulatencyd support my cgroups mount points (rest)
* Created Faq (rest)
* Updated Home (markdown)
* start dbus specs
* Updated Home (markdown)
* Updated Home (markdown)
* Created Ideas to test (markdown)
* Created Architecture (markdown)
* add arch image
* Initial Commit
Something went wrong with that request. Please try again.