Скорость чтения с диска, о которой сообщает iotop, выше ожидаемой. - PullRequest
0 голосов
/ 04 августа 2020

Предположим, есть большой файл размером 6,4 ГБ.

Я хочу сравнить скорость его чтения последовательно и случайным образом.

У меня есть простой Python скрипт для измерения

import os
import time
import random

path = './largefile'
file_size = os.stat(path).st_size
assert file_size == 6400000000, file_size
block_size = 64000
f = os.open(path, os.O_RDONLY)
start = time.time()
count = 10000
for i in range(count):
    # Method 1:  sequentially
    content = os.read(f, block_size)

    # Method 2: randomly
    # offset = random.randint(0, file_size-block_size)
    # content = os.pread(f, block_size, offset) # it's the same if I replace pread with lseek+read
elapsed = time.time() - start
print('%.2fMB/s' % ((count*block_size)/10**6/elapsed))
os.close(f)

Когда я запускаю сценарий несколько раз для метода 1 и метода 2, скорость будет следующей:

Method 1:
38.43MB/s
4987.49MB/s

Method 2:
32.81MB/s
29.95MB/s
27.46MB/s
21.20MB/s
...
15.44MB/s
13.44MB/s

Скорость метода 1 такая, как ожидалось (очень близко к скорости чтения, измеренной iotop) сначала, а затем кричаще высокой из-за кеширования страниц. Скорость метода 2 падает, в то время как iotop показывает, что скорость чтения всегда составляет около 35 МБ / с.

Мой вопрос в том, почему скорость чтения iotop составляет 35 МБ / с, а реальная скорость чтения намного ниже (15 МБ / с. s) чем это?

Кстати, я использую CentOS с файловой системой xfs.

Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda2      xfs        30G   22G  7.8G  74% /
...