Grace Hopper Conference India

Yet another conference. This time it was the Grace Hopper Conference India, which is the largest annual conference for women in computing and technology in the country. Simply overwhelming participation with over 3000 amazing women in technology from varied backgrounds and different countries.

img20161207151553

I really enjoyed the keynote session by Vanitha Narayanan, Managing Director of IBM India. It was indeed very inspiring to listen to her intriguing journey – as an individual and a professional. Her talk made me realize that it’s important to focus on the present as much as it is to plan for the future, more precisely “Live for the present; plan for the future“.

As a Design Aficionado, I also enjoyed the workshop on designing facial gesture based interfaces tapping Neuro technology. The session was a hands on workshop to design facial gesture controlled interfaces applying the design thinking methodology.

As an ML enthusiast, it was interesting to know about the machine learning and data science applications involved in iConnect: Exponential Technology, which is one of GE’s business centric innovations to control, power and maintain its sites and products.

As a speaker at the conference, I enjoyed sharing my learnings and experience about open source and encouraged many more equally motivated women in technology to Dive into Open Source with the Linux Kernel. We presented our talk about Open Source and Industry in the Campus to Corporate track, showcasing how young women can prepare themselves for the corporate world and chart out the best course for their career. I thank my outreachy buddy, Shraddha Barke for her amazing support as a collaborator at the conference. Through our talk we tried doing our bit in making open source communities more diverse and more welcoming to newcomers. 🙂 I hope that it encourages more women to explore open source…

I thank the Anita Borg Institute for granting me the Grace Hopper Scholarship Award and for sponsoring my trip. 😀

LinuxCon North America 2016

 

As an Outreachy Intern at the world’s largest software project—The Linux Kernel—I was really fortunate to attend the LinuxCon NA 2016, which gave me an opportunity to learn from the best and the brightest minds of the Linux community and from around the world and gain and share knowledge about the bleeding-edge open source APIs and tools.

Cqkw2cwVMAABlg_
With Helen Fornazier and Karen Sandler, fellow members of the Outreachy Panel @ LinuxCon NA 2016

As an attendee, I really enjoyed the presentation of Jared and JR Nielsen, about producing professional media on Linux. Currently, the computer vision & simulation industry runs mainly on proprietary software, which is costly and inaccessible to many. This conference will help me learn more about tools such as Lightworks, Blender, GIMP and many more free, open source software specific to graphics and computer vision. As I’m pursuing my undergraduate honors research in computer vision, I plan on using the image processing  tools and techniques that I learn during my research to make meaningful contributions to the open source industry via computer vision.

I also enjoyed  Ruth Suehle’s leadership talk about managing Open Source community and Standards. I have been involved in various open source projects both large and small, and I believe her talk has helped me see  the leadership aspect of a successful open source project and community.

Apart from the amazing talks and workshops that it offered, I found LinuxCon as an excellent opportunity to network with other professionals from the World, especially the women in technology. I thank Intel for the Women in Opensource Lunch which helped me connect with amazing women in technology.

As a speaker, I enjoyed promoting async execution with workqueues. I felt really encouraged and motivated and the feedback was simply amazing! Workqueue is extensively used across the Linux kernel. But currently there are around 280 legacy workqueue creation interface users that can be updated to use the Concurrency Managed Workqueues.  I’m happy that my talk helped promote the flexibility, ease and robustness of workqueues for asynchronous execution of functions and will hopefully encourage the developers to use it in upstream kernel development.

As an avid open source enthusiast, attending LinuxCon, has motivated me to conduct similar events in my local city in India which will help others take their first steps into open source.. I am especially focused on helping women get involved in open source as I believe this will help bridge the gender gap and promote faster technological advances.

A big shout-out to my mentor, Mr Tejun Heo for his constant support and guidance…

IMG_20160826_210753
With the world’s coolest mentor 🙂

And a big thank you to the Linux Foundation and the Outreachy team for fully sponsoring my trip..  Your kindness and generosity is greatly appreciated and thank you for investing in  my future! 🙂

 

 

 

system_long_wq

/drivers/gpu/drm/ttm/ttm_memory.c

–       glob->swap_queue = create_singlethread_workqueue(“ttm_swap”);

 

–       flush_workqueue(glob->swap_queue);

–       destroy_workqueue(glob->swap_queue);

+       flush_work(&glob->work);

 

–       queue_work(glob->swap_queue, &glob->work);

+      schedule_work(glob->swap_queue, &glob->work);

  • swap_queue was created to handle shrinking in low memory situations.

 

  • Earlier, a separate workqueue was used in order to avoid other workqueue tasks from being blocked since work items on swap_queue spend a lot of time waiting for the GPU.

 

  • Since these long-running work items aren’t involved in memory reclaim in any way, system_long_wq has been used.

 

  • Work item has been flushed in ttm_mem_global_release() to ensure that nothing is pending when the driver is disconnected.

Tip..

Used when the queued work items are long running and don’t require any special flags.

 

System workqueue

/drivers/android/binder.c

–          binder_deferred_workqueue = create_singlethread_workqueue(“binder”);

–          queue_work(binder_deferred_workqueue, &binder_deferred_work);

+         schedule_work(&binder_deferred_work);

  • Binder is the RPC mechanism used on androids. The workqueue is being used to run deferred work for the android binder.
  • The “binder_deferred_workqueue” queues only a single work item and hence does not require ordering.
  • Also, this workqueue is not being used on a memory reclaim path.
  • Hence, it has been converted to use system_wq.

 

Tip..

Used when the work items don’t take very long and can be run concurrently.

No special flags required..

BEST option in these cases!

alloc_ordered_workqueue()

Another snippet from my patch.

/drivers/net/caif/caif_hsi.c

–        cfhsi->wq = create_singlethread_workqueue(cfhsi->ndev->name);

+       cfhsi->wq = alloc_ordered_workqueue(cfhsi->ndev->name, WQ_MEM_RECLAIM);

An ordered workqueue has been used since workitems &cfhsi->wake_up_work

and &cfhsi->wake_down_work cannot be run concurrently.

Since the work items are being used on a packet tx/rx path, WQ_MEM_RECLAIM has been set to guarantee forward progress under memory pressure.

Tip..

Used when the queued work items require strict execution ordering…

alloc_workqueue() + WQ_HIGHPRI

/drivers/gpu/drm/radeon/radeon_display.c

–       radeon_crtc->flip_queue = create_singlethread_workqueue(“radeon-crtc”);

+       radeon_crtc->flip_queue = alloc_workqueue(“radeon-crtc”, WQ_HIGHPRI, 0);

 

  • Each hardware CRTC has a single flip work queue. When a radeon_flip_work_func item is queued, it needs to be executed ASAP because even a slight delay may cause the flip to be delayed by one refresh cycle.
  • Hence, a dedicated workqueue with WQ_HIGHPRI set, has been used here since a delay can cause the outcome to miss the refresh cycle.
  • Since there are only a fixed number of work items, explicit concurrency limit is unnecessary here.

Tip..

Used for workqueues that queue work items that require high priority for execution..

alloc_workqueue() + WQ_MEM_RECLAIM

Snippet from my patch:

/drivers/net/ethernet/synopsys/dwc_eth_qos.c

–       lp->txtimeout_handler_wq = create_singlethread_workqueue(DRIVER_NAME);

+       lp->txtimeout_handler_wq = alloc_workqueue(DRIVER_NAME,

+                                                  WQ_MEM_RECLAIM, 0);

  • A dedicated workqueue has been used since the work item viz lp->txtimeout_reinit is involved in packet TX/RX path .

 

  • As a network device can be used during memory reclaim, the workqueue needs forward progress guarantee under memory pressure. WQ_MEM_RECLAIM has been set to ensure this.

 

  • Since there is only a single work item, explicit concurrency limit is unnecessary here.

Tip..

Used when the work items are on a memory reclaim path.