SSD používající PCIe 5.0 budou až dvakrát rychlejší, podívejte se na detaily řadiče Phison E26

26. 5. 2022

Sdílet

 Autor: AnandTech
Phison E26 přinese v NVMe modulech až 2× vyšší výkon a řadu nových technologií proti dnešní generaci SSD s rozhraním PCIe 4.0.

Měli jsme tu zprávu o prvních představených SSD s rozhraním PCI Express 5.0, které na platformě AMD AM5 a Intel LGA 1700 umožní dosáhnout až dvojnásobných rychlostí čtení a zápisu. Velká nebo převážná část těchto SSD bude založená na řadiči Phison E26 (a často i na referenčním návrhu a firmwaru). Jeho výrobce teď na Computexu 2022 představil jeho parametry, které nám ukazují, jak bude nová špička SSD pro počítače vypadat.

Phison E26 (delší označení je PS5026-E26) je následníkem řadičů E16 a E18, na nichž byla založená velká část (ze začátku s E16 takřka všechna) SSD s rozhraním PCIe 4.0. Výrobce, zdá se, opět koordinoval vývoj a uvedení na trh s dostupností rozhraní PCIe 5.0 ×4 na platformě AMD, jako v roce 2019 s PCIe 4.0.

Phison E26 je vyráběný stejným 12nm procesem TSMC jako čip E18, ale s rozhraním PCIe 5.0 ×4 se zvýšil počet kontaktů (576 kuliček) a pouzdro čipu je větší, 16 × 16 mm (E18 měřil 12 × 12 mm, nicméně E16 byl také 16 × 16 mm). Řadič je stejně jako předchůdci osmikanálový a celkem podporuje až 32 čipů NAND. Zde tedy nevybočuje ze standardu výkonných SSD poslední doby. Podporuje takto kapacitu modulů M.2 až 32 TB, což nejspíš během jeho kariéry nebude potřeba – na spotřebitelském trhu by taková SSD byla příliš drahá.

Speciální akcelerátory a nová generace LDPC ECC

V čem budou kromě rozhraní upgrady proti generaci řadičů pro PCIe 4.0? Rychlost čtení/zápisu do jednotlivých čipů bude nově až 2400 MT/s na jeden kanál, zatímco u E16 to bylo 800 MT/s a u řadiče E18 1600 MT/s. Toto umožní dosáhnout vyšších sekvenčních rychlostí zápisu a čtení. Aby je řadič zvládal, bude posílený jeho výkon. Jeho jádrem budou dvě jádra ARM Cortex-R5, ke kterým navíc ale bude mít navíc tři specializované jednotky CoXProcessor. Ty by měly akcelerovat náročné operace, jako jsou ECC algoritmy. Řadič E18 měl tři jádra Cortex-R5 bez akcelerátorů, tato nová kombinace by ale měla být díky akcelerátorům výkonnější (až dvojnásobně) a také lepší z hlediska spotřeby energie.

Phison také uvádí, že E26 bude používat novou technologii ECC algoritmů, má jít o LDPC páté generace, zatímco v Phisonu E16 a E18 byla čtvrtá. Nový algoritmus by zřejmě mohl zvýšit výkon, také ale asi bude účinnější v opravě chyb v signálu, takže prodlouží životnost TLC NAND (případně také QLC NAND, která ale asi ve výkonnějších SSD používána nebude).

Řadič také bude podporovat protokol NVMe 2.0, zatímco předchozí řadiče uměly jen NVMe 1.3, respektive 1.4. Má také splňovat bezpečnostní standard TCG Opal 2.0 a podporovat hardwarovou kryptografii AES 256, SHA 512 a RSA 4096. Také bude podporovat o něco rychlejší paměti v roli DRAM cache – ta může být tvořena až DDR4-3200 či LPDDR4-3200.

Parametry řadiče Phison E26 pro SSD s rozhraním PCIe 5.0 ×4 Parametry řadiče Phison E26 pro SSD s rozhraním PCIe 5.0 ×4 (Zdroj: Phison, via: ComputerBase)

Očekávaný výkon

Jaký výkon s tímto řadičem bude zhruba dosahován, naznačují parametry udávané Phisonem pro referenční implementace. Sekvenční čtení má být až 13 500 MB/s, což by mohlo nechávat další prostor ještě asi 1000 až 1500 MB/s, než se dosáhne limitů rozhraní PCI Expressu 5.0 ×4.

Tato první implementace tedy bude potenciál PCIe 5.0 docela dobře využívat, na rozdíl od první generace řadičů pro PCIe 4.0 (Phison E12 dosáhl jen 5000 MB/s, zatímco druhá generace E18 až 7400 MB/s). Je možné, že výkon řadiče E26 se podaří později ještě o něco zlepšit v dalších revizích a verzích firmwaru, případně v kombinaci s budoucími výkonnějšími čipy NAND.

Sekvenční zápis má být o něco nižší, až 12 000 MB/s, což je ovšem zápis do SLC cache. Trvale udržitelná rychlost zápisu asi bude dost záviset už na vlastnostech čipů NAND, každopádně ale bude nižší.

Zajímavé je, že hodně má narůst i výkon v náhodném přístupu. Náhodné čtení má jít nahoru o 50 %, zatímco pro E18 uváděla firma typicky 1 000 000 IOPS, u PCIe 5.0 modulů s Phisonem E26 už to má být 1 500 000 IOPS. Náhodný zápis by mohl být ještě rychlejší, ten má z milionu narůst rovnou na 2 000 000 IOPS (jde o údaj pro zápis do pseudoSLC cache).

Dostupnost SSD na podzim

Disky, respektive moduly M.2 a v některých případech také asi karty PCIe 5.0 ×4 s těmito řadiči by se měly v obchodech objevit na podzim. Tedy zhruba ve stejné době, jako procesory Ryzen 7000 a desky s čipsetem AM5.

Vypadá to, že první generace PCIe 5.0 SSD s řadičem Phison E26 bude založená obvykle na 3D NAND typu TLC od Micronu, který uvádělo jako partnera při vývoji i AMD. Později nicméně asi může dojít i na NAND od firmy Toshiba/Kioxia a dalších.

zabbix_tip

SSD s rozhraním PCIe 5.0 ×4 už podle AMD chystá slušná řada výrobců SSD s rozhraním PCIe 5.0 ×4 už podle AMD chystá slušná řada výrobců (Zdroj: AMD, via: TechPowerUp)

Micron možná také chystá i vlastní SSD s řadičem Phison E26, které by přišly na trh pod značkou Crucial. To by byla změna proti dřívějšku, kdy Micron používal vlastní řadiče, ale odvrácenou stránkou bylo, že třeba ve využití PCI Expressu 4.0 měl dlouhé zpoždění. Nyní by možná Micron či Crucial mohly díky použití Phisonů E26 vydat PCIe 5.0 SSD mnohem rychleji, hned v první vlně.

Zdroj: ComputerBase

Autor článku

Redaktor portálu Cnews.cz. Zaměřuje se na procesory, mobilní SoC, grafické karty, disky a další počítačový hardware. Profil autora →

'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »