LINUX.ORG.RU

SSD тормозит

 , , samsung evo 970, ,


0

2

Добрый день!

Наблюдаю в разных разделах разную скорость записи. Не могу разобраться, в чём дело. Диск - Samsung 970 Evo 500GB.

Тестировал при помощи: time dd if=/dev/urandom of=test.img bs=1M count=1000 oflag=sync

Результаты:

  • /home/: 18.7127 s, 56.0 MB/s
  • /opt/: 1084.11 s, 967 kB/s

Пробовал вместо /opt использовать другой раздел (вновь созданный). Тестировал ext4/xfs/raw - результаты примерно такие-же (скорость записи - порядка 1МБ/сек.).

Есть идеи?

Конфигурация:

/dev/nvme0n1
  -> cryptsetup 
    -> lvm
      -> lv home -> ext4 -> /home/
      -> lv opt -> ext4 -> /opt/

SMART:

=== START OF INFORMATION SECTION ===
Model Number:                       Samsung SSD 970 EVO 500GB
Serial Number:                      S466NX0M131361J
Firmware Version:                   2B2QEXE7
PCI Vendor/Subsystem ID:            0x144d
IEEE OUI Identifier:                0x002538
Total NVM Capacity:                 500,107,862,016 [500 GB]
Unallocated NVM Capacity:           0
Controller ID:                      4
Number of Namespaces:               1
Namespace 1 Size/Capacity:          500,107,862,016 [500 GB]
Namespace 1 Utilization:            425,721,987,072 [425 GB]
Namespace 1 Formatted LBA Size:     512
Namespace 1 IEEE EUI-64:            002538 5191b07f1d
Local Time is:                      Mon Dec 21 13:47:11 2020 MSK
Firmware Updates (0x16):            3 Slots, no Reset required
Optional Admin Commands (0x0017):   Security Format Frmw_DL Self_Test
Optional NVM Commands (0x005f):     Comp Wr_Unc DS_Mngmt Wr_Zero Sav/Sel_Feat Timestmp
Maximum Data Transfer Size:         512 Pages
Warning  Comp. Temp. Threshold:     85 Celsius
Critical Comp. Temp. Threshold:     85 Celsius

Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     6.20W       -        -    0  0  0  0        0       0
 1 +     4.30W       -        -    1  1  1  1        0       0
 2 +     2.10W       -        -    2  2  2  2        0       0
 3 -   0.0400W       -        -    3  3  3  3      210    1200
 4 -   0.0050W       -        -    4  4  4  4     2000    8000

Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
 0 +     512       0         0

=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART/Health Information (NVMe Log 0x02, NSID 0x1)
Critical Warning:                   0x00
Temperature:                        34 Celsius
Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    1%
Data Units Read:                    5,776,594 [2.95 TB]
Data Units Written:                 24,849,991 [12.7 TB]
Host Read Commands:                 120,921,720
Host Write Commands:                449,279,538
Controller Busy Time:               1,293
Power Cycles:                       2,962
Power On Hours:                     2,026
Unsafe Shutdowns:                   98
Media and Data Integrity Errors:    0
Error Information Log Entries:      3,193
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0
Temperature Sensor 1:               34 Celsius
Temperature Sensor 2:               36 Celsius

Error Information (NVMe Log 0x01, max 64 entries)
No Errors Logged
★★★★★

Последнее исправление: Harliff (всего исправлений: 1)
Ответ на: комментарий от anonymous
# fstrim -v /opt ; fstrim -v /home
/opt: 1.7 GiB (1791938560 bytes) trimmed
/home: 4.7 GiB (5004308480 bytes) trimmed

Пробовал. На скорость не влияет.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Попробуй /dev/zero вместо /dev/urandom.

Попробовал, разницы нет.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Harliff
# nvme smart-log /dev/nvme0n1
Smart Log for NVME device:nvme0n1 namespace-id:ffffffff
critical_warning                    : 0
temperature                         : 37 C
available_spare                     : 100%
available_spare_threshold           : 10%
percentage_used                     : 1%
data_units_read                     : 5,776,809
data_units_written                  : 24,859,256
host_read_commands                  : 120,931,176
host_write_commands                 : 449,476,226
controller_busy_time                : 1,293
power_cycles                        : 2,962
power_on_hours                      : 2,027
unsafe_shutdowns                    : 98
media_errors                        : 0
num_err_log_entries                 : 3,193
Warning Temperature Time            : 0
Critical Composite Temperature Time : 0
Temperature Sensor 1                : 37 C
Temperature Sensor 2                : 39 C
Thermal Management T1 Trans Count   : 0
Thermal Management T2 Trans Count   : 0
Thermal Management T1 Total Time    : 0
Thermal Management T2 Total Time    : 0
Harliff ★★★★★
() автор топика
Ответ на: комментарий от Harliff

Они хранятся в кольцевом буфере из 64 слотов и сбрасываются при потере питания. «No Errors Logged» означает, что в буфере ничего нет: с момента подачи питания ошибок ещё не было.

i-rinat ★★★★★
()

56.0 MB/s

dd if=/dev/urandom

Протестируй ещё dd if=/dev/urandom of=/dev/null bs=1M count=1000 status=progress. Дело наверняка в скорости чтения из /dev/urandom.

i-rinat ★★★★★
()

А что если шифрование убрать?

anonymous
()

Меняй расходник. Ну сохрани там что-нибудь.

anonymous
()

Тестировал при помощи: time dd if=/dev/urandom of=test.img bs=1M count=1000 oflag=sync

https://habr.com/ru/post/154235/

Очень частой проблемой, является попытка понять «насколько быстрый сервер?» Среди всех тестов наиболее жалко выглядят попытки оценить производительность дисковой подсистемы. Вот ужасы, которые я видел в своей жизни:
научная публикация, в которой скорость кластерной FS оценивали с помощью dd (и включенным файловым кешем, то есть без опции direct)
использование bonnie++
использование iozone
использование пачки cp с измерениема времени выполнения
использование iometer с dynamo на 64-битных системах


Это всё совершенно ошибочные методы. Дальше я разберу более тонкие ошибки измерения, но в отношении этих тестов могу сказать только одно — выкиньте и не используйте.

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 2)

естировал при помощи

Тут хоть что делай – меняй носитель. Это приятно, но не бесплатно.

anonymous
()
Ответ на: комментарий от unanimous

Раз пошли меряться в скорости генерации псевдорандома

$ openssl enc -rc4 -pass pass: -nosalt < /dev/zero | pv > /dev/null
1.21GiB 0:00:05 [ 261MiB/s]
anonymous
()
Ответ на: комментарий от targitaj

Всё правильно, но мегабайт в секунду - это в любом случае за гранью бобра, чем ни меряй.

pinus_nigra
()
Ответ на: комментарий от anonymous

Раз пошли меряться в скорости генерации псевдорандома

А смысл?

$ openssl rand $((2000*1000*1000)) | pv > /dev/null
1,86GiB 0:00:02 [ 714MiB/s] [       <=>
$ 
i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

openssl rand

Я-то проверял скорость на атоме. Теперь проверь скорость rc4 вместо встроенного в процессор rdrand, который впустую греет мир вычисляя aes.

anonymous
()
Ответ на: комментарий от anonymous

Теперь проверь скорость rc4

334 MiB/s

вместо встроенного в процессор rdrand

openssl rand только один раз получает энтропию через getrandom(), а потом использует псевдослучайный генератор.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

openssl rand

Тем временем на атоме это 10 раз медленнее, чем rc4

$openssl rand $((100*1000*1000)) | pv > /dev/null
95.4MiB 0:00:03 [26.7MiB/s]
anonymous
()
Ответ на: комментарий от red_rain

Это ноутбук dell e7470.

Процессор i5-6300U

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Harliff

А не проблема ли это всех самвсунов? Под шинду они требуют свой личный драйвер чтобы работать не через задницу мммммееееееддддддлллллееееееннннооооо.

anonymous
()
Ответ на: комментарий от targitaj

Ну, я тут не СХД тестирую всё-таки. А то мы так в дискуссию о параметрах fio уйдём.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Если ничего не смогу сделать, то так и поступлю.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Harliff

Есть идеи, почему (при таком SMART) он так плохо работает?

Harliff ★★★★★
() автор топика
Data Units Read:                    5,776,594 [2.95 TB]
Data Units Written:                 24,849,991 [12.7 TB]

Часто вижу такой сильный перекос записанных и прочитанных данных.

Сколько циклов перезаписи у SSD? Какой TBW (Total Bytes Written)?

anonymous
()

Перезагрузил компьютер. Результат:

$ pv -s 1G -S /dev/urandom > /opt/test.img
1.00GiB 0:00:06 [ 155MiB/s] [============================================================================================================================>] 100%            
pv -s 1G -S /dev/urandom > /opt/test.img  0.00s user 6.53s system 99% cpu 6.601 total
Harliff ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Часто вижу такой сильный перекос записанных и прочитанных данных.

Оперативной памяти видать сильно с избытком, все сидит в кэше, от того и чтения с диска почти нет.

Khnazile ★★★★★
()

Не совсем понятна сама идея что-то писать в /opt. Ну создай /opt/var, может что-то изменится, хоть и не уверен.

anonymous
()
Ответ на: комментарий от Khnazile

Может он только тем и занимается, что проверяет скорость записи? Каждый час по 6 Гигов = 12 ТБ / 2000 часов в среднем

anonymous
()
Ответ на: комментарий от anonymous

Какой TBW (Total Bytes Written)?

Гарантия даётся на 300 TBW (или 5 лет).

Harliff ★★★★★
() автор топика

Это все из-за lvm. Нахера он нужен? На ноуте нет никаких элвээмов и вся зашибись.

anonymous
()
Ответ на: комментарий от Khnazile

Оперативной памяти видать сильно с избытком

24 Гб.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Khnazile

Да, шучу я. 6 гигов в час - это даже не нагрузка, ради чего берут nvme.

И скорее всего у него проблема с настройками ОС, лвм, фс и тд (какой-нибудь баг 12*** - не помню точно номер этого базворда). А с диском все хорошо.

anonymous
()
Ответ на: комментарий от red_rain

fstab:

/dev/vg/debian  /                   ext4  errors=remount-ro            0 1
/dev/vg/storage /storage            ext4  data=journal,defaults,nofail 0 2
/dev/vg/docker  /var/lib/docker     ext4  data=journal,defaults,nofail 0 2
/dev/vg/home    /home               ext4  data=journal,defaults        0 2
/dev/vg/gns3    /gns3               ext4  data=journal,defaults        0 2
/dev/vg/icedove /home/user/.icedove ext4  data=journal,defaults        0 2
/dev/nvme0n1p1  /boot               ext4  rw,auto,data=journal,nofail  0 2
/dev/vg/swap    none                swap  defaults                     0 0
/dev/vg/vm      /srv/vm             ext4  defaults,nofail              0 0
/dev/vg/opt     /opt                ext4  defaults                     0 0
proc            /proc               proc  defaults                     0 0
tmpfs           /tmp                tmpfs defaults                     0 0
Harliff ★★★★★
() автор топика
Ответ на: комментарий от Harliff

data=journal

Когда-то давно экспериментировал с этим, заметил странные просадки скорости работы с большими файлами.

anonymous
()
Ответ на: комментарий от Harliff

Кстати, у кого используется аналогичная схема (nvme -> cryptsetup -> lvm -> ext4)?

Прописан ли у Вас discard в следующих местах:

  • /proc/cmdline
  • /etc/lvm.conf
  • /etc/fstab

?

Harliff ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Когда-то давно экспериментировал с этим, заметил странные просадки скорости работы с большими файлами.

Я готов с этим мириться :)

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Harliff

Я готов с этим мириться

Так ты же как раз жалуешься на то, что медленно пишется большой файл dd of=test.img.

anonymous
()

cryptsetup

Какая у тебя вообще загрузка процессора во время тестов?

bhfq ★★★★★
()
Ответ на: комментарий от Harliff

Нужно error-log. Но у самсунгов там обычно записи ошибок вида «ошибок нет». К сожалению, стандартам они следуют местами не очень хорошо.

anonymous
()
Ответ на: комментарий от anonymous

Нужно error-log. Но у самсунгов там обычно записи ошибок вида «ошибок нет».

Именно так, ценность в таком error-log’e минимальна:

Error Log Entries for device:nvme0n1 entries:64
.................
 Entry[ 0]   
.................
error_count  : 0
sqid         : 0
cmdid        : 0
status_field : 0(SUCCESS: The command completed successfully)
parm_err_loc : 0
lba          : 0
nsid         : 0
vs           : 0
cs           : 0
.................

(Таких записей - 64 шт.)

Harliff ★★★★★
() автор топика

Всем спасибо!

Поскольку, после перезагрузки - проблема не проявляется, помечаю тему как «Решённую».

Harliff ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.