Re: [patch 1/2] fork_connector: add a fork connector

From: Jesse Barnes
Date: Thu Mar 17 2005 - 12:00:30 EST


On Thursday, March 17, 2005 1:04 am, Guillaume Thouvenin wrote:
> +static inline void fork_connector(pid_t parent, pid_t child)
> +{
> + static DEFINE_SPINLOCK(cn_fork_lock);
> + static __u32 seq; /* used to test if message is lost */
> +
> + if (cn_fork_enable) {
> + struct cn_msg *msg;
> +
> + __u8 buffer[CN_FORK_MSG_SIZE];
> +
> + msg = (struct cn_msg *)buffer;
> +
> + memcpy(&msg->id, &cb_fork_id, sizeof(msg->id));
> + spin_lock(&cn_fork_lock);
> + msg->seq = seq++;
> + spin_unlock(&cn_fork_lock);

As I mentioned before, this won't work very well on a large CPU count system.
cn_fork_lock will be taken by each CPU everytime it does a fork, meaning that
forks will be very slow if lots of CPUs are doing them at the same time. Is
there a more scalable way to ensure message delivery?

Jesse
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/