Abstract
Flash memory has physical characteristics different from hard disk where two costs of a read and write operations differ each other and an overwrite on flash memory is impossible to be done. In order to solve these restrictions with software, storage systems equipped with flash memory deploy FTL(Flash Translation Layer) software. Several FTL algorithms have been suggested so far and most of them prefer sequential write pattern to random write pattern. In this paper, we provide a new technique to efficiently store and maintain the B-tree index on flash memory. The operations like inserts, deletes, updates of keys for the B-tree generate random writes rather than sequential writes on flash memory, leading to inefficiency to the B-tree maintenance. In our technique, we convert random writes generated by the B-tree into sequential writes and then store them to the write-buffer on flash memory. If the buffer is full later, some sequential writes in the buffer will be issued to FTL. Our diverse experimental results show that our technique outperforms the existing ones with respect to the I/O cost of flash memory.
플래시 메모리는 하드디스크와 다른 물리적 특성을 가진다. 대표적으로 읽기연산과 쓰기연산의 비용이 다르고, 덮어쓰기(overwrite)가 불가능하여 소거연산(erase)이 선행되어야 한다. 이러한 물리적 제약을 소프트웨어적으로 보완해주기 위해서, 플래시 메모리를 사용하는 시스템은 대부분 플래시 변환 계층(Flash Translation Layer)을 사용한다. 현재까지 효율적인 FTL 기법들이 제안되었으며, 이들은 임의쓰기(random writes) 패턴보다 순차쓰기(sequential writes) 패턴에 훨씬 더 효율적으로 동작한단. 본 논문에서는 플래시 메모리 상에서 B-트리 인덱스를 효율적으로 생성, 유지하기 위한 새로운 기법을 제안한다. B-트리에 키의 삽입, 삭제, 수정 등치 연산을 수행하면 FTL에 비효율적인 임의쓰기 패턴을 많이 발생시키며, 결국 B-트리 인덱스 유지 비용이 커지게 된다. 제안하는 기법에서는 B-트리에서 발생되는 임의쓰기 패턴을 먼저 플래시 메모리의 쓰기 버퍼에 추가쓰기(append writes) 패턴으로 변환하여 저장하고, 추후 이를 FTL에 효율적인 순차쓰기 패턴으로 FTL에 전달한다. 다양한 실험을 통해 제안하는 기법이 기존의 기법보다 플래시 메모리 I/O 비용 측면에서 우수하다는 것을 보인다.