[MDEV-5746] Slow file extend when innodb_use_fallocate=1 and SSD file storage Created: 2014-02-26  Updated: 2017-11-06  Due: 2014-02-28  Resolved: 2014-02-26

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: 5.5.36, 10.0.8
Fix Version/s: 5.5.37, 10.0.9

Type: Bug Priority: Minor
Reporter: Jan Lindström (Inactive) Assignee: Jan Lindström (Inactive)
Resolution: Fixed Votes: 0
Labels: None
Environment:

Fusion-IO SSD


Issue Links:
Relates
relates to MDEV-5878 Failing assertion: mutex_own(mutex) w... Closed
relates to MDEV-11520 Extending an InnoDB data file unneces... Closed
relates to MDEV-14244 MariaDB 10.2.10 fails to run on Debia... Closed

 Description   

Currently size is set like:

current_size = 0;
desired_size = (ib_int64_t)size + (((ib_int64_t)size_high) << 32);

#ifdef HAVE_POSIX_FALLOCATE
if (srv_use_posix_fallocate) {

if (posix_fallocate(file, current_size, desired_size) == -1) {

Thus file size is always extended from offset 0 to desired offset. This is clearly slower than doing

posix_fallocate(real_current_size, desired_size)



 Comments   
Comment by Jan Lindström (Inactive) [ 2014-02-26 ]

revno: 4098
message:
MDEV-5746: Slow file extend when innodb_use_fallocate=1 and SSD
file storage.

Analysis: posix_fallocate was called using 0 as offset and len as
desired size. This is not optimal for SSDs.

Fix: Call posix_fallocate with correct offset i.e. current file size
and extend the file from there len bytes.

Comment by Jan Lindström (Inactive) [ 2014-02-26 ]

revno: 4008
branch nick: 10.0
message:
MDEV-5746: Slow file extend when innodb_use_fallocate=1 and SSD
file storage.

Analysis: posix_fallocate was called using 0 as offset and len as
desired size. This is not optimal for SSDs.

Fix: Call posix_fallocate with correct offset i.e. current file size
and extend the file from there len bytes.

Comment by Marko Mäkelä [ 2017-02-22 ]

In the 5.5 version of this change we are incorrectly extending the file to current_size+desired_size bytes (if we ignore the fact that the start_offset calculation does not work for file_start_page_no>0). The third argument of posix_fallocate() is supposed to be the length by which the file is to be extended, not the total size.
This bug was not propagated to 10.0, because the posix_fallocate() call was first introduced into 10.0 in MDEV-5878 in this commit.

In my third 5.5 commit of MDEV-11520 I believe I have fixed all issues with the posix_fallocate() call in fil_extend_space_to_desired_size().

Generated at Thu Feb 08 07:06:45 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.