1. What Developers Should Know About Windows® Server 2008 R2 Clint edmonson Architect Evangelist clinted@Microsoft.com
2.
3. Windows Server 2008 R2Platform Enhancements Power Efficiency Multicore & NUMA 64-bit Kernel Virtualization
4. Performance, Efficiency & ExtensibilityKernel Changes Windows® 7 (x64) and Windows ® Server 2008 R2 are based on same kernel Enhancements in many areas: Multi-core and many-core processing Removal of several coarse-grained locks Desktop and registry memory management optimizations Process & Power efficiency Virtualization Security Management
5. User Mode Scheduling (UMS)Designed for Performance Limitation of Fibers is that the kernel doesn’t know about them Some system calls have state associated with underling thread If Fibers run on multiple threads, state can become corrupt UMS solves thread state problem by separating user-mode thread and kernel-mode thread Runtime creates enough threads for concurrency demands Each thread has user-mode thread (UT) and kernel-mode thread (KT) state Switching between user-threads doesn’t switch kernel thread When a user-mode thread goes into kernel mode, it switches to the corresponding kernel thread
6. Cooperative “User-Mode” SchedulingDesigned for Performance UMS enables high-performance multi-threaded apps Concurrent runtimes like ConcRT (Visual Studio) will use UMS User Thread 4 User Thread 3 User Thread 5 User Thread 6 Core 2 Core 1 Core 2 Core 1 Thread 4 Thread 5 User Thread 1 Thread 1 Thread 3 Thread 2 Thread 6 User Thread 2 Application Kernel Kernel Thread 1 Kernel Thread 2 Kernel Thread 4 Kernel Thread 3 Kernel Thread 5 Kernel Thread 6 Non-running threads Thread Scheduling Cooperative Scheduling
7. Removal of Coarse-Grained Locks Locks serialize access to kernel data structures Prevents multiple threads from simultaneously modifying data Inhibits scaling because threads must wait for their turn (contention) Examples: Dispatcher Lock Memory Manager PFN Lock Cache Manager Virtual Address Control Block (VACB) Lock Object Manager Type Lock Either replaced with lock-free algorithms or with finer-grained synchronization mechanisms
8. Memory Optimizations Desktop Window Manager (DWM) re-architecture reduces memory footprint per window by 50% Registry moved from mapped files to paged pool Improves performance because views into registry file don’t need to be mapped and unmapped Working set management improvements: Working set is amount of RAM memory manager assigns to process or kernel memory type Memory manager uses more information for better tuning System cache, paged pool, and pageable system code each have own working set Before were in the same working set Now, each tuned according to specific usage, which improves memory usage
9. Intelligent Timer CoalescingDesigned for Efficiency Staying idle requires minimizing timer interrupts Before, periodic timers had independent cycles even when period was the same New timer APIs permit timer coalescing Application or driver specifies tolerable delay Timer system shifts timer firing to align periods on a coalescing interval: 50ms, 100ms, 250ms, 1s Timer tick 15.6 ms Windows® Vista Periodic Timer Events Windows 7
10. “Trigger-Start” ServicesDesigned for Efficiency Previously, services typically started at system boot and ran until shutdown Services can now specify specific start and stop conditions (triggers): Device class arrival and removal Bthserv: start on Bluetooth device class arrival IP address arrival and removal Lmhosts: start on first and stop on last IP address availability Firewall port event Browser: open of NS and DGM ports Domain join and unjoin W32Time: start on join, stop on un-join Custom Event Tracing for Windows (ETW) event Appid: start when Security Rollup Package (SRP) enabled Triggers are stored in service registry key
12. Native VHD SupportDeveloped for Extensibility Support for fixed, dynamic and differencing VHDs Mount VHD files as new volumes Boot from VHD file VHD driver integrates the virtual volume into the NTFS or FAT file system Performance within 10% of physical volumes ( with fixed size VHDs) Use the VHD API to create, mount, and utilize VHD files (virtdisk.dll) Windows C:br />F:br />VHD
17. Server Core Architecture Server, Server Roles (for example only) TS ADFS WDS etc Server With .NetFx, Shell, Tools, etc. Server Core Server Roles and Optional Features .NET2.0 .NET3/3.5 ASP.NET IIS PS DNS DHCP AD File AD LDS Print Media Server Cert Server Hyper-V Server Core Security, TCP/IP, File Systems, RPC,plus other Core Server Sub-Systems GUI, Shell, IE, Media, Mail, Etc. WoW64
18. Windows PowerShell™ 2.0Integrated with Windows Remote Management New integrated debugger New optional GUI environment Seamless integration with remoting and domain identity Extend your applications with a custom PowerShell object-model
21. BITS Compact ServerBackground Intelligent Transfer Service Gets Small Easy to manage “lightweight” HTTP server Standalone solution to host files in domain/work groups Complements BITS client to provide ubiquitous file transfers Enables orchestration of secure file transfers remotely (via WMI) between machines Extensible API for your applications For large scale downloads, leveraging existing BITS IIS extension is recommended
22. Windows Web Services APIAnother Option for Web Services Web services targeted at unmanaged code No dependency on .NET framework Allows both client and server endpoints Interoperability with WS-* SOAP stacks Windows Communication Foundation (WCF) ASP .NET XML Web Services (ASMX) Non-Microsoft stacks System component of Windows Server 2008 R2 System component of Windows 7 Available for Windows XP, Windows Vista ®, Windows Server 2003, Windows Server 2008 Libraries included in Windows 7 SDK
23. Windows Web Services APINative WS-* Endpoint Library (webservices.dll) Client Web Service Endpoint Endpoint A B C A B C Endpoint Service Proxy A B C Endpoint Code Generator A B C WSDL Service Host Code Generator XSD
24.
25. Set classification properties API for external applicationsExtract classification properties Store classification properties Apply policy based on classification Discover data Classify data Windows Server 2008 R2 FCI Extensibility Points
“Not your average R2…”Paul Thorrott, Windows IT Pro http://windowsitpro.com/article/articleid/100766/windows-server-2008-r2-not-your-average-r2.htmlThis is a quote from a technical writer, Paul Thorrott, after reviewing the Windows Server 2008 R2.He’s correct. Usually, an “R2” release is a mid-cycle feature-extension of an existing product release. Not with this “R2”.The Server platform has received fundamental technology enhancements that really do make this release significant.
Besides Scalability… there are several hardware trends influencing system design today.Windows® Server 2008 was our first significant product release with platform features taking advantage of these trends.Windows Server 2008 R2 builds upon the exceptional legacy of Windows Server 2008. While Windows® 7 is available in both 32- and 64-bit versions, R2 is the first 64-bit only Server release, for instance, some of the key new features areas in Windows Server 2008 R2 include: · Platform Scalability - We just mentioned the support of more than 64 processors.· Virtualization – the “R2” release of Hyper-V™ is arguably Microsoft’s first “full-feature” implementation of the Hyper-V technology.· Power Management – Power efficiency in the data-center has never been more important. “R2” is the server to deploy if power-savings are business critical.· Web Workloads – IIS7 was a re-architecture of the Microsoft Web Platform. That extensible architecture has proven to be very robust. “R2” builds upon this with IIS7.5. We’ll discuss this more in Session 3 today.· Enterprise Workloads – Microsoft remains “the” Enterprise Platform. No other platform offers as many integrated solution possibilities in the Enterprise. We’ll look at a few solution scenarios that are new with “R2”. Developers, we think, will appreciate using these extensible platform technologies within their own Windows solutions.
Let’s first take a look at “R2” from the Kernel perspective… Windows 7 is available in both 32-bit and 64-bit versions. Windows 7 (64-bit) and “R2” share the same kernel source. There are lots of new and improved Windows 7 features, but the Server includes specific features for server workloads (of course). Let’s examine a few of these in more detail:Removal of several coarse-grained locks:• Locks serialize access to data structures.•Prevents multiple threads from simultaneously modifying data.•Inhibits scaling because threads must wait for their turn (contention).Examples:• Dispatcher Lock.• Memory Manager PFN Lock.• Cache Manager Virtual Address Control Block (VACB) Lock.• Object Manager Type Lock.• Either replaced with lock-free algorithms or with finer-grained synchronization mechanisms.Memory management optimizations• Desktop Window Manager (DWM) re-architecture reduces memory footprint per window by 50%.• Registry moved from mapped files to paged pool.• Improves performance because views into registry file don’t need to be mapped and unmapped.Working set management improvements:• Working set is amount of RAM memory manager assigns to process or kernel memory type.• Memory manager uses more information for better tuning.• System cache, paged pool, and pageable system code each have own working set (were previously in the same working set).• Now, each tuned according to specific usage, which improves memory usage.Multi- core & many-core processingNon-Uniform Memory Access (NUMA) Computer Architecture Support.Windows 7/R2 Supports more than 64 Logical Processors on a single system.• Introduced Processor Groups (in groups of 64).• New applications can localize processes, threads, and interrupts at very granular level (node, processor enables developers to “minimize resource contention and maximize execution locality”).• User-Mode-Scheduling (UMS).UMS solves thread state problems in highly concurrent solutions by separating user-mode thread and kernel-mode thread execution.• Switching between user-threads doesn’t switch kernel thread.• When a user-mode thread goes into kernel mode, it switches to the corresponding kernel thread.• Minimizes most cases of thread-context-switching. • The C++ Concurrency Runtime (Visual Studio 2010) uses UMS for thread and task scheduling.Power efficiency• Minimize running services and tasks with Unified Background Process Manager (UBPM) enhancements .- Trigger-Start Services use system or user-defined events to start and stop.- Avoid background processing.- Integrate with system-level power-state designs.• Core Parking- The OS dynamically transitions low-activity sockets and processors to low-power states.- Automatically consolidates processes and threads to alternate processors to maximize power and CPU usage.• System Timer Reduction- Eliminated timer scenarios on Deferred Procedure Call (DPC) interrupts.- Reduced timer frequency for specific scenarios (USB).- New “Timer Coalescing” system strategy minimizes timer interrupts across the system.• Device Power Management EnhancementsSupport for latest power-intelligent devices (NIC, BlueTooth, etc.)Security• Virtual Accounts- Better isolation for service accounts. - Services can specify a local, automatically system-managed, account e.g. “NT SERVICE<account>”• Managed Service Accounts- New Active Directory® (AD) class.- Password and SPN automatically managed by AD.Management• WinRM (Windows Remote Management) service enhancements.• Windows PowerShell™ V2 enhancements.- Remote Execution- Sessions• Enterprise Networks enhancements- DirectAccess- BranchCache™- BITS Compact Server- Windows Web Services API Virtualization New VHD support in file systems. VHD’s may be mapped as NTFS volumes within existing file system. Boot to VHD capability. Extensive improved support for virtualization with Hyper-V role.Componentization and layering • Server Core Installation.• Now includes .NET Runtime and .NET Framework Class Library support.• No GUI components of .NET supported.• Expanded “optional feature” list supported (IIS, ASP.NET, WoW64, and numerous network services roles/features).
Read more here: http://blogs.msdn.com/nativeconcurrency/default.aspx
User-Mode Scheduling (UMS) is new in R2.On high-performance multi-core systems, many computational applications could benefit from their own thread scheduling facilities. UMS is a light-weight mechanism that an application or library can use to schedule its own threads. An application can switch between threads in user-mode without involving the operating system thread scheduler and thus maintains control of the processor. A UMS-based Scheduler never blocks on worker threads making kernel transitions and effectively maximizes parallel task execution.The implementation details of UMS is beyond the scope of this presentation, but suffice it to say that you can benefit from UMS without actually writing your own scheduler. This is because the new Concurrency Runtime includes a built-in UMS-based Scheduler. Our second session today will cover this topic in more detail.The animation on this slide illustrates how an Application (running in user-mode on the top of the slide) manages 6 worker threads that are scheduled against 2 physical processing cores. The kernel (on the bottom of the slide) collaborates with the applications’ UMS Scheduler to ensure that when any thread that makes a blocking system call, the application regains control of the core and is able to schedule a waiting worker thread. The application benefits from high processor utilization.================ More Reference Info ==========================User Mode Scheduling (UMS) • UMS solves thread state problem by separating user-mode thread and kernel-mode thread.• Switching between user-threads doesn’t switch kernel thread.• When a user-mode thread goes into kernel mode, it switches to the corresponding kernel thread.• Concurrent runtimes like ConcRT (Visual Studio) will use UMS.UMS Architecture• Runtime creates enough threads for concurrency demands.• Each thread has user-mode thread (UT) and kernel-mode thread (KT) state.• Runtime creates one primary thread per LP.• Primary hands off to user-mode threads (UT) .• UTs remain running on Primary KT.• UTs schedule cooperatively.UMS System Call Servicing• When UT makes system call, scheduler makes directed context switch to corresponding KT.•Matches kernel state with user state.•When KT exits kernel, scheduler switches back to primary.If KT blocks in the kernel:•Scheduler switches to Primary.•When KT unblocks, UT goes to completion list.•Runtime can schedule when ready.•Kernel uses Kernel Queue to limit concurrency.•Queues also used by I/O completion ports.
http://channel9.msdn.com/shows/Going+Deep/Mark-Russinovich-Inside-Windows-7/Removal of the Dispatcher Lock:Scheduler Dispatcher lock hottest on server workloadsLock protected all synchronization objects (mutex, events, semaphores)To improve scaling, Dispatcher Lock was removedNow, each object is protected by its own lockRemoval of the Memory Manager PFN LockWindows tracks the state of pages in physical memoryIn use (in a working set)Not assigned to a working set (on one of several paging lists: free, zero, modified, standby…)Before, all page state changes protected by global PFN (Physical Frame Number) lockNow, the PFN lock is gonePages are now locked individuallyImproves scalability for applications that manage large amounts of memoryRemoval of Cache Manager Virtual Address Control Block (VACB) lockImproves scaling of applications that perform intensive cached file I/ORemoval of Object Manager Type lockImproves scaling of workloads that modify kernel objects (synchronization, files, registry keys)
OPTIONAL SLIDE – Hidden by defaultTimer CoalescingAnother way we’ve handled power is to minimize the number of times the system wakes up to handle timer interrupts.When we looked at how Windows apps use timers, many of them just ask for a timer.If there are 2 apps and they both want a timer to return in 50ms then the first one happens & bang, almost immediately the 2nd one occurs. In most cases they don’t really care about the precision, just as long as the pulses are about say 50ms apart. You know what, roughly every 50ms I want to do something.So there are new API’s that have been introduced called the coalescing timers. I want to be called every 50ms, but if you’re off by 3ms, I don’t care.The top line shows the WindowsVista system, the lower picture shows how over time, the number of wake-ups is much reduced.Intelligent Timer Tick DistributionWe’ve done something else too.We want to keep processors idle. The first processor gets the heartbeat (for scheduling). When this occurs, it notifies the other processors.The problem is that if you’ve got processors that are idle, they would wake up and say “hey, there’s nothing to do” and then go back to sleep again.Now we have Intelligent Timer Tick Distribution (aka Tick Skipping) – it doesn’t needlessly wake up idle processors.
Trigger-Start Services built upon another system feature - Unified Background Process Manager (UBPM)UBPM infrastructure unifies mechanisms for event-based process start and stop.• Implemented in Service Control Manager. • All events are based on ETW (Event Tracing for Windows) events.SRP = Software Restriction PoliciesUBPM system clients include:• Task Scheduler: new Taskhost processes.• Service Control Manager: Trigger-Start services.Trigger Start Services are just one example of how R2 is designed for efficiency. One important benefit is that now your services can play a bigger role in overall system responsiveness, especially in usage scenarios like system-boot. ================ Optional ==========================Demo: Show Trigger Start ServiceAdmin Command Window (sc communicates with the Service Control Manager).sc qtriggerinfo bthservsc qtriggerinfo lmhostsyou can see the START SERVICE and STOP SERVICE conditions; these are specified in the register for any specific service. With that, we’ve minimized the number of services which need to start up at System Start-Time.
Native Virtual Hard Disk (VHD) SupportVHD is exploding – a lot of people want to do it. As a result, VHD support has been integrated into the OS (not only for virtual machines, but also for new scenarios including disk management and ‘boot-2-vhd’ capabilities).We support fixed, dynamic and differencing VHDs.VHD files may be mounted as new volumes within the Operating System.You can add a VHD file as a “bootable” partition within the Windows Boot Manager.You can even write applications to create, access, mount, or otherwise use VHD’s.The key is a VHD driver that integrates the virtual volume into the NTFS or FAT file system. The VHD Driver knows the VHD format and it will propagate operationsdown into the physical volume using regular File IO. ================ More Reference Info ==========================VHD BOOTStrategic direction for Windows in the Data Center:• Image consolidation.• Single image format for generalized and specialized physical images.• Single generalized master image for virtual and physical environments.• Reduced management TCO.• Single toolset and process for management and deployment. Enables other compelling scenarios: • Rapid provisioning and repurposing. • Rapid, reliable patching and rollback.Foundational support for booting from VHD and for Surface/Removal of VHDs:• Orderly and surprise removal of volumes.• Support for nested volumes.• Servicing for mounted (offline) VHD volumes.VHD Operations:• Create / Surface / Remove.• Meta-operations.Tools and APIs: • Win32 APIs. • VDS APIs (DCOM Remotable). • Hyper-V WMI for management operations.Performance goal: within 10% of native
Let’s take a look at what a developer should know about Windows Server Core and also showcase some PowerShell in the process…< SEE THE DEMO’s DOCUMENTS>
Let’s switch gears a bit and look at the platform from a recent trend that’s quite challenging for developers.Your customers like to deploy servers that require a minimal amount of patching and administration. They also want their servers to be secure and difficult to attack.Developers want to write code once and deploy it to systems without having to deal with deployment constraints.This is where Server Core comes in…
TO DO: Animate the console window to appear as the speaker introduces Server CoreServer Core is:A minimal installation option for Windows Server.There is onlyCommand Line interface, no GUI Shell.<CLICK>Very popular for Enterprise service workloads.Included in the following Windows Server editions:• Windows Server 2008 R2 Web Edition• Windows Server 2008 R2 Standard Edition• Windows Server 2008 R2 Enterprise Edition• Windows Server 2008 R2 Datacenter EditionServer Core reduces requirements for Updates.Servicing burden is reduced by removing components that are most often serviced.• Windows 2000 is ~60% reduction• Windows Server 2003 is ~40% reduction• Windows Server 2008 to date is ~40% reductionSo, it’s an installation option for Windows Server… A way to minimize the system components that get deployed.
Let’s consider the Server Core system architecture. What’s different from a normal Windows Server?Server Core is all about “component Windows” - that means that not all, but many, system components are optional. What’s new with R2 is that now the selection of optional components includes portions of the .NET Framework and Runtime.Now, you can select the smallest set of system dependencies required to host your applications and significantly reduce the administration and management of servers within your enterprise.<CLICK>You may choose to add or remove the WoW64 feature, for instance…<CLICK>Or Add portions of the .NET Framework required to host an ASP.NET application…<CLICK>Maybe add support for Windows PowerShell™ in order to host your cmdlets for remote management capability…<CLICK>Or, one or more of a number of optional server roles and features….Server Core has moved from a typical network services host platform to a very reasonable option for hosting enterprise applications. You will want to include Server Core as a target deployment platform for your applications and include it in your list of platforms for application testing.
PowerShell 1.0 was introduced as a new, powerful, shell scripting environment. It has succeeded and as such has developed quite a community.However, “PowerShell” is much more than a scripting environment. It’s also the surface representation of an automation sub-system. You can integrate your applications with this automation system and give your customers a truly versatile application experience.For Developers specifically, Windows PowerShell in combination of the Windows Management Infrastructure (WinRM, WS-Management, WMI) and provides a great way to automate server hosted solutions.For example, if you implement all your administration logic via PowerShell, then layer the MMC GUI over the top (i.e. MMC calls PowerShell to get the work done) - you will have given your Enterprise customers the absolute best of all worlds; GUIs, scripting,and delegated, remote automation. Unlike most scripting shells, which accept and return text, Windows PowerShell is integrated with the .NET Common Language Runtime (CLR) and the .NET Framework, and thus deals in .NET objects instead of just text strings. This fundamental change in the environment brings entirely new tools and methods to the management and configuration of Windows. Application Developers may extend their solutions with custom PowerShell based object models which integrate seamlessly with platform management solutions. Like many shells, Windows PowerShell gives you access to the file system on the computer. In addition, Windows PowerShell providers enable you to access other data stores, such as the registry and the digital signature certificate stores, as easily as you access the file system. Version 2 of Windows PowerShell introduces an array of new features including remote sessions, an integrated script environment, debugging tools, and much more.
Let’s take a look at what a developer should know about Windows Server Core and also showcase some PowerShell in the process…< SEE THE DEMO’s DOCUMENTS>
Windows Server is a great foundation for custom network-aware enterprise solutions.Let’s look at a few new technologies available now with R2 in the area of Enterprise solutions. Each of these technologies is extensible with API’s you can use from within your own applications.
Prior to R2, BITS Server required the host machine to be an IIS Web Server. Now, BITS has a “compact” option in which BITS functionality integrates directly with the HTTP stack avoiding the requirement for IIS. This is ideal for smaller-scope deployments within the Enterprise.BITS also exposes PowerShell and WMI API’s which integrates easily within your applications or scripts.You might combine BITS with the new BranchCache, for example, and achieve a very efficient content distribution solution within the Enterprise.
Primer: http://msdn.microsoft.com/en-us/library/dd430435(VS.85).aspxWindows Web Services API is intended for extreme performance and minimal overhead Web Services scenarios. You can build both client and server WS-* protocol endpoints using WWSAPI. WWSAPI is not meant to replace Windows Communication Foundation (WCF) for building web services.WCF is a .NET technology for web services. WCF itself has good performance and it is very easy to build web services using WCF. However, there are scenarios where WCF may not be the correct choice.A designer might choose to implement solutions using WWSAPI given the following requirements, for example:• A native code only mandate. • Minimal library or component dependencies.• Minimal tolerance for endpoint service startup times.• Minimal runtime process working set. • Per process memory constraints. • Avoidance of native/managed interop scenarios (especially interop scenarios between “chatty” interfaces).• Easy to WS-* enable a legacy native service or solution-domain library.Features:Connecting with existing (perhaps legacy) native code and web services:• Win32 API• No dependency on .NET FrameworkInteroperability with WS-* SOAP stacks:• Windows Communication Foundation (WCF)• ASP .NET XML Web Services (ASMX)• Non-Microsoft stacksSystem Component of Windows 7 and R2:• Available for Windows XP/Vista/2003/2008Developing for either client or server endpoints required the pre-release Windows 7 SDK to access the "WebServices.h" header file.COMPONENTS OF WEB-SERVICES (WS=*) SPECIFICATION: A = Address B = Binding C = Contract
Primer: http://msdn.microsoft.com/en-us/library/dd430435(VS.85).aspxWindows Web Services API is intended for extreme performance and minimal overhead Web Services scenarios. You can build both client and server WS-* protocol endpoints using WWSAPI. WWSAPI is not meant to replace Windows Communication Foundation (WCF) for building web services.WCF is a .NET technology for web services. WCF itself has good performance and it is very easy to build web services using WCF. However, there are scenarios where WCF may not be the correct choice.A designer might choose to implement solutions using WWSAPI given the following requirements, for example:• A native code only mandate. • Minimal library or component dependencies.• Minimal tolerance for endpoint service startup times.• Minimal runtime process working set. • Per process memory constraints. • Avoidance of native/managed interop scenarios (especially interop scenarios between “chatty” interfaces).• Easy to WS-* enable a legacy native service or solution-domain library.Features:Connecting with existing (perhaps legacy) native code and web services:• Win32 API• No dependency on .NET FrameworkInteroperability with WS-* SOAP stacks:• Windows Communication Foundation (WCF)• ASP .NET XML Web Services (ASMX)• Non-Microsoft stacksSystem Component of Windows 7 and R2:• Available for Windows XP/Vista/2003/2008Developing for either client or server endpoints required the pre-release Windows 7 SDK to access the "WebServices.h" header file.COMPONENTS OF WEB-SERVICES (WS=*) SPECIFICATION: A = Address B = Binding C = Contract
http://www.microsoft.com/windowsserver2008/en/us/fci.aspxFCI is new and available only with R2.FCI is a an extension of the existing file properties design that provides a built-in solution for file classification. FCI also provides an extensible infrastructure upon whichdevelopers can build end-to-end solutions that enable organizations to perform advanced classification and datamanagement. Example implementations include automatic identification of stale or unreferenced data on a file server combined with automatic removal or archiving. Or, automatic classification of business-sensitive content and corresponding encryption or RMS protection of the content.Main points - Windows Server 2008 R2 provides an infrastructure to classify files and apply policy based on classification.Extensible – partner ecosystem to build on top of the infrastructure to deliver rich end to end solutions.Windows functionality inbox to provide end to end scenarios to automatically classify files and apply file management tasks based on classification.SharePoint Integration: When files are classified on the file server and moved to SharePoint, the classification is maintained.