솔리드 스테이트 드라이브는 디스크 IO 병목 현상에 대한 걱정을 멈출 만큼 충분합니까?

StackOverflow https://stackoverflow.com/questions/1144250

문제

HD에서 쓰고 읽는 것만으로 프로세스 간 통신을 수행하는 개념 증명 프로그램이 있습니다.응, 나도 알아 정말 느린;하지만 그것은 일을 시작하고 실행하는 가장 쉬운 방법이었습니다.나는 항상 돌아와서 RAM에서 모든 IPC(프로세스 간 통신)를 수행하는 메커니즘으로 코드의 해당 부분을 교체할 계획이었습니다.

솔리드 스테이트 디스크의 등장으로 병목 현상이 무시할 수 있을 것이라고 생각하십니까?

노트:FORTRAN으로 작성된 일부 베어 메탈 숫자 처리 라이브러리를 호출하는 C#으로 작성된 서버 소프트웨어입니다.

도움이 되었습니까?

해결책

짧은 대답은 아마도 아니오 일 것입니다. Jim Gray라는 유명한 연구원이 스토리지와 성능에 대해 이야기했습니다. 이 위대한 비유. 뇌를 프로세서로 가정하면 레지스터에 액세스하는 데는 뇌에있는 정보와 거의 동일한 1 클럭 진드기 (왼쪽의 숫자)가 필요합니다. 메모리에 액세스하는 데 100 개의 시계 진드기가 필요하므로 거주하는 도시 어딘가에 데이터를 얻는 것과 거의 동일합니다. 표준 디스크에 액세스하려면 대략 10^6 진드기가 필요합니다. 이는 명왕성에있는 데이터와 동일합니다. 솔리드 스테이트는 어디에 맞습니까? 현재 SSD 기술은 귀하가 요청 한 사람에 따라 10^4-10^5 사이입니다. 그것들은 더 빠른 순서가 될 수 있지만, 메모리 읽기와 디스크의 독서 사이에는 여전히 엄청난 간격이 있습니다. 그렇기 때문에 SSD가 빨라지는 한 빨리 디스크보다 훨씬 느리게 (적어도 가까운 미래에)가 여전히 느리게 될 것입니다.

다른 팁

병목 현상을 알게 될 것이라고 생각합니다 방금 움직였습니다. 우리는 더 높은 처리량을 기대할 때 더 높은 수요를 가진 프로그램을 작성합니다.

이것은 병목 현상을 버스, 캐시 및 읽기/쓰기 메커니즘 이외의 부품으로 밀어 넣습니다 (어쨌든 체인에서 마지막).

디스크 I/O에 의해 구속되지 않은 프로세스를 사용하면 모든 프로세스 지침과 마찬가지로 읽기/쓰기 지침의 양을 제한하는 스케줄러에 의해 구속 될 수 있다고 생각합니다.

무한한 I/O 속도를 최대한 활용하려면 실시간 응답과 캐시 등의 매우 공격적인 관리가 필요합니다.

언제 디스크가 더 빨라집니다 그러면 그렇습니다 램과 프로세서 그리고 장치에 대한 수요. 병목 현상은 동일하고 워크로드가 점점 커집니다.

I/O 바운드 응용 프로그램이 가장 작은 비트로 작성되는 방식을 바꿀 것이라고는 믿지 않습니다. 더 빠른 프로세서를 가지고 있다고해서 사람들이 정렬 알고리즘으로 Bubblesort를 선택하게하지는 않았습니다.

외부 메모리 계층은 컴퓨팅의 고유 한 문제입니다.

Joel on Software에는 기사 솔리드 스테이트로 업그레이드한 경험에 대해 설명합니다.당신이 겪고 있는 문제와 정확히 똑같지는 않지만 제가 시사하는 바는 다음과 같습니다.

솔리드 스테이트 드라이브는 I/O 바인딩 작업 속도를 크게 높일 수 있지만 컴파일과 같은 많은 작업은 여전히 ​​CPU 바인딩되어 있습니다.

나는 솔리드 스테이트 드라이브를 가지고 있으며, 이것은 병목 현상으로 I/O를 제거하지 않습니다. SSD는 훌륭합니다 저것 멋진.

실제로 시스템의 IPC 프리미티브를 마스터하거나 TCP 위에 무언가를 구축하는 것은 어렵지 않습니다. 그러나 디스크를 고수하고 더 빨리 만들고 싶다면 Ramdisk 또는 TMPFS 트릭을 할 수 있습니다.

현재 SSD는 디스크 교체로 설계되었습니다. SATA 컨트롤러에서 파일 시스템 드라이버에 이르기까지 모든 레이어는이를 스토리지로 취급합니다.

이것은 기본 기술인 NAND Flash의 문제가 아닙니다. NAND Flash가 직접 메모리에 매핑되고 이름이 지정된 파일을 기반으로 파일 시스템 대신 회전하는 로그 스토리지 시스템을 사용하면 매우 빠릅니다. 근본적인 문제는 NAND Flash가 블록 업데이트에서만 잘 수행된다는 것입니다. 파일 메타 데이터 업데이트로 인해 고가의 읽기 모듈식이 낭비 작업이 발생합니다. 또한 NAND 블록은 일반적인 디스크 블록보다 훨씬 큽니다. 이는 성능에도 도움이되지 않습니다.

이러한 이유로 SSD의 미래는 더 나은 캐시 된 SSD가 될 것입니다. DRAM은 열악한 매핑의 오버 헤드를 숨기고 작은 슈퍼 캡 백업을 통해 SSD가 더 빨리 쓰기를 커밋 할 수 있습니다.

솔리드 스테이트 드라이브는 IO 처리량을 한 가지 중요한 개선으로 만듭니다. 이는 솔리드 스테이트 디스크에서 블록 지역이 더 적은 회전 미디어의 문제. 이는 고성능 IO 바운드 애플리케이션이 압축을 통해 단일 블록으로 데이터를 유지하는 것과 같은 다른 방식으로 IO를 최적화하는 구조로 액세스하는 구조에서 액세스하는 구조에서 초점을 이동할 수 있음을 의미합니다. 즉, 솔리드 스테이트 드라이브조차도 선형 액세스 패턴의 혜택은 응용 프로그램이 요청하기 전에 후속 블록을 읽기 캐시로 프리 페치 할 수 있기 때문에 혜택을받습니다.

솔리드 스테이트 디스크에서 눈에 띄는 회귀는 쓰기가 읽기보다 오래 걸리지 만 둘 다 여전히 회전 드라이브보다 여전히 빠르며, 새로운 고급 고형 상태 디스크로 차이가 좁아지고 있다는 것입니다.

아뇨, 슬프게도. SSD 드라이브는 매우 빠른 읽기와 동기화 시간이 없지만 글은 정상적인 하드 드라이브만큼 느립니다. 이것은 당신이 대부분의 시간을 읽고 싶다는 것을 의미합니다. 그러나 드라이브에 글을 쓰면 SSD 드라이브가 한 번에 전체 블록 만 쓸 수 있기 때문에 같은 지점에 최대한 많이 써야합니다.

디스크 대신 램 드라이브를 사용하는 것은 어떻습니까? 당신은 아무것도 다시 쓸 필요가 없습니다. 다른 파일 시스템을 가리 키십시오. Windows와 Linux에는 둘 다 있습니다. 기계에 많은 메모리가 있는지 확인하고 처리 할 수있는 충분한 공간이있는 가상 디스크를 만듭니다. 네트워크 탭에서 여러 프로토콜을 듣는 시스템을 위해이 작업을 수행했습니다. 나는 어떤 패킷을 얻을 것인지 결코 새로운 적이 없으며 메모리에 유지하기에는 너무 많은 데이터가있었습니다. 나는 그것을 램 드라이브에 쓸 것이고 무언가가 완료되면 그것을 움직여 다른 프로세스가 램 드라이브에서 물리적 디스크로 꺼내게 할 것입니다. 이런 식으로 바쁜 서버 클래스 네트워크 카드를 따라갈 수있었습니다. 행운을 빕니다!

여기에 명심해야 할 것 :

통신에 자주 메시지가 포함되고 동일한 시스템에 있으면 Windows가 실제로 데이터를 처음에 작성하지 않기 때문에 매우 우수한 성능을 얻을 수 있습니다.

나는 그것을 한 번만 의지하고 이것을 발견해야했다-드라이브 라이트는 아니다 데이터가 계속 서면으로 작성되는 한 전혀 오십시오.

그러나 일을 시작하고 달리는 가장 쉬운 방법이었습니다. 나는 보통 CPU가 수백만 번 헛된 생각을하는 것보다 당신의 머리로 한 번 좋은 생각을하는 것이 훨씬 저렴하다는 것을 알았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top