2. • Object Storage Server
• S3 Compatible
• Open Source (github.com/minio/minio)
• Founder: Anand Babu Periasamy
◦ Formerly GlusterFS
▪ Distributed File System
▪ Now part of Red Hat
MINIO
BACKGROUND
9. PLAN 9/
GOLANG ASSEMBLY
• ‘Pseudo’ assembly language
◦ Generalized instructions like MOV, ADD, CMP
◦ Actual instructions are generated platform specifically (obviously)
◦ Mostly this translation is self-explanatory/logical, sometimes it is not
◦ Some architecture aspects shine through
• Data flows from left to right
◦ Eg: MOV R1, R2 // R2 = R1
• Some ‘pseudo’ registers
◦ FP, SP, PC, SB
• Not all instructions available
◦ However BYTE/WORD/LONG/QUAD constructs for inserting opcodes directly
10. PLAN 9/
GOLANG ASSEMBLY
• Benefits
◦ Fast compilation
◦ Enhanced execution speed
◦ No need for `cgo` dependency
◦ Avoid runtime call stack saving overhead etc.
• Allows to take advantage of SIMD (Intel) or NEON (ARM)
capabilities
◦ Single Instruction Multiple Data
• You are (or will be) a bit on your own…
◦ Learn / Take a look at existing code (grep for *.s in go/src/)
◦ Or see minio repos
• Full details, eg for ARM:
src/cmd/internal/obj/arm/a.out.go
11. ASM2PLAN9S: GENERATE BYTE
SEQUENCES FOR GO ASSEMBLY
• Developed as part of blake2b-simd
• Uses YASM behind the scenes
• Support for use within defines
• Works nicely together with asmfmt
• See github.com/minio/asm2plan9s
• Planning ARM support
// VPADDQ XMM0,XMM1,XMM8
$ asm2plan9s example.s
LONG $0xd471c1c4; BYTE $0xc0 // VPADDQ XMM0,XMM1,XMM8
12. ACCELERATING BLAKE2B
USING SIMD
• BLAKE2b hash
◦ SHA3 competition contender
◦ Characteristics: speed, simplicity, and security
◦ Optimized for 64-bit platforms (BLAKE2b)
• github.com/minio/blake2b-simd
◦ SIMD accelerated pure Go implementation using Go Assembly
◦ Three flavors: AVX2, AVX and SSE
◦ Speed up over pure go (non-assembly): 3.94x
• For bitrot detection (minio XL version)
18. MINIO GATEWAY
FEATURES
• Serve as S3 compatible proxy for different back-ends
◦ Azure / GCS / S3
◦ Others to follow (plugin model?)
• Support full S3 API
◦ Multi-part uploads
◦ Any SDK (Minio, AWS, etc.)
◦ Any language
• Transparent for client application
• Minio browser for gateway
19. MULTI-CLOUD
STRATEGY
• Single API to access any object
• Universal access via mc (minio client)
• Deployment
◦ Multiple gateways on single server
◦ Multiple servers each with own gateway
• Caching
◦ Cache objects on local disk
◦ Faster delivery / create your own CDN
◦ Allow savings on eg bandwidth costs