Tasks raising to 95% of %CPU / SOLVED

Eduardo Soriano (e_soriano@dapsys.ch)
Thu, 08 Apr 1999 13:36:08 +0200


Environment: Linux 2.0.36 RedHat 5.2

Kernel updates:

1. From Alan Cox (alan@lxorguk.ukuu.org.com)
-----------------------------------------

> If you edit fs/ext2/dir.c and rebuild a kernel with the fsync entry in
> the file operations set to file_fsync
>
> ie to
>
> static struct file_operations ext2_dir_operations = {
> NULL, /* lseek - default */
> ext2_dir_read, /* read */
> NULL, /* write - bad */
> ext2_readdir, /* readdir */
> NULL, /* select - default */
> ext2_ioctl, /* ioctl */
> NULL, /* mmap */
> NULL, /* no special open code */
> NULL, /* no special release code */
> file_sync, /* fsync */
> NULL, /* fasync */
> NULL, /* check_media_change */
> NULL /* revalidate */
> };

No impact. The system worked properly last Thursday but in fact it was
a day with few inserts

2. From Franz J Fortuny (ffortuny@ivsol.com)
-----------------------------------------

You must recompile the kernel so that file in
/usr/src/linux/fs/ext2/file.c should look like:

64 static struct file_operations ext2_file_operations = {
65 ext2_file_lseek, /* lseek */
66 generic_file_read, /* read */
67 ext2_file_write, /* write */
68 NULL, /* readdir - bad */
69 NULL, /* poll - default */
70 ext2_ioctl, /* ioctl */
71 generic_file_mmap, /* mmap */
72 #if BITS_PER_LONG == 64
73 NULL, /* no special open is
needed */
74 #else
75 ext2_open_file,
76 #endif
77 NULL, /* flush */
78 ext2_release_file, /* release */
----> 79 file_fsync, /* fsync */
80 NULL, /* fasync */
81 NULL, /* check_media_change */
82 NULL /* revalidate */
83 };

Line 79 is the one that needs to be modified.

On 2.0.36 this upgrade becomes:

extern int file_fsync();

/*
* We have mostly NULL's here: the current defaults are ok for
* the ext2 filesystem.
*/
static struct file_operations ext2_file_operations = {
NULL, /* lseek - default */
generic_file_read, /* read */
ext2_file_write, /* write */
NULL, /* readdir - bad */
NULL, /* select - default */
ext2_ioctl, /* ioctl */
generic_file_mmap, /* mmap */
NULL, /* no special open is needed */
ext2_release_file, /* release */
/*
ext2_sync_file,
*/
file_fsync, /* fsync */
NULL, /* fasync */
NULL, /* check_media_change */
NULL /* revalidate */
};

This patch solved the problem.

Problem reason:
--------------

Solid DB is currently stored on a single file large of 500M

According with solid documentation, a daemon is started on every 5000 inserts
performed on the DB in order to complete a CheckPoint.

This checkpoint operation required 1 minute and 50 seconds to be completed.
At that time, the system was overloaded and unable to handle remote
requests.

The new kernel with file.c upgrade requires now 4 seconds to complete the
same task.

Even more, solid server "feels" to work 30% faster, but we have not checked
this feeling with appropriate tools. We had no references about a referenced
transaction when using the "slow" kernel.

Many thanks to Alan and Franz for their help.

Bye

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