Skip to contentSkip to conversation

Unneeded kernel threads (xfs, jfs, gfs2)

DISCUSSION Georgi Chorbadzhiyski 9 participants 13 messages May 12, 2008 – May 14, 2008

lore
Share & tools
lore
#0 lore raw

Hi guys, I know that not all kernel thread users are converted to start only when needed but the following is little annoying specially when I'm not even using jfs, xfs and gfs2.

Look at the ps output from a standard distro 2.6.24.5 kernel after a fresh boot:

Quoted 20 lines
  PID TTY      STAT   TIME COMMAND
    2 ?        S<     0:00 [kthreadd]
    3 ?        S<     0:00  \_ [migration/0]
    4 ?        S<     0:00  \_ [ksoftirqd/0]
    5 ?        S<     0:00  \_ [migration/1]
    6 ?        S<     0:00  \_ [ksoftirqd/1]
    7 ?        S<     0:00  \_ [events/0]
    8 ?        S<     0:00  \_ [events/1]
    9 ?        S<     0:00  \_ [khelper]
  102 ?        S<     0:00  \_ [kblockd/0]
  103 ?        S<     0:00  \_ [kblockd/1]
  106 ?        S<     0:00  \_ [kacpid]
  107 ?        S<     0:00  \_ [kacpi_notify]
  230 ?        S<     0:00  \_ [ata/0]
  231 ?        S<     0:00  \_ [ata/1]
  232 ?        S<     0:00  \_ [ata_aux]
  233 ?        S<     0:00  \_ [ksuspend_usbd]
  239 ?        S<     0:00  \_ [khubd]
  242 ?        S<     0:00  \_ [kseriod]
  284 ?        S      0:00  \_ [pdflush]
Quoted 8 lines
  285 ?        S      0:00  \_ [pdflush]
  286 ?        S<     0:00  \_ [kswapd0]
  326 ?        S<     0:00  \_ [aio/0]
  327 ?        S<     0:00  \_ [aio/1]
  349 ?        S<     0:00  \_ [jfsIO]
  350 ?        S<     0:00  \_ [jfsCommit]
  351 ?        S<     0:00  \_ [jfsCommit]
  352 ?        S<     0:00  \_ [jfsSync]

Not needed here, because no jfs partition is in use.

Quoted 5 lines
  354 ?        S<     0:00  \_ [xfslogd/0]
  355 ?        S<     0:00  \_ [xfslogd/1]
  356 ?        S<     0:00  \_ [xfsdatad/0]
  357 ?        S<     0:00  \_ [xfsdatad/1]
  361 ?        S<     0:00  \_ [xfs_mru_cache]

Not needed here, because no xfs partition is in use.

Quoted 3 lines
  366 ?        S<     0:00  \_ [gfs2_scand]
  367 ?        S<     0:00  \_ [glock_workqueue]
  368 ?        S<     0:00  \_ [glock_workqueue]

I dont use gfs2

Quoted 10 lines
 1047 ?        S<     0:00  \_ [scsi_tgtd/0]
 1048 ?        S<     0:00  \_ [scsi_tgtd/1]
 1118 ?        S<     0:00  \_ [scsi_eh_2]
 1120 ?        S<     0:00  \_ [scsi_eh_3]
 1122 ?        S<     0:00  \_ [scsi_eh_4]
 1124 ?        S<     0:00  \_ [scsi_eh_5]
 1133 ?        S<     0:00  \_ [exec-osm/0]
 1134 ?        S<     0:00  \_ [exec-osm/1]
 1140 ?        S<     0:00  \_ [block-osm/0]
 1141 ?        S<     0:00  \_ [block-osm/1]

What is osm? Can't find anything in kernel config?

Quoted 1 line

1148 ? S< 0:00 \_ [khpsbpkt]

What is this?

Quoted 6 lines
 1193 ?        S<     0:00  \_ [ksnapd]
 1201 ?        S<     0:00  \_ [rpciod/0]
 1202 ?        S<     0:00  \_ [rpciod/1]
 1204 ?        S<     0:00  \_ [kjournald]
 2448 ?        S<     0:00  \_ [kjournald]
 2649 ?        S      0:00  \_ [lockd]

Kernel config can be found here:
http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config

Signature · 2 lines
Georgi Chorbadzhiyski
http://georgi.unixsol.org/
#1 lore raw
Quoted 4 lines · Georgi Chorbadzhiyski

Not needed here, because no jfs partition is in use. Not needed here, because no xfs partition is in use. I dont use gfs2

You miss the best of Linux. So, why not unload the modules?

Quoted 3 lines
Quoted 1 line

1141 ? S< 0:00 \_ [block-osm/1]

What is osm? Can't find anything in kernel config?

drivers/message/i2o/i2o_block.c:#define OSM_NAME "block-osm"

Quoted 3 lines
Quoted 1 line

1148 ? S< 0:00 \_ [khpsbpkt]

What is this?

ieee1394/ieee1394_core.c:static struct task_struct *khpsbpkt_thread;

#4 lore raw
In reply to Georgi Chorbadzhiyski
Quoted 6 lines · Georgi Chorbadzhiyski

Hi guys, I know that not all kernel thread users are converted to start only when needed but the following is little annoying specially when I'm not even using jfs, xfs and gfs2.

Look at the ps output from a standard distro 2.6.24.5 kernel after a fresh boot:

...

Quoted 4 lines

Kernel config can be found here:
http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config

Your distro is building all of these modules into the kernel.
CONFIG_XFS_FS=y
CONFIG_JFS_FS=y
CONFIG_GFS2_FS=y

This isnt exactly standard practice, normally they'd be set to =m and only used if required to mount a filesystem. You may want to ask the slackware people why they chose to do this for their hugexxx.s kernels.

Don

#5 lore raw
Quoted 14 lines · On Tue, 13 May 2008 15:29:38 +1000 Donald Douwsma <[email protected]> wrote:
Quoted 6 lines · Georgi Chorbadzhiyski

Hi guys, I know that not all kernel thread users are converted to start only when needed but the following is little annoying specially when I'm not even using jfs, xfs and gfs2.

Look at the ps output from a standard distro 2.6.24.5 kernel after a fresh boot:

...

Quoted 4 lines

Kernel config can be found here:
http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config

Quoted 8 lines

Your distro is building all of these modules into the kernel.
CONFIG_XFS_FS=y
CONFIG_JFS_FS=y
CONFIG_GFS2_FS=y

This isnt exactly standard practice, normally they'd be set to =m and only used if required to mount a filesystem. You may want to ask the slackware people why they chose to do this for their hugexxx.s kernels.

To be able to use those filesystems on root partitions without requiring an initrd.

Georgi might be interested to use the generic kernel instead of the huge one, it is available there :
http://mirrors.unixsol.org/slackware/slackware-12.1/slackware/a/kernel-generic-smp-2.6.24.5_smp-i686-2.tgz

Documentation :
http://mirrors.unixsol.org/slackware/slackware-12.1/README.TXT
http://mirrors.unixsol.org/slackware/slackware-12.1/README.initrd
http://mirrors.unixsol.org/slackware/slackware-12.1/RELEASE_NOTES

Cheers

Francois

#7 lore raw
In reply to Donald Douwsma

Donald Douwsma mumbled something about, On 5/13/08 8:29 AM:

Quoted 13 lines
Quoted 6 lines · Georgi Chorbadzhiyski

Hi guys, I know that not all kernel thread users are converted to start only when needed but the following is little annoying specially when I'm not even using jfs, xfs and gfs2.

Look at the ps output from a standard distro 2.6.24.5 kernel after a fresh boot:

...

Quoted 3 lines

Kernel config can be found here:

http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config

Quoted 8 lines

Your distro is building all of these modules into the kernel.
CONFIG_XFS_FS=y
CONFIG_JFS_FS=y
CONFIG_GFS2_FS=y

This isnt exactly standard practice, normally they'd be set to =m and only used if required to mount a filesystem. You may want to ask the slackware people why they chose to do this for their hugexxx.s kernels.

I know that they are compiled in the kernel, but since they are not used isn't starting their own kthreads kind of unnecessary? Surely the threads can be started on demand only when xfs/etc volume is mounted.

Signature · 2 lines
Georgi Chorbadzhiyski
http://georgi.unixsol.org/
#6 lore raw
In reply to FD Cami

FD Cami mumbled something about, On 5/13/08 8:51 AM:

Quoted 24 lines
Quoted 12 lines · On Tue, 13 May 2008 15:29:38 +1000 Donald Douwsma <[email protected]> wrote:
Quoted 6 lines · Georgi Chorbadzhiyski

Hi guys, I know that not all kernel thread users are converted to start only when needed but the following is little annoying specially when I'm not even using jfs, xfs and gfs2.

Look at the ps output from a standard distro 2.6.24.5 kernel after a fresh boot:

...

Quoted 3 lines

Kernel config can be found here:
http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config

Quoted 8 lines

Your distro is building all of these modules into the kernel.
CONFIG_XFS_FS=y
CONFIG_JFS_FS=y
CONFIG_GFS2_FS=y

This isnt exactly standard practice, normally they'd be set to =m and only used if required to mount a filesystem. You may want to ask the slackware people why they chose to do this for their hugexxx.s kernels.

Quoted 6 lines

To be able to use those filesystems on root partitions without requiring an initrd.

Georgi might be interested to use the generic kernel instead of the huge one, it is available there :
http://mirrors.unixsol.org/slackware/slackware-12.1/slackware/a/kernel-generic-smp-2.6.24.5_smp-i686-2.tgz

I'm well aware of this kernels but I prefer to not use initrd when possible and still have most of the functionality available.

Signature · 2 lines
Georgi Chorbadzhiyski
http://georgi.unixsol.org/
#2 lore raw
In reply to Jan Engelhardt

Jan Engelhardt mumbled something about, On 5/13/08 2:21 AM:

Quoted 6 lines · Georgi Chorbadzhiyski
Quoted 3 lines

Not needed here, because no jfs partition is in use. Not needed here, because no xfs partition is in use. I dont use gfs2

You miss the best of Linux. So, why not unload the modules?

ext3 is working just fine for now, thanks (:

Quoted 9 lines
Quoted 2 lines
Quoted 1 line

1141 ? S< 0:00 \_ [block-osm/1]

What is osm? Can't find anything in kernel config?

drivers/message/i2o/i2o_block.c:#define OSM_NAME "block-osm"

Quoted 2 lines
Quoted 1 line

1148 ? S< 0:00 \_ [khpsbpkt]

What is this?

ieee1394/ieee1394_core.c:static struct task_struct *khpsbpkt_thread;

Strange names :)

Signature · 2 lines
Georgi Chorbadzhiyski
http://georgi.unixsol.org/
#8 lore raw
In reply to Georgi Chorbadzhiyski
Quoted 7 lines · Georgi Chorbadzhiyski
Quoted 7 lines
Quoted 1 line

http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config

Your distro is building all of these modules into the kernel.
CONFIG_XFS_FS=y
CONFIG_JFS_FS=y
CONFIG_GFS2_FS=y

Quoted 8 lines
Quoted 3 lines

This isnt exactly standard practice, normally they'd be set to =m and only used if required to mount a filesystem. You may want to ask the slackware people why they chose to do this for their hugexxx.s kernels.

I know that they are compiled in the kernel, but since they are not used isn't starting their own kthreads kind of unnecessary? Surely the threads can be started on demand only when xfs/etc volume is mounted.

Sure - XFS will start another three kernel threads per filesystem that gets mounted. And for good measure, it cleans them up again on unmount. :)

The other threads are per-cpu workqueue threads that are shared across all XFS filesystems in the system and hence are started when XFS is initialised rather than when a mount occurs.

Cheers,

Dave.

Signature · 3 lines
Dave Chinner
Principal Engineer
SGI Australian Software Group
#9 lore raw
Quoted 7 lines · David Chinner

Sure - XFS will start another three kernel threads per filesystem that gets mounted. And for good measure, it cleans them up again on unmount. :)

The other threads are per-cpu workqueue threads that are shared across all XFS filesystems in the system and hence are started when XFS is initialised rather than when a mount occurs.

Well, we could refcount the number of active xfs instances and start/stop the global threads based on that. Not really worth my time IHMO, but if someone comes up with a clean enough patch it should go in.

#10 lore raw
Quoted 4 lines · Christoph Hellwig

Well, we could refcount the number of active xfs instances and start/stop the global threads based on that. Not really worth my time IHMO, but if someone comes up with a clean enough patch it should go in.

Actually doing it in the VFS might be even better. Add ->init and ->exit methods to struct file_system_type and then the filesystems can move most of module_init/exit into the new methods.

#12 lore raw
In reply to Donald Douwsma
Quoted 8 lines · Donald Douwsma

Your distro is building all of these modules into the kernel.
CONFIG_XFS_FS=y
CONFIG_JFS_FS=y
CONFIG_GFS2_FS=y

This isnt exactly standard practice, normally they'd be set to =m and only used if required to mount a filesystem. You may want to ask the slackware people why they chose to do this for their hugexxx.s kernels.

Because they have always done it that way so it has to be right? :)

Signature · 1 line
Len Sorensen
#11 lore raw
In reply to Christoph Hellwig
Quoted 9 lines · Christoph Hellwig
Quoted 4 lines · Christoph Hellwig

Well, we could refcount the number of active xfs instances and start/stop the global threads based on that. Not really worth my time IHMO, but if someone comes up with a clean enough patch it should go in.

Actually doing it in the VFS might be even better. Add ->init and ->exit methods to struct file_system_type and then the filesystems can move most of module_init/exit into the new methods.

Hmm I like that idea! :)

-Eric

#3 lore raw
In reply to Georgi Chorbadzhiyski
Quoted 8 lines · Georgi Chorbadzhiyski

Jan Engelhardt mumbled something about, On 5/13/08 2:21 AM:

Quoted 5 lines · Georgi Chorbadzhiyski
Quoted 2 lines
Quoted 1 line

1148 ? S< 0:00 \_ [khpsbpkt]

What is this?

ieee1394/ieee1394_core.c:static struct task_struct *khpsbpkt_thread;

Strange names :)

Fixed in drivers/firewire/. :-)

PS:
"k" = kernel
"hpsb" = High Performance Serial Bus ( = IEEE 1394)
"pkt" = packet (The thread completes split transactions associated with outbound request packets.)

Signature · 3 lines
Stefan Richter
-=====-==--- -=-= -===-
http://arcgraph.de/sr/