Тестування nvme-накопичувачів в різних режимах роботи інтерфейсу pci express практичне
Дякую вам за підтримку!
Якщо запитати, який інтерфейс слід використовувати для твердотільного накопичувача з підтримкою протоколу NVMe, то будь-яка людина (взагалі знає, що таке NVMe) відповість: звичайно PCIe 3.0 x4! Правда, з обґрунтуванням у нього, швидше за все, виникнуть складності. У кращому випадку отримаємо відповідь, що такі накопичувачі підтримують PCIe 3.0 x4, а пропускна здатність інтерфейсу має значення. Мати-то має, проте всі розмови про це почалися тільки тоді, коли деяким накопичувачів на деяких операціях стало тісно в рамках «звичайного» SATA. Але ж між його 600 МБ / с і (так само теоретичними) 4 ГБ / с інтерфейсу PCIe 3.0 x4 - просто прірва, причому заповнена масою варіантів! А раптом і однієї лінії PCIe 3.0 вистачить, оскільки це вже в півтора рази більше SATA600? Масла у вогонь підливають виробники контролерів, які загрожують у бюджетній продукції перейти на PCIe 3.0 x2, а також той факт, що у багатьох користувачів і такого-то немає. Точніше, теоретично є, але вивільнити їх можна, лише переконфігурувати систему або навіть щось в ній поміняв, чого робити не хочеться. А ось купити топовий твердотільний накопичувач - хочеться, але є побоювання, що користі від цього не буде зовсім ніякої (навіть морального задоволення від результатів тестових утиліт).
Але так це чи ні? Іншими словами, чи потрібно дійсно орієнтуватися виключно на підтримуваний режим роботи - чи все-таки на практиці можна поступитися принципами. Саме це ми сьогодні і вирішили перевірити. Нехай перевірка буде швидкою і не претендує на вичерпну повноту, однак отриманої інформації повинно виявитися досить (як нам здається) хоча б для того, щоб задуматися. А поки коротко ознайомимося з теорією.
PCI Express: існуючі стандарти і їх пропускна здатність
Почнемо з того, що являє собою PCIe і з якою швидкістю цей інтерфейс працює. Часто його називають «шиною», що трохи невірно ідеологічно: як такої шини, з якої з'єднані всі пристрої, немає. На ділі є набір з'єднань «точка-точка» (схожий на багато інших послідовні інтерфейси) з контролером в середині і приєднаними до нього пристроями (кожне з яких саме по собі може бути і концентратором наступного рівня).
Методика тестування
Провести тести з різними версіями стандарту PCIe нескладно: практично всі контролери дозволяють використовувати не тільки підтримуваний ними, але і все більш ранні. Ось з кількістю ліній - складніше: нам хотілося безпосередньо протестувати і варіанти з однією-двома лініями PCIe. Використовувана нами зазвичай плата Asus H97-Pro Gamer на чіпсеті Intel H97 повного набору не підтримує, але крім «процесорного» слота х16 (який зазвичай і використовується) на ній є ще один, який працює в режимах PCIe 2.0 х2 або х4. Ось цієї трійкою ми і скористалися, додавши до неї ще й режим PCIe 2.0 «процесорного» слота, щоб оцінити, чи є різниця. Все-таки в цьому випадку між процесором і SSD сторонніх «посередників» немає, а ось при роботі з «чіпсетний» слотом - є: власне чіпсет, фактично з'єднується з процесором тим же PCIe 2.0 x4. Можна було додати ще кілька режимів роботи, але основну частину дослідження ми все одно збиралися провести на іншій системі.
Справа в тому, що ми вирішили скористатися нагодою і заодно перевірити одну «міську легенду», а саме повір'я про корисність використання топових процесорів для тестування накопичувачів. Ось і взяли восьміядерний Core i7-5960X - родича зазвичай застосовується в тестах Core i3-4170 (це Haswell і Haswell-E), але у якого ядер в чотири рази більше. Крім того, виявлена в засіках плата Asus Sabertooth X99 нам сьогодні корисна наявністю слота PCIe x4, на ділі здатного працювати як х1 або х2. У цій системі ми протестували три варіанти х4 (PCIe 1.0 / 2.0 / 3.0) від процесора і чіпсетний PCIe 1.0 х1, PCIe 1.0 х2, PCIe 2.0 х1 і PCIe 2.0 х2 (у всіх випадках чіпсетний конфігурації відзначені на діаграмах значком (c)). Чи є сенс зараз звертатися до першої версії PCIe, з урахуванням того, що навряд чи знайдеться хоч одна плата з підтримкою тільки цієї версії стандарту, здатна завантажитися з NVMe-пристрої? З практичної точки зору - ні, а ось для перевірки апріорі передбачуваного співвідношення PCIe 1.1 х4 = PCIe 2.0 х2 і подібних воно нам знадобиться. Якщо перевірка покаже, що масштабованість шини відповідає теорії, значить, і неважливо, що нам не вдалося поки отримати практично значущі способи підключення PCIe 3.0 x1 / х2: перший буде ідентичний якраз PCIe 1.1 х4 або PCIe 2.0 х2, а другий - PCIe 2.0 х4 . А вони у нас є.
У плані ПО ми обмежилися тільки Anvil's Storage Utilities 1.1.0: різноманітні низькорівневі характеристики накопичувачів вона вимірює непогано, а нічого іншого нам і не потрібно. Навіть навпаки: будь-який вплив інших компонентів системи є вкрай небажаним, так що низкоуровневая синтетика для наших цілей є безальтернативною.

Як «робочого тіла» ми використали Patriot Hellfire ємністю 240 ГБ. Як було встановлено при його тестуванні, це не рекордсмен по продуктивності, але його швидкісні характеристики цілком відповідають результатам кращих SSD того ж класу і тієї ж ємності. Та й більш повільні пристрої на ринку вже є, причому їх буде ставати все більше. В принципі, можна буде повторити тести і з чим-небудь більш швидким, проте, як нам здається, необхідності в цьому немає - результати передбачувані. Але не станемо забігати вперед, а подивимося, що ж у нас вийшло.
результати тестів


Все рівно і красиво. Але шаблони не рве. максимум в цих тестах становить лише трохи більше 500 МБ / с, а це цілком під силу навіть SATA600 або (в додатку до сьогоднішнього тестування) PCIe 1.0 х4 / PCIe 2.0 х2 / PCIe 3.0 х1. Саме так: не варто лякатися випуску бюджетних контролерів під PCIe х2 або наявності лише такої кількості ліній (причому версії стандарту 2.0) в слотах М.2 на деяких платах, коли більше-то і не потрібно. Іноді і стільки не потрібно: максимальні результати досягнуті при черзі в 16 команд, що для масового ПЗ не типово. Найчастіше зустрічається чергу з 1-4 командами, а для цього обійтися можна і однією лінією самого першого PCIe і навіть найпершим SATA. Втім, накладні витрати та інше мають місце бути, так що швидкий інтерфейс корисний. Однак надмірно швидкий - хіба що не шкідливий.
А ще в цьому тесті по-різному поводяться платформи, причому з одиничною чергою команд - принципово по-різному. «Біда» зовсім не в тому, що багато ядер - погано. Вони тут все одно не використовуються, хіба що одне, і не настільки, щоб щосили розвернувся буст- режим. Ось і маємо різницю десь в 20% по частоті ядер і півтора рази по кеш-пам'яті - вона в Haswell-E працює на більш низькій частоті, а не синхронно з ядрами. Загалом, топова платформа може стати в нагоді хіба що для вибивання максимуму «йопсов» за допомогою максимально многопоточного режиму з великою глибиною черги команд. Шкода тільки, що з точки зору практичної роботи це зовсім вже сферична синтетика в вакуумі :)

На записі стан справ принципово не змінилося - у всіх сенсах. Але, що цікаво, на обох системах найшвидшим виявився режим PCIe 2.0 х4 в «процессорном» слоті. На обох! І при багаторазових перевірках / повторні огляди. Тут вже мимоволі задумаєшся, чи потрібні ці ваші нові стандарти або краще взагалі нікуди не поспішати.

При роботі з блоками різного розміру теоретична ідилія розбивається об те, що підвищення швидкості інтерфейсу все ж має сенс. Результуючі цифри такі, що вистачило б пари ліній PCIe 2.0, але реально в такому випадку продуктивність нижче, ніж у PCIe 3.0 х4, нехай і не в рази. І взагалі тут бюджетна платформа топову «забиває» в куди більшій мірі. А адже саме такого роду операції в основному в прикладному ПО і зустрічаються, т. е. ця діаграма - найбільш наближена до реальності. В результаті немає нічого дивного, що ніякого «вау-ефекту» товсті інтерфейси і модні протоколи не дають. Точніше, яке переходить з механіки - дадуть, але рівно такий же, який йому забезпечить будь твердотільний накопичувач з будь-яким інтерфейсом.

Отже, що ми бачимо? Застосування PCIe 3.0 x4 при наявності можливості є, безумовно, кращим, але не необхідним: NVMe-накопичувачів середнього класу (в своєму спочатку топовом сегменті) він приносить буквально 10% додаткової продуктивності. Та й то - за рахунок операцій в общем-то не такі вже й часто зустрічаються на практиці. Для чого ж в даному випадку реалізований саме цей варіант? По-перше, була така можливість, а запас кишеню не тягне. По-друге, є накопичувачі і швидше, ніж наш тестовий Patriot Hellfire. По-третє, є такі області діяльності, де «атипові» для настільної системи навантаження - як раз цілком типові. Причому саме там найбільш критично швидкодію системи зберігання даних або, принаймні, можливість зробити її частина дуже швидкою. Але до звичайних персональних комп'ютерів це все не стосується.
У них, як бачимо, і використання PCIe 2.0 x2 (або, відповідно, PCIe 3.0 х1) не приводить до драматичного зниження продуктивності - лише на 15-20%. І це незважаючи на те, що потенційні можливості контролера в цьому випадку ми обмежили в чотири рази! Для багатьох операцій і такої пропускної здатності досить. Ось однієї лінії PCIe 2.0 вже недостатньо, тому контролерам має сенс підтримувати саме PCIe 3.0 - і в умовах жорсткої нестачі ліній в сучасній системі це буде працювати непогано. Крім того, корисна ширина х4 - навіть при відсутності підтримки сучасних версій PCIe в системі вона все одно дозволить працювати з нормальною швидкістю (нехай і повільніше, ніж могло б потенційно), якщо знайдеться більш-менш широкий слот.
В принципі, велика кількість сценаріїв, в яких вузьким місцем виявляється власне флеш-пам'ять (так, це можливо і притаманне не тільки механіці), призводить до того, що чотири лінії третьої версії PCIe на цьому накопичувачі обганяють одну першої приблизно в 3,5 рази - теоретична ж пропускна здатність цих двох випадків різниться в 16 разів. З чого, зрозуміло, не випливає, що потрібно спішно бігти освоювати зовсім повільні інтерфейси - їх час минув безповоротно. Просто багато можливостей швидких інтерфейсів можуть бути реалізовані лише в майбутньому. Або в умовах, з якими звичайний користувач звичайного комп'ютера ніколи в житті безпосередньо не зіткнеться (за винятком любителів мірятися відомо чим). Власне, і все.