Difference between revisions of "SoC/Ideas"

From SambaWiki
Jump to: navigation, search
(Linux Kernel SMB Client Improvements)
(Linux Kernel SMB Client Improvements)
Line 128: Line 128:
 
* Difficulty: Low
 
* Difficulty: Low
  
=== Add support for ODX (T10) Copy Offload to the kernel ===
+
=== Add support for ODX (T10) Copy Offload to the smb3 kernel module ===
 
* Windows, and various NAS servers support ODX copy offload (e.g. NetApp https://docs.netapp.com/ontap-9/index.jsp?topic=%2Fcom.netapp.doc.cdot-famg-cifs%2FGUID-1323806A-F37B-46AF-B123-E40FCD362B33.html),
 
* Windows, and various NAS servers support ODX copy offload (e.g. NetApp https://docs.netapp.com/ontap-9/index.jsp?topic=%2Fcom.netapp.doc.cdot-famg-cifs%2FGUID-1323806A-F37B-46AF-B123-E40FCD362B33.html),
 
* to allow much faster server side copy.
 
* to allow much faster server side copy.
Line 135: Line 135:
 
* Language: C
 
* Language: C
 
* Difficulty: Medium/High
 
* Difficulty: Medium/High
 +
 +
=== Add support for DAC (Claims Based ACLs) to the smb3 kernel module and tools ===
 +
* Similar to what was done to extend the Apache access control model to allow richer ACL semantics,
 +
* SMB3's access control model was extended (at least in Windows).  See e.g. https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/dynamic-access-control
 +
* Add support to the SMB3 kernel module and user space tools (or create new ones) to allow viewing and managing claims based ACLs (DAC) from the client.
 +
* Language: C (kernel), C/C++/Python (user space tools)
 +
 +
===VFS change notification support in cifs.ko ===
 +
* Add code to cifs/smb2 to set up and deal with notifications from the server in response to inotify/dnotify calls
 +
* Difficulty: Hard
 +
* Language: C
  
 
=== Add additional ftrace (trace-cmd) tracepoints and better GUI ===
 
=== Add additional ftrace (trace-cmd) tracepoints and better GUI ===
Line 140: Line 151:
 
* Language: C (any kernel changes) and userspace C, C++ or Python
 
* Language: C (any kernel changes) and userspace C, C++ or Python
 
* Difficulty: Low
 
* Difficulty: Low
 +
 +
===Failover/Continuous Availability and HA improvements (Witness protocol)===
 +
* Benefits: Improved reliability, data integrity - may also allow planned migrations (moving data from one server to another). 
 +
* Challenges: Complexity, requires additional RPC infrastructure in client.  There is a Samba user space prototype of the Witness protocol that could be reused (since we only need the client part of the RPC calls).
 +
* Language: C
 +
* Difficulty: High
 +
 
=== Add performance analysis cli tools ===
 
=== Add performance analysis cli tools ===
 
* Add more perf tools for SMB3 client (similar to iostat or nfsstat) that leverage (and possibly extend what is captured) in /proc/fs/cifs/Stats but make it easier to analyze performance of a cifs mount
 
* Add more perf tools for SMB3 client (similar to iostat or nfsstat) that leverage (and possibly extend what is captured) in /proc/fs/cifs/Stats but make it easier to analyze performance of a cifs mount
Line 176: Line 194:
 
* Language: C
 
* Language: C
 
* Difficulty: Moderate
 
* Difficulty: Moderate
* Possible Mentors: Steve French
 
 
===Failover/Continuous Availability and HA improvements (Witness protocol)===
 
* Benefits: Improved reliability, data integrity - may also allow planned migrations (moving data from one server to another).  This is very timely given the recent addition of resilient and persistent handle support to the Linux smb3 kernel client.
 
* Challenges: Complexity, requires additional RPC infrastructure in client.
 
* Language: C
 
* Difficulty: High
 
 
* Possible Mentors: Steve French
 
* Possible Mentors: Steve French
  
Line 202: Line 213:
 
* add a way for the client to remap the uids returned by the server to uids which would be valid on the client (or to a default if such uid does not exist).
 
* add a way for the client to remap the uids returned by the server to uids which would be valid on the client (or to a default if such uid does not exist).
 
* This is helpful especially when the server supports the CIFS Unix Extensions and has different uids and gids mapping than the client
 
* This is helpful especially when the server supports the CIFS Unix Extensions and has different uids and gids mapping than the client
* Difficulty: Hard
 
* Possible Mentors: Steve French
 
 
===VFS change notification support===
 
* add VFS support for calling into the filesystem when setting up notifications
 
* add code to cifs/smb2 to set up and deal with notifications from the server in response to inotify/dnotify calls
 
 
* Difficulty: Hard
 
* Difficulty: Hard
 
* Possible Mentors: Steve French
 
* Possible Mentors: Steve French

Revision as of 19:55, 16 January 2019

Google Summer of Code: Suggested Project ideas

The following are the Samba project ideas for Summer of Code. Of course you are free to come up with ideas not listed here. Please discuss the your planned project by either joining us on irc://irc.freenode.net/#samba-technical or by sending email to samba-technical@lists.samba.org

Samba

Some additional possible GSoC topics can be found in Bugzilla in the form of bugs which are marked as "Feature request": here. Questions regarding complexity and requirements should be directed to the technical mailing list.

Print System Asynchronous Remote Protocol Wireshark Dissectors

The Print System Asynchronous Remote Protocol (MS-PAR) is a replacement for the synchronous Print System Remote Protocol (MS-RPRN). MS-PAR inherits many message and buffer formats from the old protocol, but allows for asynchronous submission and notification of print jobs. Further details of the protocol can be found in Günther and Andreas' SambaXP presentation.

The student should write Wireshark dissectors for MS-PAR. The student should improve existing smbtorture tests, which demonstrate how the protocol works against a Windows server.

  • Difficulty: Medium
  • Language(s): C
  • Possible Mentors: Andreas Schneider


dbwrap back-end for Ceph RADOS key-value storage

Ceph offers a highly scalable and fault-tolerant storage system. Samba is already capable of sharing data located on the Ceph Filesystem, however scale-out sharing (the same data exposed by multiple Samba nodes) currently requires the use of CTDB for consistent and coherent state across Samba cluster nodes. In such a setup CTDB provides a clustered database with persistent key-value data storage and locking. Database usage is abstracted out via a generic dbwrap interface.

Ceph's librados library provides an API for the storage and retrieval of arbitrary key-value data via the omap functions. A watch/notify protocol is also provided as a mechanism for synchronising client state (locking). Key-value data stored in the RADOS back-end inherits the same redundancy features as regular objects, making it a potentially good candidate as a replacement for CTDB in scale-out Samba clusters.

This task involves the implementation and testing of a new dbwrap back-end that uses librados for the storage, retrieval and locking of Samba key-value state. Ideally, the candidate would also allow time for benchmarking.

  • Difficulty: Medium
  • Language(s): C
  • Possible Mentors: David Disseldorp


Linux Kernel SMB Client Improvements

Interested students should contact Steve French or the linux-cifs mailing list to discuss possible improvements to the Linux Kernel CIFS VFS client.

Add machine-readable debug & stats /proc file

  • Stop outputing free format text that breaks all parsers out there everytime we add things to it. Clean up the cifsdebug.c file (its kind of messy). Possibly generate a hierarchy of files (e.g. a dir per tcp connection, subdirs for session, files for tcons). Make a nice native/console/web UI for it.
  • Language: C
  • Difficulty: Low

Add support for ODX (T10) Copy Offload to the smb3 kernel module

Add support for DAC (Claims Based ACLs) to the smb3 kernel module and tools

VFS change notification support in cifs.ko

  • Add code to cifs/smb2 to set up and deal with notifications from the server in response to inotify/dnotify calls
  • Difficulty: Hard
  • Language: C

Add additional ftrace (trace-cmd) tracepoints and better GUI

  • Add more dynamic tracepoints to cifs.ko for commonly needed user scenarios, and add GUI (and/or CLI) tool to make it easier to enable/disable cifs.ko dynamic trace points (See /sys/kernel/debug/tracing/events/cifs/ for the pseudo-files that are currently configured manually for tracing or via trace-cmd) Make a nice native/console/web UI for it.
  • Language: C (any kernel changes) and userspace C, C++ or Python
  • Difficulty: Low

Failover/Continuous Availability and HA improvements (Witness protocol)

  • Benefits: Improved reliability, data integrity - may also allow planned migrations (moving data from one server to another).
  • Challenges: Complexity, requires additional RPC infrastructure in client. There is a Samba user space prototype of the Witness protocol that could be reused (since we only need the client part of the RPC calls).
  • Language: C
  • Difficulty: High

Add performance analysis cli tools

  • Add more perf tools for SMB3 client (similar to iostat or nfsstat) that leverage (and possibly extend what is captured) in /proc/fs/cifs/Stats but make it easier to analyze performance of a cifs mount
  • Language: C, C++ or Python
  • Difficulty: Low

Write the One-True-Tool to unify probe/setup/configuration cifs.ko properly

  • Too many knobs in different places at the moment: request-keys, idmap, cifscreds, /proc stuff
  • Would handle ACL stuff as well (nice gui to get/set)

Improve smbcmp, the capture diff tool

  • Use or combine current tshark output with the XML output to do better diffs
  • Better UI?
  • Language: Python (rewrite in something else is OK)