mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-01 23:20:55 +00:00
This patch removes the notion of partial writes from the file-system servers. Since write operations are asynchronously submitted, they are expected to succeed completely, except for I/O errors. I/O errors are propagated with the write acknowledgement but those are usually handled out of band at the client side. Partial writes must never occur because they would go undetected by clients, which usually don't wait for the completion of each single write operation. Until now, most file-system servers returned the number of written bytes in the acknowledgement packet. If a server managed to write a part of the request only, it issued the acknowledgement immediately where it should have cared about writing the remaining part first. The patch detects such misbehaving server-side code. If partial writes unexpectedly occur, it prints a message and leaves the corresponding request unacknowdleged. Issue #2672
The new _trace_fs_ server provides access to a trace session by providing a file-system session as front end. Combined with Noux, it allows for the interactive exploration and tracing of Genode's process tree using traditional Unix tools. Each trace subject is represented by a directory ('thread_name.subject') that contains specific files, which are used to control the tracing process of the thread as well as storing the content of its trace buffer: :'enable': The tracing of a thread is activated if there is a valid policy installed and the intend to trace the subject was made clear by writing '1' to the 'enable' file. The tracing of a thread may be deactivated by writing a '0' to this file. :'policy': A policy may be changed by overwriting the currently used one in the 'policy' file. In this case, the old policy is replaced by the new one and automatically used by the framework. :'buffer_size': Writing a value to the 'buffer_size' file changes the size of the trace buffer. This value is evaluated only when reactivating the tracing of the thread. :'events': The trace-buffer contents may be accessed by reading from the 'events' file. New trace events are appended to this file. :'active': Reading the file will return whether the tracing is active (1) or not (0). :'cleanup': Nodes of untraced subjects are kept as long as they do not change their tracing state to dead. Dead untraced nodes are automatically removed from the file system. Subjects that were traced before and are now untraced can be removed by writing '1' to the 'cleanup' file. To use the trace_fs, a configuration similar to the following may be used: ! <start name="trace_fs"> ! <resource name="RAM" quantum="128M"/> ! <provides><service name="File_system"/></provides> ! <config> ! <policy label_prefix="noux -> trace" ! interval="1000" ! subject_limit="512" ! trace_quota="64M" /> ! </config> ! </start> :'interval': sets the period the Trace_session is polled. The time is given in milliseconds. :'subject_limit': specifies how many trace subjects should by acquired at max when the Trace_session is polled. :'trace_quota': is the amount of quota the trace_fs should use for the Trace_session connection. The remaining amount of RAM quota will be used for the actual nodes of the file system and the 'policy' as well as the 'events' files. In addition, there are 'buffer_size' and 'buffer_size_limit' that define the initial and the upper limit of the size of a trace buffer. A ready-to-use run script can by found in 'ports/run/noux_trace_fs.run'.