I am playing around with the patchset “my” student generated during this years GSoC (the code for all projects is available from Google). In short, it gives you the possibility to query from userland, which optional kernel features are available. I have let him mostly do those features, which are not so easy to detect from userland, or where the detection could trigger an autoload of a kernel module.
I let the output speak for himself, first the output before his patchset:
And now with his patchset:
With his patches we have a total of 84 kernel features which can be queried (obviously I do not have all optional options enabled in the kernel which produces this output). All of the features also have a description, and it is easy to add more features. As an example I present what is necessary to produce the kern.features.stack output:
./kern/subr_stack.c:FEATURE(stack, “Support for capturing kernel stack”);
There is also a little userland application (and a library interface) which allows to query several features from scripts/applications with the possibility to pretend a feature is not there (the requirement for this was for ports; pretending a feature is there if it is not was ruled out because such run-time detection is only necessary for things which have to run soon and pretending some feature is there while it is not will cause big problems). Unfortunately the man page for the application is not yet ready, but I’m sure you can figure out how to use it.
The names of the features and the description follows an easy scheme, what is written down in NOTES is used as a name and a description for the feature (an exception is geom_part_X, there we decided to use a common theme (“GEOM partitioning class for XXX”) which is distinct from the corresponding geom_X class). If you have complains about what is used in a specific feature, do not complain to him: change it in NOTES and the feature will follow.
If you have questions, suggestions, or some other interest to contact him, his FreeBSD address is kibab@. Feel free to encourage him to go ahead with the next steps (finishing the man page, splitting up the patches into sensible pieces and presenting them on appropriate mailinglists for review).
, kernel module
, kernel stack
, library interface
, priority scheduling
I counted 18 projects which are given to FreeBSD in this years GSoC. For 3 of them I have some comments.
Very interesting to me is the project which is named Collective limits on set of processes (a.k.a. jobs). This looks a bit like the Solaris contract/project IDs. If this project results in something which allows the userland to query which PID belongs to which set, than this allows some nice improvement for start scripts. For example at work on Solaris each application is a mix of several projects (apache = “name:web” project, tomcat = “name:app” project, Oracle DB = “name:ora” project). Our management framework (written by a co-worker) allows to easily do something with those projects, a “show” displays the prstat (similar to top) info just for processes which belong to the project, a “kill” sends a kill-signal to all processes of the project, and so on. We could do something similar with our start scripts by declaring a namespace (FreeBSD:base:XXX / FreeBSD:ports:XXX?) and maybe number space (depending on the implementation) as reserved and use it to see if processes which belong to a particular script are still running or kill them or whatever.
The other two projects I want to comment upon here are Complete libpkg and create new pkg tools and Complete Package support in the pkg_install tools and cleanup. Both projects reference libpkg in their description. I hope the mentors of both projects pay some attention to what is going on in the other project to not cause dependencies/clashes between the students.
That I do not mention other projects does not mean that they are not interesting or similar, it is just that I do not have to say something valuable about them…
Tags: apache name
, co worker
, contract project
, db name
, freebsd ports
, management framework
, number space
, oracle db
, project ids
Seems that I will actively mentor again in this Google Summer of Code (as opposed to just review the submissions from students and/or acting as a fall-back mentor).
The project I will mentor is the “Make optional kernel subsystems register themselves via sysctl”-one from the FreeBSD ideas page.
The student already got into contact with me and it looks like he is motivated (he is already subscribed to several FreeBSD mailinglists, which is not a requirement we have in our GSoC docs).
, fall back
I stumbled over Google’s new RE engine. Unfortunately it is not handling backreferences, so it is not a drop-in replacement for the regular expressions code in FreeBSD. It has a POSIX mode, but this only seems to be enough for the egrep syntax. For people which need backreferences, they refer to the Google Chrome’s RE engine irregexp which in turn references a paper from 2007 which is titled Regular Expression Matching Can Be Simple And Fast.
The techniques in the paper can not be applied to the irregexp engine, but maybe could help to speed up awk, egrep and similar programs.
I think it would be interesting to compare those recent developments to what we have in FreeBSD, and if they are faster, to see if it is possible to improve the FreeBSD implementation based upon them (either by writing new code, or by importing existing code, depending on the corresponding license and the language the code is written in).
Maybe a candidate for the GSoC?
, google engine
, recent developments
, regular expression matching
, regular expressions
The linuxulator is synced on amd64 with i386 (since a while). This means TLS is working now and we have the same (a little bit buggy) futexes.
Roman is slowly working on the *at() commands. He also applied for the GSoC this year again. Kib is willing to mentor (in case Roman gets a free seat in the SoC). I rejected the mentoring position this time, as I don’t know if I will have enough time this summer, but I hope I will be around.
, free seat
, little bit