linux_dsm_epyc7002/lib
David S. Miller d7ee287827 Generic DIM
From: Tal Gilboa and Yamin Fridman
 
 Implement net DIM over a generic DIM library, add RDMA DIM
 
 dim.h lib exposes an implementation of the DIM algorithm for
 dynamically-tuned interrupt moderation for networking interfaces.
 
 We want a similar functionality for other protocols, which might need to
 optimize interrupts differently. Main motivation here is DIM for NVMf
 storage protocol.
 
 Current DIM implementation prioritizes reducing interrupt overhead over
 latency. Also, in order to reduce DIM's own overhead, the algorithm might
 take some time to identify it needs to change profiles. While this is
 acceptable for networking, it might not work well on other scenarios.
 
 Here we propose a new structure to DIM. The idea is to allow a slightly
 modified functionality without the risk of breaking Net DIM behavior for
 netdev. We verified there are no degradations in current DIM behavior with
 the modified solution.
 
 Suggested solution:
 - Common logic is implemented in lib/dim/dim.c
 - Net DIM (existing) logic is implemented in lib/dim/net_dim.c, which uses
   the common logic in dim.c
 - Any new DIM logic will be implemented in "lib/dim/new_dim.c".
   This new implementation will expose modified versions of profiles,
   dim_step() and dim_decision().
 - DIM API is declared in include/linux/dim.h for all implementations.
 
 Pros for this solution are:
 - Zero impact on existing net_dim implementation and usage
 - Relatively more code reuse (compared to two separate solutions)
 - Increased extensibility
 -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCAAdFiEEGhZs6bAKwk/OTgTpSD+KveBX+j4FAl0SiDAACgkQSD+KveBX
 +j4mlQgAoabbtxwIapMg62tKhnlr/3hEEyuEjiQRhzMUb5y5zOIJNRL82Nerv4K3
 oD7v76emw/Xb1ErPe4yJJRdkpbpabEAFKbqkM0R7xFPNK33ZbphlU1d9YGgUKp1W
 Uieydn5kfubzi6p7R1TC7c2qW1Wr6rE1wnNJyC/sy8zFEP/OEH0NmgPDyOs7ckWI
 xaoJ1lhNWMoGN+Qk+fxazd1VtsKdcbc9JvLD2e8ON5qWdnuNiLhawcJVoWzfsCAa
 V/Tdff+Rj9bVFsi468u20og4EdV3ceAOTzMnhCYpAtYZHVbVk6MFgh87uQYkTrfY
 sW8BDmWKkRdHtzHd3a3yQiVDnz/iuw==
 =bAZn
 -----END PGP SIGNATURE-----

Merge tag 'blk-dim-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux

Saeed Mamameed says:

====================
Generic DIM

From: Tal Gilboa and Yamin Fridman

Implement net DIM over a generic DIM library, add RDMA DIM

dim.h lib exposes an implementation of the DIM algorithm for
dynamically-tuned interrupt moderation for networking interfaces.

We want a similar functionality for other protocols, which might need to
optimize interrupts differently. Main motivation here is DIM for NVMf
storage protocol.

Current DIM implementation prioritizes reducing interrupt overhead over
latency. Also, in order to reduce DIM's own overhead, the algorithm might
take some time to identify it needs to change profiles. While this is
acceptable for networking, it might not work well on other scenarios.

Here we propose a new structure to DIM. The idea is to allow a slightly
modified functionality without the risk of breaking Net DIM behavior for
netdev. We verified there are no degradations in current DIM behavior with
the modified solution.

Suggested solution:
- Common logic is implemented in lib/dim/dim.c
- Net DIM (existing) logic is implemented in lib/dim/net_dim.c, which uses
  the common logic in dim.c
- Any new DIM logic will be implemented in "lib/dim/new_dim.c".
  This new implementation will expose modified versions of profiles,
  dim_step() and dim_decision().
- DIM API is declared in include/linux/dim.h for all implementations.

Pros for this solution are:
- Zero impact on existing net_dim implementation and usage
- Relatively more code reuse (compared to two separate solutions)
- Increased extensibility
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
2019-06-27 12:42:51 -07:00
..
842 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
dim linux/dim: Add completions count to dim_sample 2019-06-25 13:46:40 -07:00
fonts treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
livepatch
lz4 treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
lzo treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
math treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
mpi treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 26 2019-05-24 17:27:10 +02:00
raid6 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
reed_solomon treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
xz treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
zlib_deflate treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
zlib_inflate treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
zstd treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
.gitignore
argv_split.c
ashldi3.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 120 2019-05-24 17:39:02 +02:00
ashrdi3.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 120 2019-05-24 17:39:02 +02:00
asn1_decoder.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36 2019-05-24 17:27:11 +02:00
assoc_array.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36 2019-05-24 17:27:11 +02:00
atomic64_test.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
atomic64.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
audit.c
bcd.c
bch.c
bitmap.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
bitrev.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
bsearch.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 372 2019-06-05 17:37:10 +02:00
btree.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 431 2019-06-05 17:37:16 +02:00
bucket_locks.c
bug.c
build_OID_registry treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36 2019-05-24 17:27:11 +02:00
bust_spinlocks.c
chacha.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
check_signature.c
checksum.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
clz_ctz.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
clz_tab.c
cmdline.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
cmpdi2.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 120 2019-05-24 17:39:02 +02:00
compat_audit.c
cpu_rmap.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
cpumask.c
crc4.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
crc7.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
crc8.c
crc16.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
crc32.c
crc32defs.h
crc32test.c
crc64.c
crc-ccitt.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
crc-itu-t.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
crc-t10dif.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
ctype.c
debug_info.c
debug_locks.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
debugobjects.c
dec_and_lock.c
decompress_bunzip2.c
decompress_inflate.c
decompress_unlz4.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
decompress_unlzma.c
decompress_unlzo.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 95 2019-05-24 17:37:53 +02:00
decompress_unxz.c
decompress.c
devres.c
digsig.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02:00
dump_stack.c
dynamic_debug.c
dynamic_queue_limits.c
earlycpio.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 283 2019-06-05 17:36:37 +02:00
error-inject.c
errseq.c
extable.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
fault-inject.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
fdt_empty_tree.c
fdt_ro.c
fdt_rw.c
fdt_strerror.c
fdt_sw.c
fdt_wip.c
fdt.c
find_bit_benchmark.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 295 2019-06-05 17:36:38 +02:00
find_bit.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
flex_proportions.c
gen_crc32table.c
gen_crc64table.c
genalloc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
generic-radix-tree.c
glob.c
globtest.c
hexdump.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 501 2019-06-19 17:09:56 +02:00
hweight.c
idr.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
inflate.c
interval_tree_test.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
interval_tree.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
iomap_copy.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 504 2019-06-19 17:09:56 +02:00
iomap.c
iommu-helper.c
ioremap.c
iov_iter.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
irq_poll.c
irq_regs.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
is_single_threaded.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36 2019-05-24 17:27:11 +02:00
jedec_ddr_data.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
kasprintf.c
Kconfig linux/dim: Move implementation to .c files 2019-06-25 13:46:39 -07:00
Kconfig.debug treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Kconfig.kasan treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Kconfig.kgdb treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Kconfig.ubsan treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
kfifo.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
klist.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 248 2019-06-19 17:09:08 +02:00
kobject_uevent.c
kobject.c
kstrtox.c
kstrtox.h
libcrc32c.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
list_debug.c
list_sort.c lib/list_sort: fix kerneldoc build error 2019-05-23 09:27:39 -06:00
llist.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
locking-selftest-hardirq.h
locking-selftest-mutex.h
locking-selftest-rlock-hardirq.h
locking-selftest-rlock-softirq.h
locking-selftest-rlock.h
locking-selftest-rsem.h
locking-selftest-rtmutex.h
locking-selftest-softirq.h
locking-selftest-spin-hardirq.h
locking-selftest-spin-softirq.h
locking-selftest-spin.h
locking-selftest-wlock-hardirq.h
locking-selftest-wlock-softirq.h
locking-selftest-wlock.h
locking-selftest-wsem.h
locking-selftest.c
lockref.c lockref: Limit number of cmpxchg loop retries 2019-06-07 13:15:06 -07:00
logic_pio.c
lru_cache.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 91 2019-05-24 17:37:53 +02:00
lshrdi3.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 120 2019-05-24 17:39:02 +02:00
Makefile linux/dim: Move implementation to .c files 2019-06-25 13:46:39 -07:00
memcat_p.c
memory-notifier-error-inject.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
memweight.c
muldi3.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 120 2019-05-24 17:39:02 +02:00
net_utils.c
netdev-notifier-error-inject.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
nlattr.c
nmi_backtrace.c
nodemask.c
notifier-error-inject.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
notifier-error-inject.h
objagg.c lib: objagg: Use struct_size() in kzalloc() 2019-06-05 19:03:39 -07:00
of-reconfig-notifier-error-inject.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
oid_registry.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36 2019-05-24 17:27:11 +02:00
once.c
packing.c
parman.c
parser.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
pci_iomap.c
percpu_counter.c
percpu_test.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
percpu-refcount.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
plist.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 10 2019-05-21 11:28:45 +02:00
pm-notifier-error-inject.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
radix-tree.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 153 2019-05-30 11:26:32 -07:00
random32.c lib: Correct comment of prandom_seed 2019-05-17 11:32:47 -07:00
ratelimit.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 428 2019-06-05 17:37:16 +02:00
rbtree_test.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
rbtree.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
refcount.c
rhashtable.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
sbitmap.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 328 2019-06-05 17:37:06 +02:00
scatterlist.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
seq_buf.c
sg_pool.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
sg_split.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230 2019-06-19 17:09:06 +02:00
sha1.c
sha256.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
show_mem.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 435 2019-06-05 17:37:16 +02:00
siphash.c
smp_processor_id.c
sort.c lib/sort.c: fix kernel-doc notation warnings 2019-06-01 15:51:31 -07:00
stackdepot.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
stmp_device.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
string_helpers.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
string.c
strncpy_from_user.c
strnlen_user.c
syscall.c
test_bitfield.c
test_bitmap.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
test_bpf.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 295 2019-06-05 17:36:38 +02:00
test_debug_virtual.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
test_firmware.c Char/Misc driver fixes for 5.2-rc4 2019-06-08 12:50:36 -07:00
test_hash.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
test_hexdump.c
test_ida.c
test_kasan.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
test_kmod.c
test_list_sort.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
test_memcat_p.c
test_module.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
test_objagg.c
test_overflow.c
test_parman.c
test_printf.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
test_rhashtable.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
test_siphash.c
test_sort.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
test_stackinit.c lib/test_stackinit: Handle Clang auto-initialization pattern 2019-06-05 07:36:43 -07:00
test_static_key_base.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282 2019-06-05 17:36:37 +02:00
test_static_keys.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282 2019-06-05 17:36:37 +02:00
test_string.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
test_strscpy.c
test_sysctl.c tools/testing/selftests/sysctl/sysctl.sh: add proc_do_large_bitmap() test case 2019-05-14 19:52:51 -07:00
test_ubsan.c
test_user_copy.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282 2019-06-05 17:36:37 +02:00
test_uuid.c
test_vmalloc.c lib/test_vmalloc.c:test_func(): eliminate local `ret' 2019-05-14 19:52:49 -07:00
test_xarray.c
test-kstrtox.c
test-string_helpers.c
textsearch.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
timerqueue.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
ts_bm.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
ts_fsm.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
ts_kmp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
ubsan.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
ubsan.h
ucmpdi2.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 120 2019-05-24 17:39:02 +02:00
ucs2_string.c
usercopy.c
uuid.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
vsprintf.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
win_minmax.c
xarray.c
xxhash.c