-
Notifications
You must be signed in to change notification settings - Fork 30
/
ChangeLog
410 lines (373 loc) · 16.3 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
* fixed build
0.6.0-alpha.2.1
===============
* session tracker required (consolekit for now); if not available, ulatencyd
is aborted with descriptive error
* fixed SIGSEGV and critical GLib warning if none session tracker successfully
registered
* fixed handling of focused processes
0.6.0-alpha.2
=============
* building (CMAKE stuff):
- set initial flags for each BUILD_TYPE (Debug, Release, MinSizeRel,
RelWithDebInfo)
- 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
G_LOG_LEVEL_DEBUG
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 user.media 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
future
- DEC_REF_ALLOW_UNREF(P) - allows reference count drop to 0 in
future
- INC_REF_ASSERT_VAL(P, VAL)
- INC_REF_ASSERT_NOT_VAL(P, VAL)
* 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_pid_read_file()
- u_read_0file() renamed to u_pid_read_0file(); for consistant
naming
* 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 process states UPROC_KERNEL, UPROC_VANISHED, UPROC_ZOMBIE
- removed states UPROC_NEW, UPROC_ALIVE, UPROC_DEAD
- new UPROC_MASK_DEAD - mask to test if a process vanished or is a
zombie
* 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
messages
* 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
update_processes_run()
* 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
dbus
* fixed a small memory leak in consolekit module
0.6.0-alpha.1
=============
* 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.data
+ 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 user.media (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 daemon.media 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 flags.md (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