Category Archives: Uncategorized

[Computer Systems] Storage

Storage Area Network (SAN): 서버 용량이 부족할 때 디스크를 물리적으로 추가하는 불편함을 해소하기 위해 SAN 고안. 스토리지를 네트워크에 연결해서 logical volume을 형성. 사용자는 LUN (Logical Unit Number)라는 고유번호로 디스크 드라이브에 연결. SAN Switch 필요. Block 단위로 저장.

SAN Storage Protocol: iSCSI, Fibre Channel, iSER (iSCSI Extensions for RDMA)
– Fibre Channel: Gigabit speed (up to 128Gbps), Simpler than TCP/IP, Require Host Bus Adapter
– FCoE: Fiber Channel Frames over Ethernet. Can be used over TCP/IP infrastructures.

SAN Application: Database, Virtualized Environment, …

Network Attached Storage (NAS): 이더넷을 통해 연결. 설치와 유지관리 용이, 하지만 네트워크 자원을 공유하기 때문에 대역폭에 한계. File 단위로 저장.

NAS Storage Protocol: NFS, SMB/CIFS, FTP, HTTP, AFP
– NFS: First Distributed File System.
– SMB/CIFS: Allows users to reach remote locations. CIFS is MS version of SMB
– RDMA: Do not pass CPU for memory access. Reduced delay.
– Infiniband: Supports RDMA, little delay, and up to 50Gbps bandwidth…

NAS Application: File Sharing, Virtualized Environment, …

Scale-up vs Scale-out: Scale-out is usually better for 확장성, 비용, 장애, but 아키텍처에 대한 높은 이해도 요구, 소프트웨어 가격이 비쌈, 성능 (하이엔드에 비해 부족), 케이블링 복잡. Online Analytical Programming (OLAP) 에서는 Scale-out이 더 효율적, Online Transaction Processing (OLTP) 에서는 Scale-up이 적합


데이터 티어링…

RAID… Erasure Coding…

[LLVM] IRBuilder

IRBuilder helps users manipulate LLVM IR basic blocks. For example, add or remove instructions. So this could be used to build a frontend of a language or build target independent optimizers that manipulate LLVM IRs.

First, we can make Module/Function using the following code:

Module* makeLLVMModule() {
    // Module construction
    Module* mod = new Module("test", getGlobalContext());

    // returns Constant* because it will return a cast of the
    // existing function if the function already existed with 
    // a different prototype.
    Constant* c = mod->getOrInsertFunction("mul_add",

    Function* mul_add = cast<Function>(c);
    // (not necessary) set names to arguments
    Function::arg_iterator args = mul_add->arg_begin();
    Value* x = args++;
    Value* y = args++;
    Value* z = args++;

After creating blocks, we build BasicBlock to contain the function, and use IRBuilder to create and append instructions to the end of a block.

    BasicBlock* block = BasicBlock::Create(getGlobalContext(), "entry", mul_add);
    IRBuilder<> builder(block);
    Value* tmp = builder.CreateBinOp(Instruction::Mul,
                                     x, y, "tmp");
    Value* tmp2 = builder.CreateBinOp(Instruction::Add,
                                      tmp, z, "tmp2");
    return mod;

To build, we need some compiler flags to link with LLVM. Those are done using `llvm-config –cxxflags –ldflags –libs core`

We could actually have multiple BasicBlocks for a function which just requires extra work of instantiating more BasicBlocks and connecting them with control flow using branch instructions.


LLVM Tutorial: (first two are helpful for this)

[Memory] 3D Memory (TSV, HMC)

Hybrid Memory Cube (HMC) is a way of vertically stacking DRAM and connecting these using TSV.

  • HMC DRAM can have around 3x to 5x higher bandwidth compared to the current DRAM
  • It requires less area
  • ARM, HP, Xilinx, Altera are in the consortium,
  • Originally proposed by Micron

HMC 1.0: 10-15Gbps bandwidth, 15x faster than DDR3, 70% less energy, 90% less area

Logic chip under the stacked DRAMs control the schedule, and also includes serial communication interface between the memory and the CPU & GPU.




  • Submit F-1 Letter Request
  • Fill the W-7 Form
    • Korea has tax treaty with US (Article 21)
  • Take copy of Passport, Visa, I-20, I-94

ISPO will process the documents, send it to IRS after about a week (I will receive an e-mail). IRS will review my things and I will be receiving my ITIN after 6 weeks.



[Information] Types of lossless compression

Entropy based

  • Run Length Encoding : look for same symbol recurring consecutively
  • Huffman (Adaptive, Static) : Sorted symbols to add up the two least frequencies to be coded 0, 1
  • Shannon-Fano : Sorted symbols with total frequency approximately half to be coded 0, 1

Dictionary based

  • LZ77 : Search into the input sequence within a sliding window for longest match in buffer.
  • LZ78 : LZ77 + Inserts one- or multi-character, non- overlapping.
  • LZW : LZ78 + Dictionary indexed by codes.