Chris Cooper: RelEng & RelOps Weekly highlights - April 18, 2016 |
Improve Release Pipeline:
Varun began work on improving Balrog’s backend to make multifile responses (such as GMP) easier to understand and configure. Historically it has been hard for releng to enlist much help from the community due to the access restrictions inherent in our systems. Kudos to Ben for finding suitable community projects in the Balrog space, and then more importantly, finding the time to mentor Varun and others through the work.
Improve CI Pipeline:
With build promotion well underway for the upcoming Firefox 46 release, releng is switching gears and jumping into the TaskCluster migration with both feet. Kim and Mihai will be working full-time on migration efforts, and many others within releng have smaller roles. There is still a lot of work to do just to migrate all existing Linux workloads into TaskCluster, and that will be our focus for the next 3 months.
Release:
We started doing the uplifts for the Firefox 46 release cycle late last week. Release candidates builds should be starting soon. As mentioned above, this is the first non-beta release of Firefox to use the new build promotion process.
Last week, we shipped Firefox and Fennec 45.0.2 and 46.0b10, Firefox 45.0.2esr and Thunderbird 45.0. For further details, check out the release notes here:
See you next week!
|
Air Mozilla: Mozilla Weekly Project Meeting, 18 Apr 2016 |
The Monday Project Meeting
https://air.mozilla.org/mozilla-weekly-project-meeting-20160418/
|
Nathan Froyd: rr talk post-mortem |
On Wednesday last week, I gave an invited talk on rr to a group of interested students and faculty at Rose-Hulman. The slides I used are available, though I doubt they make a lot of sense without the talk itself to go with them. Things I was pleased with:
rr
helped guide people through the presentation. At least, it didn’t look as though many people were nodding off or completely confused, despite rr
being a complex systems-heavy program.Most of the above I credit to practicing the talk repeatedly. I forget where I heard it, but a rule of thumb I use for presentations is 10 hours of prep time minimum (!) for every 1 hour of talk time. The prep time always winds up helping: improving the material, refining the presentation, and boosting my confidence giving the presentation. Despite all that practice, opportunities for improvement remain:
rr
can start and stop threads at will, for instance, might seem mysterious. A slide or two on the differences between how rr record
works vs. how rr replay
works and interacts with GDB would have been clarifying as well.rr
can run forwards or backwards in your program got short shrift and should have been explained in a little more detail. (Diagrams again…) Perhaps not surprisingly, the checkpointing material got added later during the talk prep and therefore didn’t get practiced as much.rr
‘s capabilities, it wasn’t very polished or impressive. Part of that is due to rr
mysteriously deciding to cease working on my virtual machine, but part of that was just my own laziness and assuming things would work out just fine at the actual talk. Always practice!https://blog.mozilla.org/nfroyd/2016/04/18/rr-talk-post-mortem/
|
Allen Wirfs-Brock: Slide Bit: From Chaos |
At the beginning of a new computing era, it’s fairly easy to sketch a long-term vision of the era. All it takes is knowledge of current technical trajectories and a bit of imagination. But it’s impossible to predict any of the essential details of how it will actually play out.
Technical, business, and social innovation is rampant in the early years of a new era. Chaotic interactions drive the churn of innovation. The winners that will emerge from this churn are unpredictable. Serendipity is as much a factor as merit. But eventually, the stable pillars of the new era will emerge from the chaos. There are no guarantees of success, but for innovators right now is your best opportunity for impacting the ultimate form of the Ambient Computing Era.
|
Kartikaya Gupta: Using multiple keyboards |
When typing on a laptop keyboard, I find that my posture tends to get very closed and hunched. To fix this I resurrected an old low-tech solution I had for this problem: using two keyboards. Simply plug in an external USB keyboard, and use one keyboard for each hand. It's like a split keyboard, but better, because you can position it wherever you want to get a posture that's comfortable for you.
I used to do this on a Windows machine back when I was working at RIM and it worked great. Recently I tried to do it on my Mac laptop, but ran into the problem where the modifier state from one keyboard didn't apply to the other keyboard. So holding shift on one keyboard and T on the other wouldn't produce an uppercase T. This was quite annoying, and it seems to be an OS-level thing. After some googling I found Karabiner which solves this problem. Well, really it appears to be a more general keyboard customization tool, but the default configuration also combines keys across keyboards which is exactly what I wanted. \o/
Of course, changing your posture won't magically fix everything - moving around regularly is still the best way to go, but for me personally, this helps a bit :)
|
QMO: Firefox 47.0 Aurora Testday Results |
Hello Mozillians!
As you may already know, last Friday – April 15th – we held a new successful Testday event, for Firefox 47.0 Aurora.
Results:
We’d like to take this opportunity to say a big THANK YOU to Teodora Vermesan, Chandrakant Dhutadmal, gaby2300, Moin Shaikh, Juan David Pati~no, Luis Fernandez, Vignesh Kumar, Ilse Mac'ias, Iryna Thompson and to our amazing Bangladesh QA Community: Hossain Al Ikram, Rezaul Huque Nayeem, Azmina Akter Papeya, Saheda Reza Antora, Raihan Ali, Khalid Syfullah Zaman, Sajedul Islam, Samad Talukdar, John Sujoy, Saddam Hossain, Asiful Kabir Heemel, Roman Syed, Md. Tanvir Ahmed, Md Rakibul Islam, Anik Roy, Kazi Nuzhat Tasnem, Sauradeep Dutta, Kazi Sakib Ahmad, Maruf Rahman, Shanewas Niloy, Tanvir Rahman, Tazin Ahmed, Mohammed Jawad Ibne Ishaque, A.B.M.Nashrif , Fahim, Mohammad Maruf Islam, akash, Zayed News, Forhad Hossain, Md.Tarikul Islam Oashi, Sajal Ahmed, Fahmida Noor, Mubina Rahaman Jerin and Md.Faysal Alam Riyad for getting involved in this event and making Firefox as best as it could be.
Also, many thanks to all our active moderators.
Keep an eye on QMO for upcoming events!
|
Fr'ed'eric Harper: The Day I Wanted to Kill Myself |
My semicolon tattoo
I was 4500 kilometers away from home when I learned that the woman of my life, the one I spent one fourth of my young existence with, was leaving me. That was, the end of my world! Like if it wasn’t enough to lose the person you share your life with, some people I considered friends ran away from me: sad Fred is no fun, and obviously, when there is a separation, people feel the needs to “take a side”. Right before, I realized that the company I was working for, wasn’t the right one for me, so I decided to resign: I wasn’t able to deliver as I should taking this in the equation with everything else. Of course, I had no savings and it’s at that exact moment that we had water damage in our building and that I had to pay out a couple of thousands for the renovation. During that period, I sank deeply and very quickly: someone calls Depression knocked at my door.
For months, I was going deeper in the rabbit hole. Everything was hard to achieve, and uninteresting: even taking my shower was a real exploit. I was staying home, doing nothing except eating shitty food, getting weight and watching Netflix. I’ve always considered myself a social beast, but even just seeing my best friend was painful and unpleasant. I didn’t want to talk to people at all. I didn’t want to see people. I didn’t need help even if I felt I was a failure. My life was a failure. During that period, my “happiest” moments were when I was at a bar, drinking: alcohol was making me numb, making me forget that I was swimming in the dark all day long. Obviously, that tasty nectar called beer wasn’t helping me at all: it was taking me deeper than I was and as any stupid human, I was trying to get back my love, in the most ineffective way ever, to stay polite with myself. On top of that, even with good will, everyone was giving me shitty advices (side note: in that situation, the only thing you should do is being there for the other – you don’t know what the person is going thru and please, don’t give advices, just be there). That piece of shit that I was seeing in the mirror couldn’t have been me: I was strong. I’ve always done everything in my life to be happy: why I was not able to make the necessary changes to get back on my feet? Something was pulling me to the bottom and was putting weight on my shoulder. I wasn’t happy anymore, my life wasn’t valuable anymore. Maybe the solution was to kill myself?
Seriously, why live in a world where the woman I wanted to spend the rest of my life, the woman who wanted to spend the rest of her life with my own person, was running away from me? Why live in a world where people were spitting on me, not literally, in the lovely world that is social media? Why live in a world where the job I thought I was born for was maybe not made for me? You know that thing call the impostor syndrome? I wasn’t happy and I wasn’t seeing the light at the end of the tunnel. I had no more strength left. I didn’t have a proper night of sleep since weeks and no healthy meal since, forever. I don’t even talk about exercise… I was practically dead already, so one night, I drank like never before, and had the marvellous idea to nearly harass my former fianc'e: I wanted her back. She closed her phone, it was the end: I decided it was the end. I was an asshole. I had enough. I wasn’t able to take more of that shit that is life. Fortunately, I blacked out, being truly intoxicated, before doing anything irreparable… until the cops knocked at my door. They were there to check if I was still alive. Two cops, at my door, wanted to see if I was alive. Can you imagine? I’m pretty sure you can’t. I was shaking and nearly crying: they were ready to smash my door if I wasn’t answering them in the second after I did. I reached a point where people who still cared about me were worried enough to call the police. Can you imagine again? Worrying the people you love so much that they need to take drastic actions like this? I was terrified. I. Was. Terrified. Not about the cops, but about me… I was at a breaking point! Fuck…
At that exact moment, I decided I needed to tried to take care of myself. I started to see a psychologist twice a week. My doctor prescribed me antidepressants and pills to help me sleep a bit. Until now, I didn’t take any medicine for my severe deficit attention disorder (ADD – ADHD, with hyperactivity, in my case) that was diagnosed years ago, but I asked my doctor to add this to the cocktails of pills she was giving me. I also forced myself to see my close friends and I stopped taking anything containing alcohol. It was a complete turn over: anything that was helping me to see some light out of that terrible time of my life was part of my plan. Actually, I didn’t had any plan, I just wanted to run away from that scariest part of me. I even started to write a personal diary every time I had a difficult thought in my mind, which was more than once daily. It wasn’t easy. I wasn’t happy, but I was scared. I was scared to get back to that moment when the only plausible idea was to end my life. The frightening was bigger than the sadness, trust me. Baby steps were made to go forward. It was, and still is the biggest challenge I ever had in my life.
One evening, I was with my best friend at a Jean Leloup show: for a small moment, first time since months, I was having fun. I was smiling! And I started to cry… I realized that if I had killed myself, I wouldn’t be able to be there, with a man who is loving me as a friend for eighteen years and supported me like no one during that difficult time. I wouldn’t have been able to be there, singing and dancing on the music I love so much… At that exact moment, I knew I was starting to slowly get back on my feet. I knew that it wasn’t only the right thing to do, it was the thing to do. Thanks to my parents, my friends and the health professionals, I was finally feeling like my life was improving. It was a work in progress, but I was going in the right direction.
Still today, life isn’t easy. Life is continuing to throw rocks at me, like my mother getting a diagnostic of Alzheimer and this week, a cancer. I’m still trying to fix parts of my life, trying to find myself, but I can smile now, most of the time. It’s a constant battle, but I now know it’s worth it. Anyhow, I have mental illness and I’m not ashamed anymore of it: I’m not ashamed anymore of what happened! I’m putting all efforts I can to make my life better. Again, it’s not easy, but small steps at a time, I’m getting better. Since, there is a semicolon tattoo on my wrist (picture above) to remember me that life is precious. That my life is precious. I could’ve ended my life, like an author ending a sentence with a coma, but I chose not to: my story isn’t over…
P.S.: If you have suicide ideas or feels like you are going thru what I’ve lived, please call a friend. If you don’t want or can’t, call Suicide Action Montreal at 514-723-4000 or check the hotline number in your country. You deserve better. You deserve to live!
http://feedproxy.google.com/~r/outofcomfortzonenet/~3/RXASk6b1Idk/
|
Karl Dubost: [worklog] Ganesh, remover of obstacles |
Earthquake in Kumamoto (Green circle is where I live). For people away from Japan, it always sounds like a scary thing. This one was large but still Japan is a big series of islands and where I live was far from the Earthquake. Or if you want a comparison it's a bit like people in Japan who would be worried for people in New-York because of an earthquake in Miami, or for people in Oslo because of an earthquake in Athens. Time to remove any obstacles, so Ganesh.
Tune of the week: Deva Shree Ganesha - Agneepath.
Progress this week:
Today: 2016-04-18T07:52:17.560261 374 open issues ---------------------- needsinfo 3 needsdiagnosis 126 needscontact 25 contactready 95 sitewait 122 ----------------------
You are welcome to participate
Preparing Londong agenda.
After reducing the incoming bug to nearly 0 every day in the previous weeks, I have now reduced the needscontact around 25 issues. Most of the remaining are for Microsoft, Opera, Firefox OS community to deal with. My next target is the contactready ones around 100 issues.
Posted my git/github workflow.
(a selection of some of the bugs worked on this week).
Some people in the Mozilla community are publishing on Medium, aka their content will disappear one day when you know Medium will be bought or just sunset. It's a bit sad. Their content is also most of the time not syndicated elsewhere.
width
for Firefox only.Otsukare!
|
Armen Zambrano: Project definition: Give Treeherder the ability to schedule TaskCluster jobs |
|
Armen Zambrano: Project definition: SETA re-write |
http://feedproxy.google.com/~r/armenzg_mozilla/~3/ayDtl0NUZMw/project-definition-seta-re-write.html
|
Fr'ed'eric Wang: OpenType MATH in HarfBuzz |
TL;DR:
Work is in progress to add OpenType MATH support in HarfBuzz and will be instrumental for many math rendering engines relying on that library, including browsers.
For stretchy operators, an efficient way to determine the required number of glyphs and their overlaps has been implemented and is described here.
In the context of Igalia browser team effort to implement MathML support using TeX rules and OpenType features, I have started implementation of OpenType MATH support in HarfBuzz. This table from the OpenType standard is made of three subtables:
The MathConstants table, which contains layout constants. For example, the thickness of the fraction bar of .
The MathGlyphInfo table, which contains glyph properties. For instance, the italic correction indicating how slanted an integral is e.g. to properly place the subscript in
http://www.maths-informatique-jeux.com/blog/frederic/?post/2016/04/16/OpenType-MATH-in-HarfBuzz
|
Mark Finkle: Pitching Ideas – It’s Not About Perfect |
I realized a long time ago that I was not the type of person who could create, build & polish ideas all by myself. I need collaboration with others to hone and build ideas. More than not, I’m not the one who starts the idea. I pick up something from someone else – bend it, twist it, and turn it into something different.
Like many others, I have a problem with ‘fear of rejection’, which kept me from shepherding my ideas from beginning to shipped. If I couldn’t finish the idea myself or share it within my trusted circle, the idea would likely die. I had most successes when sharing ideas with others. I have been working to increase the size of the trusted circle, but it still has limits.
Some time last year, Mozilla was doing some annual planning for 2016 and Mark Mayo suggested creating informal pitch documents for new ideas, and we’d put those into the planning process. I created a simple template and started turning ideas into pitches, sending the documents out to a large (it felt large to me) list of recipients. To people who were definitely outside my circle.
The world didn’t end. In fact, it’s been a very positive experience, thanks in large part to the quality of the people I work with. I don’t get worried about feeling the idea isn’t ready for others to see. I get to collaborate at a larger scale.
Writing the ideas into pitches also forces me to get a clear message, define objectives & outcomes. I have 1x1s with a variety of folks during the week, and we end up talking about the idea, allowing me to further build and hone the document before sending it out to a larger group.
I’m hooked! These days, I send out pitches quite often. Maybe too often?
http://starkravingfinkle.org/blog/2016/04/pitching-ideas-its-not-about-perfect/
|
Allen Wirfs-Brock: Slide Bite: The Ambient Computing Era |
In the Ambient Computing Era humans live in a rich environment of communicating computer enhanced devices interoperating with a ubiquitous cloud of computer mediated information and services. We don’t even perceive most of the computers we interact with. They are an invisible and indispensable part of our everyday life.
|
Air Mozilla: Foundation Demos April 15 2016 |
Foundation Demos April 15 2016
|
Allen Wirfs-Brock: Slide Bite: Transitional Technologies |
A transitional technology is a technology that emerges as a computing era settles into maturity and which is a precursor to the successor era. Transitional technologies are firmly rooted in the “old” era but also contain important elements of the “new” era. It’s easy to think that what we experience using transitional technologies is what the emerging era is going to be like. Not likely! Transitional technologies carry too much baggage from the waning era. For a new computing era to fully emerge we need to move “quickly through” the transition period and get on with the business of inventing the key technologies of the new era.
|
Air Mozilla: Webdev Beer and Tell: April 2016 |
Once a month web developers across the Mozilla community get together (in person and virtually) to share what cool stuff we've been working on in...
|
Hub Figui`ere: Modernizing AbiWord code |
When you work on a 18 year old code base like AbiWord, you encounter stuff from another age. This is the way it is in the lifecycle of software where the requirement and the tooling evolve.
Nonetheless, when AbiWord started in 1998, it was meant as a cross-platform code base written in C++ that had to compile on both Windows and Linux. C++ compiler where not as standard compliant as today so a lot of things where excluded: no template, so not standard C++ library (it was called STL at the time). Over the years, things have evolved, Mac support was added, gcc 4 got released (with much better C++ support), and in 2003 we started using template for the containers (not necessarily in that oder, BTW). Still no standard library. This came later. I just flipped the switch to make C++11 mandatory, more on that later.
As I was looking for some bugs I found it that with all that hodge podge of coding standard there wasn't any, and this caused some serious ownership problems where we'd be using freed memory. The worse is this lead to file corruption where we write garbage memory into files as are supposed to be valid XML. This is bad.
The core of the problem is the way we pass attributes / properties around. They are passed as a NULL terminated array of pointer to strings. Even index are keys, odd are string values. While keys are always considered static, values are not always. Sometime they are taken out of a std::string or a one of the custom string containers from the code base (more on that one later), sometime they are just strdup()
and free()
later (uh oh, memory leaks).
Maybe this is the good time to do a cleanup and modernize the code base and make sure we have safer code rather that trying to figure out one by one all the corner cases. And shall I add that there is virtually no tests on AbiWord? So it is gonna be epic.
As I'm writing this I have 8 patches with a couple very big, amounting to the following stats (from git):
134 files changed, 5673 insertions(+), 7730 deletions(-)
These numbers just show how broad the changes are, and it seems to work. The bugs I was seeing with valgrind are gone, no more access to freed memory. That's a good start.
Some of the 2000+ lines deleted are redundant code that could have been refactored (there are still a few places I marked for that), but a lot have to do with what I'm fixing. Also some changes are purely whitespace / indentation where it was relevant usually around an actual change.
Now, instead of passing around const char **
pointers, we pass around a const PP_PropertyVector &
which is, currently, a typedef to std::vector
. To make things nice the main storage for these properties is now also a std::map
(possibly I will switch it to an unordered map) so that assignments are transparent to the std::string
implementation. Before that it was a one of the custom containers.
Patterns like this:
const char *props[] = { NULL, NULL, NULL, NULL }; int i = 0; std::string value = object->getValue();
props[i++] = "key"; const char *s = strdup(value.c_str()); props[i++] = s;
thing->setProperties(props);
free(s);
Turns to
PP_PropertyValue props = { "key", object->getValue() };
thing->setProperties(props);
Shorter, readable, less error prone. This uses C++11 initializer list. This explain some of the line removal.
Use C++ 11!
Something I can't recommend enough if you have a C++ code base is to switch to C++ 11. Amongst the new features, let me list the few that I find important:
auto
for automatic type deduction. Make life easier in typing and also in code changes. I mostly always use it whe declaring an iterator from a container.unique_ptr<>
and shared_ptr<>
. Smart pointer inherited from boost. But without the need for boost. unique_ptr<>
replaces the dreaded auto_ptr<>
that is now deprecated.unordered_map<>
and unordered_set<>
: hash based map and set in the standard library.unique_ptr<>
implementation to be usable in a container where auto_ptr<>
didn't. The move semantic is the default behaviour of Rust while C++ copies.Don't implement your own containers.
Don't implement vector, map, set, associative container, string, lists. Use the standard C++ library instead. It is portable, it works and it likely does a better job than your own. I have another set of patches to properly remove these UT_Vector
, UT_String
, etc. from the AbiWord codebase. Some have been removed progressively, but it is still ongoing.
Also write tests.
This is something that is missing on AbiWord that I have tried to tackle a few time.
One more thing.
I could have mechanised these code changes to some extent, but then I wouldn't have had to review all that code in which I found issues that I addressed. Eyeball mark II is still good for that.
The patch (in progress)
https://www.figuiere.net/hub/blog/?2016/04/15/860-modernizing-abiword-code
|
Christopher Arnold |
http://ncubeeight.blogspot.com/2016/04/back-in-2005-2006-my-friend-liesl-told.html
|
John O'Duinn: “Distributed” ER#7 now available! |
“Distributed” Early Release #7 is now publicly available, a month after ER#6 came out.
This ER#7 includes a significant reworking of the first section of this book. Some chapters were resequenced. Some were significantly trimmed – by over half! Some were split up, creating new chapters or merged with existing sections of other chapters later in the book. All slow, detailed work that I hope makes the book feel more focused. The format of all chapters throughout were slightly tweaked, and there are also plenty of across-the-board minor fixes.
You can buy ER#7 by clicking here, or clicking on the thumbnail of the book cover. Anyone who already bought any of the previous ERs should get prompted with a free update to ER#7 – if you don’t please let me know! And yes, you’ll get updated when ER#8 comes out.
Thanks again to everyone for their ongoing encouragement, proof-reading help and feedback so far – keep letting me know what you think. Each piece of great feedback makes me wonder how I missed such obvious errors before. And makes me happy, as each fix helps make this book better. It’s important this book be interesting, readable and practical – so if you have any comments, concerns, etc., please email me. Yes, I will read and reply to each email personally! To make sure that any feedback doesn’t get lost or caught in spam filters, please email comments to feedback at oduinn dot com. I track all feedback and review/edit/merge as fast as I can. And thank you to everyone who has already sent me feedback/opinions/corrections – all really helpful.
John.
=====
ps: For the curious, here is the current list of chapters and their status:
Chapter 1 The Real Cost of an Office – AVAILABLE
Chapter 2 Distributed Teams Are Not New – AVAILABLE
Chapter 3 Disaster Planning – AVAILABLE
Chapter 4 Diversity
Chapter 5 Organizational Pitfalls to Avoid – AVAILABLE
Chapter 6 Physical Setup – AVAILABLE
Chapter 7 Video Etiquette – AVAILABLE
Chapter 8 Own Your Calendar – AVAILABLE
Chapter 9 Meetings – AVAILABLE
Chapter 10 Meeting Moderator – AVAILABLE
Chapter 11 Single Source of Truth
Chapter 12 Email Etiquette – AVAILABLE
Chapter 13 Group Chat Etiquette – AVAILABLE
Chapter 14 Culture, Conflict and Trust
Chapter 15 One-on-Ones and Reviews – AVAILABLE
Chapter 16 Hiring, Onboarding, Firing, Reorgs,
Layoffs and other Departures – AVAILABLE
Chapter 17 Bring Humans Together – AVAILABLE
Chapter 18 Career Path – AVAILABLE
Chapter 19 Feed Your Soul – AVAILABLE
Chapter 20 Final Chapter
Appendix A The Bathroom Mirror Test – AVAILABLE
Appendix B How NOT to Work – AVAILABLE
Appendix C Further Reading – AVAILABLE
=====
http://oduinn.com/blog/2016/04/14/distributed-er7-now-available/
|
Robert O'Callahan: Leveraging Modern Filesystems In rr |
During recording, rr needs to make sure that the data read by all mmap and read calls is saved to the trace so it can be reproduced during replay. For I/O-intensive applications (e.g. file copying) this can be expensive in time, because we have to copy the data to the trace file and we also compress it, and in space, because the data is being duplicated.
Modern filesystems such Btrfs and XFS have features that make this much better: the ability to clone files and parts of files. These cloned files or blocks have copy-on-write semantics: i.e. the underlying storage is shared until one of the copies is written to. In common cases no future writes happen or they happen later when copying isn't a performance bottleneck. So I've extended rr to support these features.
mmap was pretty easy to handle. We already supported hardlinking mmapped files into the trace directory as a kind of hacky/incomplete copy-on-write approximation, so I just extended that code to try BTRFS_IOC_CLONE first. Works great.
read was harder to handle. We extend syscall buffering to give each thread its own "cloned-data" trace file, and every time a large block-aligned read occurs, we first try to clone those blocks from the source file descriptor into that trace file. If that works, we then read the data for real but don't save it to the syscall buffer. During replay, we read the data from the cloned-data trace file instead of the original file descriptor. The details are a bit tricky because we have to execute the same code during recording as replay.
This approach introduces a race: if some process writes to the input file between the tracee cloning the blocks and actually reading from the file, the data read during replay will not match what was read during recording. I think this is not a big deal since in Linux such read/write races can result in the reader seeing an arbitrary mix of old and new data, i.e. this is almost certainly a severe bug in the application, and I suspect such bugs are relatively rare. Personally I've never seen one. We could eliminate the race by reading from the cloned-data file instead of the original input file, but that performs very poorly because it defeats the kernel's readahead optimizations.
Naturally this optimization only works if you have the right sort of filesystem and the trace and the input files are on the same filesystem. So I'm formatting each of my machines with a single large btrfs partition.
Here are some results doing "cp -a" of an 827MB Samba repository, on my laptop with SSD:
The space savings are even better:
The cloned btrfs data is not actually using any space until the contents of the original Samba directory are modified. And of course, if you make multiple recordings they continue to share space even after the original files are modified. Note that some data is still being recorded (and compressed) normally, since for simplicity the cloning optimization doesn't apply to small reads or reads that are cut short by end-of-file.
http://robert.ocallahan.org/2016/04/leveraging-modern-filesystems-in-rr.html
|