Hi!
>>>>> "Robert" == Robert Milkowski <milek@stripped> writes:
Robert> Hi,
Robert> Solaris 10 64bit x86, MySQL 5.1.41
Robert> Despite having myisam_use_mmap = 1 in my.cnf there are still lots of
Robert> pread(), read() syscalls to myisam data files. I can see that mysql
Robert> detected and honored (at least to some extend) the myisam_use_mmap
Robert> setting as if I do: pmap PID_of_mysql I can see myisam files being
Robert> mmaped like:
<cut>
Robert> By looking at _mi_get_block_info() i can see at the beginning of the
Robert> function that it is calling my_read() which in turn is calling read()
Robert> syscall. It's a similar story with _mi_read_rnd_dynamic_record() function.
Robert> I haven't look closely at the code but it looks like changing the
Robert> discussed two functions to do memcpy() from a mmaped region or even
Robert> better set a pointer to mmap'ed region (assuming no modifications are
Robert> done) shouldn't be that hard.
Robert> During peak hours I can see several hundreds read()/s, sometimes even
Robert> more, and getting rid of all these syscalls would probably improve
Robert> performance.
You are right; Currently the myisam_use_mmap is not fully
implemented.
Looking quickly at the mi_dynrec.c code, it looks like the following
functions needs to be fixed to get read of the reads:
_mi_read_cache()
_mi_read_rnd_dynamic_record()
_mi_get_block_info()
Should not be that much work.
_mi_cmp_buffer() doesn't have to be changed as this is not used
by MySQL.
_mi_write_part_record() doens't have to be changed as the write calls
are only used when writing to a buffer that will be written to end of
file.
Regards,
Monty
Creator of MySQL