high writelog wait on OLTP system and fast SSD storage, log flush is slow
This is not an answer for 'what is the solution from now on' but more of how to identify the problem.

Transaction log is not like data pages in terms of how it is hardened to disk. Transaction log is first written to log buffer and then asynchronously written to disk.  In 2016 there is a limit of 112 concurrent log-flush I/Os at any one time for each database’s transaction log.

There are 3 things that cause SQL Server to need to flush a log buffer to disk (to an adjoining log block in the transaction log). 


A transaction commits and that transaction has an active log record
in a log buffer.  This will cause all log records in those buffer
(again, up to 60K worth of transaction log record for each log
buffer) to be flushed to the log file.
We hit the 60K size limit for the log buffer and must flush it to
disk.
We have data pages that we must write to disk and there are log
records related to those pages.  We must write those log records to
the log file BEFORE we write the data pages to the data files (this
supports our Write Ahead Logging (WAL) protocol).


The smallest log flush possible is a single 512-byte log block. If all transactions in a workload are very small (e.g. inserting a single, small table row) then there will be lots of minimally-sized log flushes occurring. Log flushes are performed asynchronously, to allow decent transaction log throughput, but there is a fixed limit of 112 concurrent log-flush I/Os at any one time.

As you described you have good io subsystem in conjunction with a large number of short transactions/sec your problem may be following.

On a high-performing I/O subsystem, the writes may complete extremely quickly, but the limit of 112 concurrent log-flush I/Os creates a bottleneck when trying to make the log records durable on disk. This situation can be identified by low write latencies and a near-constant number of outstanding transaction log writes near to 112 in the aggregated output of sys.dm_io_pending_io_requests.

Most of what I mentioned above are from following resources and there are few solutions described.  Also Paul Randal has a short video with demo scripts to confirm if you are having the issue I mentioned above.


Transaction Log Monitoring by Paul Randal
Trimming the Transaction Log Fat part 1  by Paul 
Trimming More Transaction Log Fat part 2 by Paul Randal
WHAT IS SQL SERVER’S IO BLOCK SIZE? by Argenis Fernandez
Video by Paul Randal
Demo code to use with the video by Paul Randal