1 changed files with 125 additions and 0 deletions
@ -0,0 +1,125 @@ |
|||
--- |
|||
title: "Testing hard-drive or SSD performance on Fedora" |
|||
date: 2019-03-22T00:00:00+02:00 |
|||
opensource: |
|||
- Fedora |
|||
--- |
|||
|
|||
If your Linux system appears to be slow, it might be an issue with your disks, |
|||
either hard drive or SSD. Hopefully, with a few commands you can get an idea |
|||
of the performances of your disks. |
|||
|
|||
First, you will have to install `hdparm` using `yum` or `dnf`: |
|||
|
|||
```sh |
|||
sudo yum install hdparm |
|||
``` |
|||
|
|||
Then, you will need to know which disk to test (your system might have multiple |
|||
disks). In this example, let's pretend we find our `/` partition to be slow. |
|||
|
|||
The `df` command will show you on which disk is hosted the `/` filesystem: |
|||
|
|||
```raw |
|||
# df -h / |
|||
Filesystem Size Used Avail Use% Mounted on |
|||
/dev/mapper/storage-root 10G 2.6G 7.5G 26% / |
|||
``` |
|||
|
|||
In this example, the `/` partition is on a logical volume (`root`) that is in |
|||
the `storage` volume group. If you suspect another partition, replace `/` with |
|||
the mountpoint of the other partition (`/var` for instance). |
|||
|
|||
Let's find on which disk(s) is the volume group `storage` with the `pvdisplay` |
|||
command: |
|||
|
|||
```raw |
|||
$ sudo pvdisplay |
|||
--- Physical volume --- |
|||
PV Name /dev/sda2 |
|||
VG Name storage |
|||
PV Size <557.88 GiB / not usable 4.00 MiB |
|||
Allocatable yes |
|||
PE Size 4.00 MiB |
|||
Total PE 142816 |
|||
Free PE 89056 |
|||
Allocated PE 53760 |
|||
PV UUID 9FT0O7-zs52-U11S-ROL1-ixVW-tgL9-9fVKXC |
|||
``` |
|||
|
|||
In the previous output, there is one physical volume (`/dev/sda2`) in the |
|||
`storage` volume group. So we need to measure the performances of `/dev/sda`. |
|||
|
|||
The `hdparm -tT` command performs timing reads of the disk, with and without |
|||
the buffer cache of the Linux kernel. |
|||
|
|||
```raw |
|||
$ sudo hdparm -tT /dev/sda |
|||
|
|||
/dev/sda: |
|||
Timing cached reads: 25732 MB in 1.99 seconds = 12926.07 MB/sec |
|||
Timing buffered disk reads: 556 MB in 3.00 seconds = 185.23 MB/sec |
|||
``` |
|||
|
|||
According the man page, the `-t` parameter is used to: |
|||
|
|||
> display the speed of reading directly |
|||
> from the Linux buffer cache without disk access. This measurement is |
|||
> essentially an indication of the throughput of the processor, cache, and |
|||
> memory of the system under test. |
|||
|
|||
According the man page, the `-T` parameter is used to: |
|||
|
|||
> display the speed of reading |
|||
> through the buffer cache to the disk without any prior caching of data. |
|||
> This measurement is an indication of how fast the drive can sustain |
|||
> sequential data reads under Linux, without any filesystem overhead. |
|||
|
|||
You can test the write speed with the `dd` command. This command will create a |
|||
file and write to it. The `conv=fdatasync` is used to actually write the content |
|||
to disk by flushing the buffers. |
|||
|
|||
```sh |
|||
sudo dd if=/dev/zero of=/output conv=fdatasync bs=256k count=1k; rm -f /output |
|||
``` |
|||
|
|||
Make sure you write the file in the filesystem you want to test. For instance, |
|||
if you want to test the write speed on `/var`, replace `/output` with |
|||
`/var/output`. |
|||
|
|||
```raw |
|||
$ sudo dd if=/dev/zero of=/output conv=fdatasync bs=256k count=128; rm -f /output |
|||
128+0 records in |
|||
128+0 records out |
|||
33554432 bytes (34 MB) copied, 0.0259041 s, 1.3 GB/s |
|||
|
|||
$ sudo dd if=/dev/zero of=/output conv=fdatasync bs=256k count=512; rm -f /output |
|||
512+0 records in |
|||
512+0 records out |
|||
134217728 bytes (134 MB) copied, 0.110927 s, 1.2 GB/s |
|||
|
|||
$ sudo dd if=/dev/zero of=/output conv=fdatasync bs=256k count=1k; rm -f /output |
|||
1024+0 records in |
|||
1024+0 records out |
|||
268435456 bytes (268 MB) copied, 0.32287 s, 831 MB/s |
|||
|
|||
$ sudo dd if=/dev/zero of=/output conv=fdatasync bs=256k count=8k; rm -f /output |
|||
8192+0 records in |
|||
8192+0 records out |
|||
2147483648 bytes (2.1 GB) copied, 11.2527 s, 191 MB/s |
|||
``` |
|||
|
|||
Note: your write speed might be faster than your read speed. How can it be so? |
|||
Well, if your server has an high-end hardware disk controller, it might have |
|||
dedicated hardware buffers in addition to a small battery to retain data in case |
|||
of a power loss. In this case, if the file is small enough to fit the hardware |
|||
buffer of the disk controller, you are actually mesuring the bandwidth of your disk |
|||
controller. |
|||
|
|||
To measure the write speed of your disk, you have to write a file **much larger** |
|||
than the hardware buffers of your disk controller. |
|||
|
|||
In the previous examples, the hardware buffers of my server seems to be around |
|||
128 MB (the performances start to drop after that). |
|||
|
|||
So the actual write speed of my disk is around 190 MB/s. |
|||
Loading…
Reference in new issue