Skip to content

john-sharratt/kvblade

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kvblade: a 4.14 to 4.19+ linux kernel module

* Standardized on the original Linux Kernel aoe.h header file
* Removed all backwards compatibility with older kernels
* Removed code areas that were shown to have problems in the past
---

kvblade: a 4.2 to 4.8+ linux kernel module
---

Kvblade is a kernel module implementing the target
side of the AoE protocol.  Users can command the
module through sysfs to export block devices on
specified network interfaces.  The loopback device
should be used as an intermediary for exporting
regular files with kvblade.

An exported target has a tuple that uniquely defines
it:
	{ major, minor, netif }

Major is the aoemajor / shelf address, minor is the
aoeminor / slot address, and netif is the name of
the interface the target is bound on.  It is illegal
to attempt to create more than one of these in kvblade.

Three shell scripts have been created to facilitate interfacing
with kvblade through sysfs: kvstat, kvadd, and kvdel.  Kvstat
prints the list of currently exported vblades.  Kvadd and
kvdel are used to manage the exported vblades.

This is alpha code.  It appears stable, but has limitations
that need to be addressed.  See the TODO file for a list of
things that you can help with.

Author:
	Sam Hopkins
	Coraid, Inc.
	
	John Sharratt
	Tokera Ltd.

Address support requests to
	aoetools-discuss@lists.sourceforge.net.
	support@tokera.com

Thanks to Lelik P. Korchagin for writing the first
kernel vblade module.  It was quite helpful as a
reference implementation.

Thanks to Sam. Hopkins for providing the original version
those many years ago.

---

Forked for the Tokera initiative

Improvements:
* Added support for linux kernel version 4.14.9 (long term kernel)
* Fixed a compile issue caused by the changed field bi_sector in BIO objects
* Removed the 16 static buffers and replaced them with 512 slab objects that are NUMA aligned
* Imported the AOE headers from the latest linux kernel version (4.2.9 - 4.8)
* Fixed incorrect reporting of capacity when attaching to a partition device
* Converted the single threaded worker to use a highly optimized multithreading architecture (pinned thread per core)
* Removed the worker spinlock and replaced with RCU symantics
* Removed a zero memory operation on new packets (which was wasted CPU time)
* Added a new system operation to broadcast AOE announce packets for all hosted devices (echo > /sys/kvblade/announce)
* Impremented per_cpu optimizations to reduce cache line thrashing
* Removed a cache line hot spot on aoedev.busy which was using atomic operations

Testing:
* Tested on kernel 4.8.17
* Number of physical server: 3
* Number of physical CPUs: 2
* Cores per CPU: 12
* RAM: 96GB
* Networking: 10GBit/s
* Disks: SSD (1GB) and HDD (4GB)
* Blocksize: 4096 bytes
* MTU: 8192 bytes

Results
* Command: dd if=/dev/zero of=/dev/etherd/e1.0 bs=1MB count=1000 oflag=direct
* Previous bandwidth: 80Mbit/s
* Current bandwidth: 4792Mbit/s
* Previous IOPS: 10k IOPS
* Current IOPS: 153k IOPS

About

High Performance ATA over Ethernet Kernel Driver

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 93.6%
  • Makefile 3.3%
  • Shell 3.1%