디스크 버퍼
Disk buffer컴퓨터 스토리지에서 디스크 버퍼(흔히 모호하게 디스크 캐시 또는 캐시 버퍼라고 함)는 컴퓨터의 나머지 부분과 [1]저장에 사용되는 실제 하드 디스크 플래터 사이의 버퍼 역할을 하는 하드 디스크 드라이브(HDD)의 내장 메모리입니다.최신 하드 디스크 드라이브에는 8~256MiB의 메모리가 탑재되어 있으며 솔리드 스테이트 드라이브에는 최대 4GB의 캐시 [2]메모리가 탑재되어 있습니다.
1980년대 후반 이후 판매되는 거의 모든 디스크에는 마이크로 컨트롤러가 내장되어 있으며 ATA, 시리얼 ATA, SCSI 또는 파이버 채널 인터페이스가 있습니다.드라이브 회로에는 보통 소량의 메모리가 있어 디스크 플래터에 송수신되는 데이터를 저장하는 데 사용됩니다.
디스크 버퍼는 물리적으로 다른 것으로, operating system이 컴퓨터의 메인 메모리에 보관하는 페이지 캐시와는 다릅니다.디스크 버퍼는 하드 디스크 드라이브의 마이크로 컨트롤러에 의해 제어되고 페이지 캐시는 해당 디스크가 연결된 컴퓨터에 의해 제어됩니다.디스크 버퍼는 보통 8~256MiB로 매우 작으며 페이지 캐시는 일반적으로 사용되지 않는 메인 메모리입니다.페이지 캐시의 데이터는 여러 번 재사용되지만 디스크 버퍼의 데이터는 거의 [3]재사용되지 않습니다.이러한 의미에서 디스크 캐시와 캐시 버퍼라는 용어는 잘못된 이름이며, 임베디드 컨트롤러의 메모리를 디스크 버퍼라고 부르는 것이 더 적절합니다.
디스크 어레이 컨트롤러는 디스크 컨트롤러와 달리 보통 0.5~8GiB 정도의 캐시 메모리를 갖추고 있습니다.
사용하다
미리 읽기/뒤 읽기
디스크의 컨트롤러가 물리적 읽기를 실행하면 액추에이터가 읽기/쓰기 헤드를 올바른 실린더로(또는 그 근처로) 이동합니다.어느 정도 안정되고 미세 작동한 후 읽기 헤드가 트랙 데이터를 수집하기 시작하고, 플래터 회전으로 요청된 데이터가 올 때까지 기다리는 일만 남았습니다.
이 대기 시간 동안 미리 읽은 데이터는 요청되지 않지만 사용 가능하므로 일반적으로 나중에 요청할 경우에 대비하여 디스크 버퍼에 저장됩니다.
마찬가지로 실행할 다른 판독이 없어 헤드가 트랙을 유지할 수 있거나 다음 작동이 나중에 시작되어 제시간에 [4]완료될 수 있는 경우 요청된 데이터 뒤에서 데이터를 무료로 읽을 수 있습니다.
요청된 여러 개의 판독이 동일한 트랙(또는 나선형 트랙 근처)에 있는 경우, 이들 사이에 요청되지 않은 대부분의 데이터는 앞뒤로 읽힙니다.
속도 매칭
컴퓨터에 대한 디스크 I/O 인터페이스의 속도는 하드 디스크 플래터에 대한 비트 전송 속도와 거의 일치하지 않습니다.디스크 버퍼는 I/O 인터페이스와 디스크 읽기/쓰기 헤드가 모두 최대 속도로 작동할 수 있도록 사용됩니다.
쓰기 가속
디스크의 내장 마이크로 컨트롤러는 쓰기 데이터를 수신한 직후에 데이터가 플래터에 실제로 기록되기 전에 디스크 쓰기가 완료되었음을 메인 컴퓨터에 알릴 수 있습니다.이 초기 신호는 데이터가 실제로 작성되지 않았더라도 메인 컴퓨터가 계속 작동할 수 있도록 합니다.자기 미디어에 데이터가 영구적으로 고정되기 전에 전원이 차단되면 디스크 버퍼에서 데이터가 손실되고 디스크 상의 파일 시스템이 일관되지 않은 상태로 유지될 수 있기 때문에 이는 다소 위험할 수 있습니다.
일부 디스크에서는 새로 도착한 요청에 의해 쓰기가 무기한 연기될 수 있기 때문에 쓰기 완료 시그널링과 데이터 수정 사이의 이 취약한 기간이 임의로 길어질 수 있습니다.이 때문에, 기입 액셀러레이션의 사용에 대해서는 논란이 될 수 있습니다.그러나 데이터 캐싱에 배터리 백업 메모리 시스템을 사용하면 일관성을 유지할 수 있습니다. 단, 이는 일반적으로 하이엔드 RAID 컨트롤러에서만 볼 수 있습니다.
또는 데이터의 무결성이 쓰기 성능보다 더 중요하다고 생각될 때 캐싱을 끄기만 하면 됩니다.또 다른 옵션은 데이터를 신중하게 관리되는 순서로 디스크에 전송하고 적절한 장소에서 "캐시 플러시" 명령을 발행하는 것입니다.이 명령어는 보통 쓰기 장벽 구현이라고 불립니다.
명령어 큐잉
새로운 SATA 및 대부분의 SCSI 디스크는 "명령 큐잉"을 통해 하나의 명령이 작동하는 동안 여러 명령을 수신할 수 있습니다(NCQ 및 TCQ 참조).이러한 명령은 완료될 때까지 디스크의 내장 컨트롤러에 저장됩니다.한 가지 이점은 디스크의 동일한 영역에 영향을 미치는 명령어를 그룹화할 수 있도록 명령어 순서를 변경할 수 있다는 것입니다.읽기가 대기 중인 쓰기 대상의 데이터를 참조하는 경우 쓰기 예정 데이터가 반환됩니다.
NCQ는 보통 쓰기 버퍼링 활성화와 함께 사용됩니다.Force Unit Access(FUA; 강제 유닛 액세스) 비트를 0으로 설정하고 쓰기 버퍼링을 활성화한 읽기/쓰기 FPDMA 명령의 경우, 운영체제는 데이터가 미디어에 물리적으로 쓰기 전에 쓰기 작업이 완료되었음을 확인할 수 있습니다.FUA 비트가 1로 설정되어 기입 버퍼링이 유효하게 되어 있는 경우, 기입 조작은 데이터가 미디어에 물리적으로 기입된 후에만 반환됩니다.
호스트의 캐시 제어
캐시 플러시
펌웨어 결함으로 인해 부족 상태가 발생하지 않고 캐시된 쓰기가 강제로 디스크 플래터에 적용되기 전에 디스크 전원이 중단되지 않는 한 디스크 장치의 쓰기 캐시에서 받아들여진 데이터는 결국 디스크 플래터에 기록됩니다.쓰기 캐시를 제어하기 위해 ATA 사양에는 FLUSH CASHE(E7h) 및 FLUSH CASH EXT(EAH) 명령이 포함되어 있습니다.이러한 명령어를 실행하면 디스크는 캐시에서 데이터 쓰기를 완료하고 쓰기 캐시의 데이터가 디스크 미디어에 쓰이면 디스크는 양호한 상태를 반환합니다.또한 Soft reset 명령 또는 Standby([5]Immediate) 명령을 발행하여 적어도 일부 디스크에 대해 캐시 플러시를 시작할 수 있습니다.
필수 캐시 플러시는 Linux에서 저널 커밋 [6]블록에 대한 Force Unit Access write 명령과 함께 일부 파일 시스템(ext4)에서 쓰기 장벽을 구현하기 위해 사용됩니다.
Force Unit Access(FUA)
Force Unit Access(FUA; 강제 유닛 액세스)는 I/O 쓰기 명령 옵션이며, 쓰기 데이터를 안정적인 스토리지로 강제적으로 전송합니다.[7]FUA 쓰기 명령어(WRITE DMA FUA EXT – 3Dh, WRITE DMA QUED FUA EXT – 3Eh, WRITE MULTLE FUA EXT – CEh)는 FUA를 사용하지 않는 대응 명령어와 달리 디바이스에서 쓰기 캐시가 활성화되었는지 여부에 관계없이 미디어에 직접 데이터를 씁니다.FUA write 명령어는 데이터가 미디어에 기록될 때까지 반환되지 않습니다.따라서 FUA write 명령에 의해 작성된 데이터는 FLUSH CASH [8][9]명령어를 발행하기 전에 디바이스 전원이 꺼진 경우에도 영구 미디어에 저장됩니다.
FUA는 SCSI 명령어세트에 등장하여 나중에 NCQ를 탑재한SATA에 채택되었습니다.FUA는 ATA FLUSH CASHE 계열 [9][10]명령과 같이 전체 디스크 캐시를 플러시하는 명령과 비교하여 단일 쓰기 작업을 안정적인 미디어로 강제할 수 있으므로 전체적인 성능에 미치는 영향이 작습니다.
Windows(Vista 이상)는 트랜잭션 NTFS의 일부로 FUA를 지원하지만 [11]FUA가 일반적으로 지원되는 SCSI 또는 파이버 채널 디스크에만 해당됩니다.FUA write 명령을 지원하는 SATA 드라이브가 실제로 명령을 준수하고 지시에 [citation needed]따라 디스크 플래터에 데이터를 쓸지는 알려지지 않았습니다. 따라서 Windows 8 및 Windows Server 2012는 특정 쓰기 작업 [12]후 디스크 쓰기 캐시를 플러시하는 명령을 보냅니다.
Linux 커널은 2007년경 NCQ를 지원받았지만 SATA FUA는 커널의 FUA 지원이 [13][14]테스트된 2012년에 발견된 퇴보 때문에 디폴트로 비활성화 상태로 남아 있습니다.Linux 커널은 블록 계층 [15]수준에서 FUA를 지원합니다.
「 」를 참조해 주세요.
레퍼런스
- ^ Mark Kyrnin. "What to Look for in a Hard Drive". about.com. Retrieved 2014-12-20.
A drive's buffer is an amount of RAM on the drive to store frequently accessed data from the drive.
- ^ "Samsung SSD 860 PRO Samsung V-NAND Consumer SSD Samsung Semiconductor Global Website". Samsung. Archived from the original on April 6, 2018. Retrieved July 16, 2018.
CACHE MEMORY: 4 GB Low Power DDR4 (4,096 GB)
- ^ Charles M. Kozierok (2001-04-17). "Internal Cache (Buffer) Size". pcguide.com. Retrieved 2014-12-20.
- ^ 데이터 센터용 디스크
- ^ Hitachi (2006). Deskstar 7K80 Disk Drive Specification, 4th Edition (Revision 1.6)(12 September 2006) Final. Hitachi Global Storage Technologies. pp. 99, 130, 131.
- ^ Christoph Hellwig; Theodore Ts'o. "Does ext4 send FUA to flush disk cache". spinics.net. Retrieved 2014-03-18.
- ^ Jonathan Corbet (2010-08-18). "The end of block barriers". LWN.net. Retrieved 2015-06-27.
- ^ "Information technology - AT Attachment 8 - ATA/ATAPI Command Set (ATA8-ACS)" (PDF). T13/1699-D, revision 6a, September 6, 2008. American National Standards Institute, Inc. Archived from the original (PDF) on 6 August 2020. Retrieved 14 December 2020.
- ^ a b Gregory Smith (2010). PostgreSQL 9.0: High Performance. Packt Publishing Ltd. p. 78. ISBN 978-1-84951-031-8.
- ^ Bruce Jacob; Spencer Ng; David Wang (2010). Memory Systems: Cache, DRAM, Disk. Morgan Kaufmann. p. 734. ISBN 978-0-08-055384-9.
- ^ "Deploying Transactional NTFS (Windows)". Msdn.microsoft.com. 2013-12-05. Retrieved 2014-01-24.
- ^ "Forced Unit Access Working Hard In IT". Workinghardinit.wordpress.com. 2012-10-12. Retrieved 2014-01-24.
- ^ "Storage related regression in linux-next 20120824". 2012-09-12. Retrieved 2015-06-27.
- ^ "Revert "libata: enable SATA disk fua detection on default"". 2012-09-13. Retrieved 2015-06-27.
- ^ "Linux kernel documentation: Documentation/block/writeback_cache_control.txt". kernel.org. 2013-08-12. Retrieved 2014-01-24.