[lkml]   [2001]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectCollapsing RT signals ...

I'm making some test with RT signals and looking at how they're implemented
inside the kernel.
After having experienced frequent queue overflow signals I looked at how
signals are queued inside the task_struct.
There's no signals optimization inside and this make the queue length depending
on the request rate instead of the number of connections.
It can happen that two ( or more ) POLL_IN signals are queued with a single
read() that sweep the buffer leaving other signals to issue reads ( read this
as user-mode / kernel-mode switch ) that will fail due lack of data.
So for every "superfluous" signal we'll have two user-mode / kernel-mode
switches, one for signal delivery and one for a failing read().
I'm just thinking at a way to optimize the signal delivery that is ( draft ) :

struct sigqueue {
struct sigqueue *next;
struct sigqueue **fsig;
siginfo_t info;

struct fown_struct {
int pid; /* pid or -pgrp where SIGIO should be sent */
uid_t uid, euid; /* uid/euid of process setting the owner */
int signum; /* posix.1b rt signal to be delivered on IO */
struct sigqueue *sig_hint;

At the end we'll have ( where fsig = &file->fown.sig_hint ) :

static int send_signal_hint(int sig, struct siginfo *info,
struct sigpending *signals, struct sigqueue **fsig) {

if (*fsig != NULL)
merge_info(&(*fsig)->info, info);
else {
*fsig = allog_sig_queue();

(*fsig)->fsig = fsig;

copy_info(&(*fsig)->info, info);




When the message is delivered we'll have :

void clean_sig_hint(struct sigqueue *qsig) {

if (qsig->fsig != NULL) {
*(qsig->fsig) = NULL;
qsig->fsig = NULL;


When the file is closed :

void clean_fown_sighint(struct fown_struct *fown) {

if (fown->sig_hint != NULL) {
fown->sig_hint->fsig = NULL;
fown->sig_hint = NULL;


All these ops must be done under sigmask_lock lock ( send_signal() and signal
dequeue already does ).
This will make multiple signal from the same file to be stocked inside the same
slot reducing the RT signal traffic.

Comments ?

- Davide

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2005-03-22 12:55    [W:0.032 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site