+ All Categories
Home > Documents > Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a...

Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a...

Date post: 24-Jul-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
27
Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library Tigran Mkrtchyan for dCache Team EMI is partially funded by the European Commission under Grant Agreement RI-261611
Transcript
Page 1: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

Implementing a high-end NFSv4.1 service using a Java

NIO framework

In 7500 lines to new RPC libraryTigran Mkrtchyan for dCache Team

EMI is partially funded by the European Commission under Grant Agreement RI-261611

Page 2: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 2

dCache NFS vs. N.N

ATLAS hammer-cloud

DESY GridLab:● 50% T2 CPU● 30% T2 Storage(See poster 503)

Page 3: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 3

The anatomy of NFS package

NFSv41 (rfc 5661)

RPC (rfc 1831) RPCCES_GSS(rfc 2203)

XDR (rfc 1832)

Page 4: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 4

A bit of ONC­RPC history● Developed by Sun Microsystems in 1986● First published in 1988 (as Sun RPC)● Re­published as standard in 1995 (as ONC RPC)● ~1600 registered services at IANA

● NFS● NIS

● Widely used at HEP in  90's● Control, DAQ, Monitoring, Data transfer

Page 5: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 5

Today status● Pushed back by new 'Buzz Words'

● XML-RPC & JSON-RPC● SOAP & REST

● Performance still not bitten● Google's Protobuff is real alternative

● String type● Modern language friendly● No service version number● Encode/Decode only (more like XDR)

Page 6: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 6

Why invent a new wheel?

● Not that many Java implementations● No bi-directional RPC support● No RPCSEC_GSS● Not up-to-date

● Official libtirpc not good enough● No bi-directional RPC● JAVA – C integration

Page 7: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 7

Is it a square wheel?● High performance network IO is not an RPC/NFS 

requirements● Network components from GlassFish Application Server

● RFC 1831 and RFC 2203 compliant● IPv6 support ● GSS handling comes from Java Run­time Environment

● jre 6 provides AES128 and AES256● Poll/epoll/select/p_threads handles by JVM

● We use high level abstractions● Works on Linux, Solaris, OS X, Windows and Android

Page 8: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 8

We are not doing it the typical JAVA way

● Single thread per connection● Thousand threads per server

● Request processed almost in a single thread● No thread fencing (till first shared resource)

● Simple to implement● Blocking reads● Blocking writes● Idle threads costs nothing (ok, 48k stack space)

Page 9: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 9

RPC vs. Others 

HTTP GET

TCP

RPC CALL

TCP

RPC CALL

RPC CALL

● Many protocols are request-reply based● No new requests as long as no reply● Multiple requests processed sequentially

● Possible multiple independent requests➔ Even in one TCP package

● Server may process requests out-of-order➔ Reply in asynchronous fashion

● THE way to go for some workloads➔ High latency High bandwidth NFS access

Page 10: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 10

Our approach● Poll of IO threads

● Typically set to #Cores

● Pool of worker threads ( if required )● Processing per PRC packet

● No binding to network connection● Can be used with other transport (RDMA)

● Event based● doOnRead if bytes arrived● doOnWrite if bytes sent

Page 11: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 11

jRPC vs. Linux kernel

1 2 4 8 16 32 640

50000

100000

150000

200000

250000

300000

58000

105000

148000

183000

201000208000 209000

46000

86400

135000

202000

224000

243000253000

30000

4700060000

90000101000

9300085000

RPC requests per second

linux-kernel

jRPC

nfs-ganesha

number of client threads

req

ue

sts

pe

r s

ec

on

d

Page 12: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 12

jRPC vs. Linux kernel

1 2 4 8 16 32 640

50000

100000

150000

200000

250000

300000

58000

105000

148000

183000

201000208000 209000

46000

86400

135000

202000

224000

243000253000

30000

4700060000

90000101000

9300085000

RPC requests per second

linux-kernel

jRPC

nfs-ganesha

number of client threads

req

ue

sts

pe

r s

ec

on

d

Results are confirmed byLinux and tirpc developers

Page 13: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 13

Chain of responsibilities

TCP

RPC Fragment collector/splitter

RPC validation

RPC dispatcher

GSS encode/decoder

ReplyCall

RPCBINDNFSv4

NIC/OS

Page 14: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 14

IO strategy: Same Thread

TCP

RPC Fragment collector/splitter

RPC validation

RPC dispatcher

GSS encoder/decoder

NFSv4

NIC/OSSingle thread pick-ups an event and process it.

IO thread pool

Page 15: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 15

IO strategy: Worker Thread

TCP

RPC Fragment collector/splitter

RPC validation

RPC dispatcher

GSS encoder/decoder

NFSv4

NIC/OS

IO thread pool

Worker thread pool

A thread pick-ups an event andpushed it into event queue.

IOQueue

Page 16: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 16

Multi­Core

Page 17: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 17

How that looks like in the code

RpcDispatchable nfs4 = new NFSServerV41(....);

OncRpcSvc svc = new OncRpcSvcBuilder()

        .withTCP()

        .withAutoPublish()

        .withPort(2049)

        .withSameThreadIoStrategy()

        .build();

svc.register(nfs4_prot.NFS4_PROGRAM, nfs4);

svc.start();

Page 18: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 18

Code re­use (and much more)

TCP

RPC Fragment collector

RPC validation

RPC dispatcher

GSS unpacker

NIC/OS

RPC client

To send RPC calls To receive RPC calls

● All Filters have:● onRead to process receive● onWrite to process send

NFSv4server

NFSv4client

Page 19: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 19

Bi­directional RPC

TCP

RPC Fragment collector

RPC validation

RPC dispatcher

GSS unpacker

NFSv4server

NIC/OS

RPC client

NFSv4client

To send RPC calls To receive RPC calls

● Client/server defined by connection initiator only.

● Any client can receive calls.● Any server can send

requests.

Page 20: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 20

Security

● RPCSEC_GSS (krb5)● Proofed to work with AD, MIT and Heimdal● Supported Quality of protection:

● NONE● INTEGRITY● PRIVACY

Page 21: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 21

QOP none

Page 22: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 22

QOP integrity

Page 23: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 23

QOP privacy

Page 24: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 24

SUMMARY 

● High performance RPC library● Compatible with existing standards● Meets today's  requirements

● IPv6, AES256

● In production since 2009 (dCache­1.9.5)

Page 25: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 25

Ready to use by others

● Spitted into an independent library● Licensed with LGPLv2● Hosted on 

http://code.google.com/p/nio­jrpc/● Maven repo.● Already used in third party products

● BACnet● One of the Swiss banks

Page 26: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 26

Wild Slides

Page 27: Implementing a high-end NFSv4.1 service using a Java NIO … · 2012-05-22 · Implementing a high-end NFSv4.1 service using a Java NIO framework In 7500 lines to new RPC library

  dCache's NIO­JRPC library | Tigran Mkrtchyan  |  5/22/12  |  Page 27

dCache in one slide

Pools(Data Server)

Pools(Data Server)

Door

Message passing layer

JVM JVM JVM

Door(s)(clients entry point) Pool Manager

(requests scheduler)Name Space(MetaData Server)

Pools(Data Server)

DBMSdcap

ftphttpnfs


Recommended