development

Ceph RGW Internals: Cache Coherence & Bucket Life Cycles

RGW Cache Coherence Why RGW have a control pool? We will try to understand its use case and purpose in RGW for cache synchronization. RGWRados::init_watch() Creates watcher objects in RGW control pool $ sudo rados ls -p .in-abc-1.rgw.control notify.1 notify.6 notify.3 notify.7 notify.2 notify.4 notify.5 notify.0 The common assumption is that these objects are watched […]

Read more
development

Design: Brave Device Sync

The Brave Browser offers a sync facility that keeps bookmarks and browsing history across Brave browser installations. So your data from phone, laptop or iPad could all become one. All at the same time respecting your privacy. The current design of sync uses a device ID to identify a client. A client calls Brave server […]

Read more
development

What is TCP BBR?

What is BBR A congestion control based on measuring the two parameters that characterize a path: bottleneck bandwidth and round-trip propagation time, or BBR. Why Use BBR? Better congestion control algorithm in TCP. No need to change the client. More effective in a high packet loss network! The classic TCP uses binary exponential backoff and […]

Read more
development

Understanding Ruby Symbols

Ruby is an interpreted language. It is dynamically typed and uses a new memory for a variable. A variable has a name and a value. Symbols are an optimized variable that holds single instance of memory. It is good for variables that assume the same values across the program such as hash table keys. h […]

Read more
development

Why Docker is a Long Term Future for Platform?

What make Docker so popular and long-lasting? Container is essentially OS level virtualization. Each application gets illusion of its own OS, having almost absolute control over it. Another advantage is that host OS knows about the container processes and hence can share its resources among hosted containers. The concept of containers was started by FreeBSD, […]

Read more
Linux internals

Linux Memory Management Tricks

Tips to Improve Dynamic Memory Performance Instead of using memset() to initialize malloc()’ed memory, use calloc(). Because when you call memset(), VM system has to map the pages in to memory in order to zero initialize them. It’s very expensive and wasteful if you don’t intend to use the pages right away. calloc() reserves the […]

Read more
development

One More Reason to Avoid Ruby Language

Ruby is type unsafe language but it goes a step further and avoids checking dynamically too. Consider this code x = :abc if x == ‘abc’ puts “Symbol and String are two different classes” else puts x.class, ‘abc’.class end # puts can print a symbol and string alike. puts x My Complaints I’m new to […]

Read more